从列表中找到秘密词?

To find secret word from a list?

我必须使用函数 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 的一个字母在 lettersGuessed 中被猜对了,它应该在第二次递归中排除它。我需要知道是否有办法从列表 lettersGuessed 中排除猜到一次的字母。

谢谢

P.S。我得到了解决方案,但在此处提出的类似问题中使用了不同的代码,但要了解我需要知道我哪里出错了。

按条件分解:

if secretWord=="" or lettersGuessed==[]:
    return False

如果为空,则 return 为假。看起来很简单。

if secretWord[0:] in lettersGuessed:
 return True

如果第一个字母在密字中,return正确。好的,让我们看看调用:

isWordGuessed('apple', ['a', 'e', 'i', 'k', 'p', 'r', 's'])

嗯,secretWordlettersGuessed都不为空,所以我们进入第二个条件。

由于 apple 的第一个字母在猜测的字母中,函数 returns True - 因此错误。


edit:有人指出 secretWord[0:] 是完整的词,这并不能解释为什么它有时会起作用。原因其实和上面类似,只是反过来。

第二个条件,只会用 last 字母调用,

由于 appleppleplele 不在 lettersGuessed 中,'e' in lettersGuessed 的最终检查将return 错误。所以最后一个字母在数组中的任何调用都将 return True.


你要的是这个:

def isWordGuessed(secretWord, lettersGuessed):

    if secretWord=="" or lettersGuessed==[]:
        return False
    else:
     return secretWord[0] in lettersGuessed and isWordGuessed(secretWord[1:],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