为什么赢得我的真实陈述?

时间:2014-06-20 20:30:25

标签: python if-statement dictionary

这是一本字典:

Vocab ={'Adherent' : " supporter; follower.",
'Incoherent' : "without logical or meaningful connection; disjointed; rambling",
'Inherent' : "existing in someone or something as a permanent and inseparable element, quality, or attribute"}

我在循环中创建了一组简单的if语句:

while 1:
    x = Vocab[random.choice(Vocab.keys())]
    print x
    t1=raw_input("What word matches this definition?: ")
    if t1 in Vocab == True:
        if Vocab[t1] == x:
            print "That's correct!"
        elif Vocab[t1] != x:
            print "That's wrong!"
    else:
        print "That's not a word!"
    raw_input("Hit 'enter': ")

由于某些奇怪的原因,当用户输入字典中的键时,代码输出:

"That's not a word"

为什么'== True'的if语句不起作用?

3 个答案:

答案 0 :(得分:6)

您无需使用if t1 in Vocab == True,只需使用if t1 in Vocab

问题是操作数优先级。 ==的优先级高于in,因此当您将if t1 in Vocab == True python解释写为if t1 in (Vocab == True)时。

要修复优先级问题,您可以这样写:if (t1 in Vocab) == True:,但是再次无需比较t1 in Vocab的结果是True,只需使用此:< / p>

if t1 in Vocab:

答案 1 :(得分:1)

您不应该使用“== True”。当你使用这种语法时,Python应该评估if语句。

答案 2 :(得分:0)

有几件事。首先,如果您使用的是Windows,则可能无法在输入行的末尾剥离'\r',或者您的输入可能会有额外的空格。但是,您可以显着简化代码,如下所示:

    t1=raw_input("What word matches this definition?: ")
    try:
        if Vocab[t1.strip()] == x:  # This should fix your 'not a word' problem
            print "That's Correct"!
        else:
            print "That's Wrong!"!
    except KeyError:
        print "That's not a word!"

在使用密钥之前,无需测试密钥是否在字典中。只需尝试使用它,然后捕获结果KeyError

修改

@MagnunLeno对于优先级问题也是完全正确的,尽管按照我的建议简化你的代码使它成为一个没有实际意义的点。