Python 从列表中查找秘密单词?
我必须使用函数isInsecretWord,lettersGuessed从列表中查找秘密单词。在下面发布我的代码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
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中也出现了错误。