我正在为一个家庭作业问题编写一个简单的程序,它似乎正在跳过我的if语句。我看过其他提出的问题,那里的问题似乎不是我的问题所以我希望你能提供帮助。
def isWordGuessed(secretWord, lettersGuessed):
if lettersGuessed == []:
return False
else:
for i in lettersGuessed:
if i in secretWord == False:
return False
else:
if i == lettersGuessed[-1]:
return True
当我在某些打印功能中查看它正在做什么时,它会完全跳过
if i in secretWord == False:
我已经放在这条线的正上方
print i in secretWord
它将打印出正确的布尔值,但即使打印出False,它仍然会跳过if语句。我觉得我必须忽略一些非常基本的东西,但是我似乎无法弄清楚它是什么,所以任何帮助都会受到赞赏。谢谢
编辑:
以下是使用输入
调用此函数的示例isWordGuessed('apple',['a','e','i','k','p','r','s'])
答案 0 :(得分:5)
if i in secretWord == False:
这不符合你的想法。如果您希望在i
不在secretWord
时使用此路径,则需要
if i not in secretWord:
你所做的是chained comparison。首先,检查
i in secretWord
如果这是真的,则检查
secretWord == False
如果这是真的(它不会是),那么它将采用if
路径。
答案 1 :(得分:1)
将if i in secretWord == False:
替换为if i not in secretWord
答案 2 :(得分:0)
只是这样做:
``
def isWordGuessed(secretWord, lettersGuessed):
if not lettersGuessed:
return False
for i in lettersGuessed:
if i not in secretWord:
return False
return True
你所做的事情被称为链式比较。
编辑:我的坏,太晚了
BR Daniel
答案 3 :(得分:0)
其他答案很好地解释了代码中的错误,但您可以像这样简化代码:
def isWordGuessed(secretWord, lettersGuessed):
for i in lettersGuessed or ['_']: # uses ['_'] when lettersGuessed = []
if not i in secretWord:
return False
return True
您也可以使用生成器表达式和all()
:
def isWordGuessed(secretWord, lettersGuessed):
return all([i in secretWord for i in lettersGuessed] or [False])