这是一本字典:
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语句不起作用?
答案 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对于优先级问题也是完全正确的,尽管按照我的建议简化你的代码使它成为一个没有实际意义的点。