You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python中if表达式逻辑异常求助:为何输出‘Bye’而非‘Hi’

Python中if表达式逻辑异常求助:为何输出‘Bye’而非‘Hi’

兄弟,问题出在Python对链式比较的特殊处理逻辑上,你写的b > 0 != a > 0完全不是你以为的意思!

先给你掰明白Python的规则:当你把多个比较运算符(比如>!=<这类)连在一起写的时候,Python会把它拆解成两两连续比较,再用and连接,而不是你想的“把两个比较的结果拿来做不等于判断”。举个例子,x > y != z会被解析成x>y and y!=z,而不是(x>y) != (y>z)或者(x>y) != z

回到你的代码,b > 0 != a > 0会被Python直接解析成:

(b > 0) and (0 != (a > 0))

我们一步步算:

  1. 先看b > 0:你的b是-5,这显然不成立,结果是False
  2. 逻辑与and有个短路特性——只要第一个条件是False,后面的判断直接跳过,整个表达式结果就是False
  3. 所以if的条件不满足,自然就走到else分支打印Bye

至于你说把!=改成and not也没用,这很正常啊:改成b >0 and not a>0后,b>0还是Falseand一遇到False直接返回False,条件还是不成立,当然还是打印Bye

那怎么写才能达到你想要的“一个为真另一个为假”的效果?很简单,用括号把两个比较的结果明确括起来,告诉Python你要比较的是两个布尔值:

a = 5
b = -5

if (b > 0) != (a > 0):
  print("Hi")
else:
  print("Bye")

这样(b>0)False(a>0)TrueFalse != True结果为True,就会打印你想要的Hi了。

备注:内容来源于stack exchange,提问作者Mike Evans

火山引擎 最新活动