Python如果Elseif Else工作奇怪

时间:2016-05-16 06:56:55

标签: python-3.x if-statement

伙计我正在使用idelifelse语句在python中尝试非常基本的程序。我觉得有些不对劲。看看下面的代码。

YourChoice = input(str("Do you want to Continue?(Y/N): "))

YourChoiceLower = YourChoice.lower()

if YourChoiceLower == 'y' or 'yes':
    print("Yes Block Statement")
elif YourChoiceLower == 'n' or 'no':
    print("No Block Statement")
else:
    print("Wrong Choice")

现在当我运行上面的代码时,它只是问我Y / N问题。当我输入yYes时,它只会返回If块语句

但是当我输入nNo时,它只是仍然执行If阻止而不是ElseifElse阻止

查看以下执行行列

>>> Do you want to Continue?(Y/N): Y Yes Block Statement

>>> Do you want to Continue?(Y/N): YeS Yes Block Statement

>>> Do you want to Continue?(Y/N): N Yes Block Statement

>>> Do you want to Continue?(Y/N): nO Yes Block Statement

>>> Do you want to Continue?(Y/N): Somethingelse Yes Block Statement

>>>

有人可以解释我发生了什么事,我很困惑为什么它的工作奇怪〓请指导我的朋友们先谢谢: - )

注意:我使用的是Python 3.4

1 个答案:

答案 0 :(得分:1)

条件YourChoiceLower == 'y' or 'yes'无法正常工作。它会检查YourChoiceLower == 'y'还是'yes'。最后一个子表达式'yes'毫无意义。

相反,条件需要检查两个子表达式中的YourChoiceLower,例如

if YourChoiceLower == 'y' or YourChoiceLower == 'yes':
    ...

您可以在交互式会话中轻松自行检查:

>>> a = 'a'
>>> a == 'a' or 'b'
True

结果为True,因为a == 'a'为真。但那时:

>>> a = 'b'
>>> a == 'a' or 'b'
'b'

在这里你不再获得布尔结果,而是返回字符串'b'。这是因为a == 'a'为false,因此评估or的右侧,得到结果'b'