问答详情
源自:3-4 Python的布尔类型

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的。


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

提问者:慕莱坞9460557 2025-02-10 22:59

个回答

  • UNKNNOW
    11小时前

    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,因为布尔运算的结果可以是任何值,而不仅仅是布尔类型。