为了账号安全,请及时绑定邮箱和手机立即绑定

a = True print(a and 0 or 99) # ==> 99


a = True print(a and 0 or 99) # ==> 99
代码块
预览复制

得到的计算结果不是布尔类型,而是数字99,这是为什么呢?

因为Python把0、空字符串和None看成False,其他数值和非空字符串都看成True,所以:

True and 0计算结果是0 
继续计算0 or 99计算结果是 99 
因此,结果是99。
需要注意的是,not计算的优先级是高于and和or的。


始终不明所以,求更详细的解说

正在回答

1 回答

Python布尔运算的规则

在Python中,布尔运算符andor的逻辑是基于“短路”(short-circuiting)的,这意味着它们会在确定结果后立即停止计算。具体规则如下:

  1. and运算

  • 如果ATrue(或者等价于True的值,如非零数字、非空字符串等),则返回B的值。

  • A and B: - 如果AFalse(或者等价于False的值,如0None、空字符串""等),则直接返回A的值。

or运算

  • 如果ATrue(或者等价于True的值),则直接返回A的值。

  • 如果A``为False(或者等价于False的值),则返回B的值。

  • A or B

代码的逐步解析

  1. a and 0

  • a的值是True

  • 根据and的规则,True and 0会先判断True,因为True为真值,所以返回第二个值0

  • 因此,a and 0的结果是0

**0 or 99: **   - 0是一个假值(等价于False)。

  • 根据or的规则,0 or 99会先判断0,因为0为假值,所以返回第二个值99

  • 因此,0 or 99的结果是99

最终结果

所以,整个表达式a and 0 or 99的计算过程是:

  • 先计算a and 0,结果是0

  • 再计算0 or 99,结果是99

因此,最终输出的结果是99

关于优先级

你提到的not运算符的优先级高于andor,这是正确的。但在你的表达式中并没有not运算符,所以优先级问题在这里并不影响结果。

总结

  • Python的布尔运算符andor是基于短路逻辑的,它们会根据第一个操作数的值决定是否继续计算。

  • 在你的例子中,a and 0的结果是0,而0 or 99的结果是99

  • 最终结果是99,而不是布尔值TrueFalse,因为布尔运算的结果可以是任何值,而不仅仅是布尔类型。


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

a = True print(a and 0 or 99) # ==> 99

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信