我不明白为什么;或";在这种情况下,操作员没有按预期工作。
这是代码:
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.
当我把运算符改为"0"时;以及";,代码运行良好。
if fuel != 'Gas' and fuel != 'Diesel' and fuel != 'Gasoline':
print('Invalid fuel!')
有人能解释一下为什么会发生这种事吗?
这不是or
运算符的位置,在这种情况下应该使用and
。
在那里使用or
运算符,就是说只要fuel
不是Diesel
、Gas
或Gasoline
之一,它就应该输出Invalid fuel
。由于fuel
是Gas
,因此它不能是Diesel
或Gasoline
,因此if语句将产生True
并打印Invalid fuel
。
对于fuel = 'Gas'
,这是
if fuel != 'Gas' or fuel != 'Diesel' or fuel != 'Gasoline':
评估为:
if False or True or True:
与相同
if True:
事实上,您需要的是and
,正如您所发现的:
if fuel != 'Gas' and fuel != 'Diesel' and fuel != 'Gasoline':
或者,更好的是,使用集合来提高查找速度和简洁性,将其分配给变量以避免重复:
allowed_fuels = set(['Gas', 'Diesel', 'Gasoline'])
if fuel not in allowed_fuels:
print(f'Invalid fuel: {fuel}')