这是 python OR 运算符的错误吗?

Is this a bug with the python OR operator?

当我运行以下代码时:

i = None
O = ['n', 'y', 'No', 'Yes']
while i not in O:
    i = input('Yes or No?\n')
    if i == 'y' or 'Yes':
        print('Yes')
    if i == 'n' or 'No':
        print('No')

输出是 n 是的 否

由于第一个 if 语句为假,代码是否应该只显示 No 作为输出?还是我没看懂?

谢谢

您需要在第二次检查时明确说明i ==if i =='y' or i == 'Yes'

你所做的是

i == 'n' or 'No'
'No'

i 等于 nNo < 这输出 No 因为它不等于 n

i == 'n' or i == 'No'
False

你的代码中有这个:

if i == 'y' or 'Yes':

this 在Python(以及大多数编程语言)中的含义是:

if (i == 'y') or ('Yes'):

显然不是你想要的。由于 'Yes' 的计算结果为 true,并且任何 OR true 为真,您的 ifs 主体将执行。

要得到你想要的,你应该写:

if i == 'y' or i == 'Yes':

"no" 分支也一样。

问题来了,你做不到:

if i == 'y' or 'Yes':

因为它正在测试 i == 'y' 还是普通的 yes。由于非空字符串始终 return 为真,因此第一个 if 语句将始终 运行。然后第二个 if 语句也是如此。
所以尝试改变:
if i == 'y' or 'Yes':if i == 'n' or 'No':

if i == 'y' or i == 'Yes':if i == 'n' or i == 'No':
像这样:

i = None
O = ['n', 'y', 'No', 'Yes']
while i not in O:
    i = input('Yes or No?\n')
    if i == 'y' or i == 'Yes':
        print('Yes')
    if i == 'n' or i == 'No':
        print('No')



Here is an example: click