“是”或“是” - 期望未得到满足

时间:2011-02-17 19:13:19

标签: python

在下面的代码中,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"

6 个答案:

答案 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。