python 3:为什么在与bool比较时会得到相互矛盾的结果

时间:2017-03-21 16:34:36

标签: python boolean-expression

任何人都可以帮助我理解为什么我得到以下布尔表达式的奇怪结果。 所有这三个代码片段应该是“等效的”,但都会产生不同的结果。结果似乎与围绕运算符优先级的python文档相矛盾。

x = 1
y = 0
print(x > y)             #prints True
print(x > y == True)     #prints False  *?*
print(x > y == False)    #prints True   *?*
print( (x > y) == True)  #prints True
print( (x > y) == False) #prints False

注意第二个&第3行输出与第4和第5行相矛盾。

然后在下面,与上面相同的2行产生不同的结果:

x = 2
y = 1
print(x > y)             #prints True
print(x > y == True)     #prints True  *?*
print(x > y == False)    #prints False  *?*
print( (x > y) == True)  #prints True
print( (x > y) == False) #prints False

再次在下面,甚至有不同的结果:

x = 8
y = 5
print(x > y)             #prints True
print(x > y == True)     #prints False  *?*
print(x > y == False)    #prints False  *?*
print( (x > y) == True)  #prints True
print( (x > y) == False) #prints False

这似乎也与以下明显的矛盾有关:

print(1 in [0, 1, 2, 3])           #prints True
print(1 in [0, 1, 2, 3] == True)   #prints False

我知道不需要“== True”,但学生第一次学习的自然也会使用该表达式。

谢谢!

0 个答案:

没有答案