小能豆

链式比较中的按位“&”运算符

py

ar = 86
print((var < 90) & (var >= 80))

印刷True

但为什么所有这些都打印出来了False

print(var < 90 & var >= 80)
print(var < 90 & (var >= 80))
print((var < 90) & var >= 80)
print(var < 90 & True)

阅读 4

收藏
2024-11-05

共1个答案

小能豆

您应该使用and运算符来执行布尔运算。

由于 python 支持链接关系运算符(即,您可以使用0 < var < 100而不是)并且由于运算符优先级在关系运算符之前0 < var and var < 100处理二进制运算(即加法、减法、按位运算等),您发布的所有失败案例实际上意味着其他事情。

  1. var < 90 & var >= 80相当于(var < 90 & var) and (90 & var >= 80)
  2. var < 90 & (var>=80)相当于var < 90 & True看一下第 4 种情况。
  3. (var<90) & var>=80也类似于第 4 种情况(这解析为True & var >= 80然后解析为0 >= 80)。
  4. var < 90 & True相当于var < (90 & True)。 运算符的实现&旨在0当其中一个操作数不是整数时返回(这是动态类型的另一个最大陷阱),这就是为什么所有此类类似语句都会解析为var < 0false。
2024-11-05