我必须使用isIn(secretWord,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的字母正确,则猜测它应该在第二次递归中将其排除。我需要知道是否有一种方法可以从列表中的猜测字母中排除一次猜测的字母。谢谢
附言我得到了解决方案,但是在这里提出了类似的问题,但使用了不同的代码,但是要了解我必须知道哪里出了问题。
最佳答案
一些修复:
>>> 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