在下面的代码中,answer()
按预期工作,如果输入为“y”则返回true,否则返回false,但在answer2()
中,它始终返回true。
有人可以解释为什么会这样吗?
def answer():
answer = raw_input()
if answer == "y":
return True
else:
return False
def answer2():
answer = raw_input()
if answer == "y" or "yes": # <- notice the extra: or "yes"
return True
else:
return False
if answer() == True:
print "true"
else:
print "false"
if answer2() == True:
print "true"
else:
print "false"
答案 0 :(得分:7)
表达式"y" or "yes"
将评估为"y"
。你想要的是:
if answer in ('y', 'yes'):
return True
答案 1 :(得分:5)
我不是Python专家,但我怀疑它应该是:
if answer == "y" or answer == "yes": # <- notice the extra: or "yes"
换句话说,我怀疑它目前正在将其解析为:
if (answer == "y") or ("yes")
只是将“yes”转换为True,实际上......这就是为什么它总是返回True。
答案 2 :(得分:4)
你想要
if answer == "y" or answer == "yes":
你必须以这种方式进行测试。
或者更好的是,有一份肯定答复和测试包含的清单;
affirmatives = ["yes","y","ja","oui"]
if answer in affirmatives:
这与布尔(True / False)运算符有关。请查看以下内容:
>>> "yes" == "yes" or "fnord"
True
>>> "no" == "yes" or "fnord"
'fnord'
如果第一部分为True,则为True - 如果第一部分为False,则获得'或'的右侧。现在,通过:
answer == "y" or answer == "yes"
你可以看到如果第一个==返回False它返回第二个== test ...
答案 3 :(得分:2)
你需要说:
if answer == "y" or answer == "yes"
你是如何评价的:
if (answer == "y") or "yes"
总是为真,因为“是”是非空字符串。
答案 4 :(得分:1)
if answer == "y" or "yes":
请注意,这与:
不同if answer == "y" or answer == "yes":
因为“yes”是非零值,所以第一个将始终返回True。
答案 5 :(得分:1)
问题在于:
answer == 'y' or 'yes'
总是返回True或'yes'(实际上是True,因为它不是0或None),因为它被评估为:
if (answer == 'y') or 'yes'
因此您总是会触发'if'块并返回True。