Python多条件比较语句逻辑困惑求解(Python 3.6.5 + PyCharm)
解惑:Python链式比较的“小陷阱”
嘿,踩坑了对吧?我来给你把这个问题拆解得明明白白~
先看你写的条件:i > 3 < 5,你可能以为它等价于i > 3 且 i <5,但Python的链式比较规则可不是这样的!
在Python里,形如a op1 b op2 c的链式比较,会被解析成a op1 b and b op2 c,而不是a op1 b and a op2 c。所以你的i >3 <5实际上等价于:
i > 3 and 3 < 5
而3 <5是永远为True的,所以整个条件就简化成了i >3——这就解释了为什么从4到9的所有数都输出"first",和你的预期完全不一样!
你真正想要的逻辑是“i大于3且小于5”,对应的正确写法应该是这两种:
- 用链式比较的正确形式:
3 < i <5(这才等价于i>3 and i<5) - 显式用
and连接:i >3 and i <5
修正后的代码可以写成:
for i in range(10): if 3 < i < 5: print(i, "first") else: print(i, "second")
运行这段代码,输出就会和你预期的一致:
0 second 1 second 2 second 3 second 4 first 5 second 6 second 7 second 8 second 9 second
简单来说就是你误用了链式比较的顺序,把3 < i <5写成了i >3 <5,导致条件逻辑完全变了~
内容的提问来源于stack exchange,提问作者Hugs
相关产品推荐
相关产品推荐

