程序忽略if​​语句,并在False时打印True

时间:2013-11-13 20:13:20

标签: python if-statement statements

我正在为一个家庭作业问题编写一个简单的程序,它似乎正在跳过我的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'])

4 个答案:

答案 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])