【发布时间】:2021-06-12 23:38:47
【问题描述】:
我不明白为什么“或”运算符在这种情况下没有按预期工作。
代码如下:
fuel = input()
liters = float(input())
if fuel != 'Gas' or fuel != 'Diesel' or fuel != 'Gasoline':
print('Invalid fuel!')
else:
if liters >= 25:
if fuel == 'Gas' or fuel == 'Diesel' or fuel == 'Gasoline':
print(f'You have enough {fuel.lower()}.')
elif liters < 25:
if fuel == 'Gas' or fuel == 'Diesel' or fuel == 'Gasoline':
print(f'Fill your tank with {fuel.lower()}!')
输入:
Gas
25
输出:
Invalid fuel
输出应该是You have enough gas.
当我将运算符更改为“and”时,代码可以正常工作。
if fuel != 'Gas' and fuel != 'Diesel' and fuel != 'Gasoline':
print('Invalid fuel!')
有人能解释一下为什么会这样吗?
【问题讨论】:
-
请记住,当使用
or时,只有一个操作数需要为True才能使整个表达式计算为True。所以,fuel != 'Gas'将是False,但fuel != 'Diesel'将是True。条件fuel != 'Gasoline'也将是True,但由于短路不需要对其进行评估,因为我们已经找到了True。在任何情况下,整个表达式将始终为True。为了使它成为False,fuel必须同时等于'Gas','Diesel'和'Gasoline',当然不可能是这样。 -
谢谢@PaulM。我只专注于陈述的第一部分,以至于完全忽略了其余部分。很好的解释!
标签: python logical-operators logical-or