从列表中找到秘密词?
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'])
嗯,secretWord
和lettersGuessed
都不为空,所以我们进入第二个条件。
由于 apple
的第一个字母在猜测的字母中,函数 returns True - 因此错误。
edit:有人指出 secretWord[0:]
是完整的词,这并不能解释为什么它有时会起作用。原因其实和上面类似,只是反过来。
第二个条件,只会用 last 字母调用,
由于 apple
、pple
、ple
和 le
不在 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
我必须使用函数 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'])
嗯,secretWord
和lettersGuessed
都不为空,所以我们进入第二个条件。
由于 apple
的第一个字母在猜测的字母中,函数 returns True - 因此错误。
edit:有人指出 secretWord[0:]
是完整的词,这并不能解释为什么它有时会起作用。原因其实和上面类似,只是反过来。
第二个条件,只会用 last 字母调用,
由于 apple
、pple
、ple
和 le
不在 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