Python 从列表中查找秘密单词?

Python 从列表中查找秘密单词?,python,recursion,Python,Recursion,我必须使用函数isInsecretWord,lettersGuessed从列表中查找秘密单词。在下面发布我的代码 def isWordGuessed(secretWord, lettersGuessed): if secretWord=="" or lettersGuessed==[]: return False if secretWord[0:] in lettersGuessed: return True else: return

我必须使用函数isInsecretWord,lettersGuessed从列表中查找秘密单词。在下面发布我的代码

def isWordGuessed(secretWord, lettersGuessed):

    if secretWord=="" or lettersGuessed==[]:
        return False
    if secretWord[0:] in lettersGuessed:
     return True
    else:
     return isWordGuessed(secretWord[1:],lettersGuessed)
例如,我得到了错误的答案。其中包括:

isWordGuessed('apple', ['a', 'e', 'i', 'k', 'p', 'r', 's'])
在上面的例子中,我得到了True作为输出,它应该是False,因为一旦猜到secretWord的一个字母在字母guesed中是正确的,它就应该在第二次递归中排除它。我需要知道是否有办法将猜测过的字母从列表中排除

谢谢


另外,我得到了这个问题的解决方案,但是在一个类似的问题中使用了不同的代码,但是为了学习,我需要知道我哪里出错了

逐个条件分解:

if secretWord=="" or lettersGuessed==[]:
    return False
如果为空,则返回false。看起来很简单

if secretWord[0:] in lettersGuessed:
 return True
如果第一个字母是秘密单词,则返回True。好的,让我们看看这个电话:

isWordGuessed('apple', ['a', 'e', 'i', 'k', 'p', 'r', 's'])
好吧,secretWord和lettersGuessed都不是空的,所以我们进入第二个条件

由于apple的第一个字母是猜测的字母,因此函数返回True-因此返回错误

编辑:有人指出secretWord[0:]获取了整个单词,但这并不能解释为什么它有时有效。其原因实际上与上述类似,但恰恰相反

第二个条件,只能用最后一个字母调用

由于苹果、苹果、苹果、苹果、苹果和苹果没有在最终检查中使用字母“e”,因此字母“e”中的“e”将返回false。因此,数组中最后一个字母所在的任何调用都将返回True

你想要的是:

def isWordGuessed(secretWord, lettersGuessed):

    if secretWord=="" or lettersGuessed==[]:
        return False
    else:
     return secretWord[0] in lettersGuessed and isWordGuessed(secretWord[1:],lettersGuessed)

因为你需要把第一个字母放在字母组中,其他字母也放在字母组中。

按条件分解:

if secretWord=="" or lettersGuessed==[]:
    return False
如果为空,则返回false。看起来很简单

if secretWord[0:] in lettersGuessed:
 return True
如果第一个字母是秘密单词,则返回True。好的,让我们看看这个电话:

isWordGuessed('apple', ['a', 'e', 'i', 'k', 'p', 'r', 's'])
好吧,secretWord和lettersGuessed都不是空的,所以我们进入第二个条件

由于apple的第一个字母是猜测的字母,因此函数返回True-因此返回错误

编辑:有人指出secretWord[0:]获取了整个单词,但这并不能解释为什么它有时有效。其原因实际上与上述类似,但恰恰相反

第二个条件,只能用最后一个字母调用

由于苹果、苹果、苹果、苹果、苹果和苹果没有在最终检查中使用字母“e”,因此字母“e”中的“e”将返回false。因此,数组中最后一个字母所在的任何调用都将返回True

你想要的是:

def isWordGuessed(secretWord, lettersGuessed):

    if secretWord=="" or lettersGuessed==[]:
        return False
    else:
     return secretWord[0] in lettersGuessed and isWordGuessed(secretWord[1:],lettersGuessed)
因为您需要将第一个字母放在lettersGuessed中,其他字母也需要放在lettersGuessed中。

一些修正:

>>> def isWordGuessed(secretWord, lettersGuessed):
...         if secretWord=="" or lettersGuessed==[]:
...             return False
            # secretWord[0:] picks whole word not a single character so replace with secretWord[0]
            # also flip the condition
...         if secretWord[0] not in lettersGuessed:  
...             return False
            # an extra check for the last word otherwise it would do one more recursion and return false by condition 1
...         if len(secretWord)==1 and secretWord in lettersGuessed:  
...             return True
...         else:
...             return isWordGuessed(secretWord[1:],lettersGuessed)
... 
>>> isWordGuessed('apple', ['a', 'e', 'i', 'k', 'p', 'r', 's'])
False
>>> isWordGuessed('apple', ['a', 'e', 'i', 'l', 'p', 'r', 's'])
True
一些修复方法:

>>> def isWordGuessed(secretWord, lettersGuessed):
...         if secretWord=="" or lettersGuessed==[]:
...             return False
            # secretWord[0:] picks whole word not a single character so replace with secretWord[0]
            # also flip the condition
...         if secretWord[0] not in lettersGuessed:  
...             return False
            # an extra check for the last word otherwise it would do one more recursion and return false by condition 1
...         if len(secretWord)==1 and secretWord in lettersGuessed:  
...             return True
...         else:
...             return isWordGuessed(secretWord[1:],lettersGuessed)
... 
>>> isWordGuessed('apple', ['a', 'e', 'i', 'k', 'p', 'r', 's'])
False
>>> isWordGuessed('apple', ['a', 'e', 'i', 'l', 'p', 'r', 's'])
True

好的,那我该如何改进呢?不应该在中使用?是的,明白了..但是这个例子显示为False,但是iWordGuessed是'durian',['h','a','c','d','i','m','n','r','t','u',但它应该是真的。是的,你是对的,eDx代码解释器可能有问题。[即使在在线python教程中,我在shell中也得到了错误。好吧。那么我应该如何改进它?不应该在中使用?是的,得到了。但是这个例子显示为错误,但iWordGuessed是'durian',['h','a','c','d','I','m','n','r','t','u',但它应该是正确的。是的,eDx代码解释器可能存在一些问题。[即使在在线python教程中,我的shell中也出现了错误。