“y”或“yes” — 期待未达标

0 投票
6 回答
2046 浏览
提问于 2025-04-16 12:01

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

4

你想要的

if answer == "y" or answer == "yes":

你需要以这种方式进行测试。

或者更好的是,准备一个肯定回答的列表,然后测试是否包含这些回答;

affirmatives = ["yes","y","ja","oui"]
if answer in affirmatives:

这都跟布尔运算(真/假)有关。看看下面的内容:

>>> "yes" == "yes" or "fnord"
True
>>> "no" == "yes" or "fnord"
'fnord'

如果第一部分是“真”,那么结果就是“真”——如果第一部分是“假”,那么就会得到“或”后面的部分。现在,通过以下方式:

 answer == "y" or answer == "yes"

你可以看到如果第一个条件返回“假”,那么就会返回第二个条件的测试结果...

5

我不是Python方面的专家,但我觉得在答案2里应该是:

if answer == "y" or answer == "yes":  # <- notice the extra: or "yes"

换句话说,我觉得它现在是这样解析的:

if (answer == "y") or ("yes")

然后只是把“yes”转换成了True,实际上就是这样……这就是为什么它总是返回True的原因。

7

这个表达式 "y" or "yes" 的结果会是 "y"。你想要的结果是:

if answer in ('y', 'yes'):
    return True

撰写回答