《零基础入门学习Python》【最新版】第11讲问答题第2题
小白求助:提问表达式的值是多少:
>>> 3 and 5 + True or False
给的答案解析是:"基于“短路逻辑”(从左往右,只有当第一个操作数的值无法确定逻辑运算的结果时,才对第二个操作数进行求值),3 and 5 的结果为 5。另外,True 和 False 参与运算是是作 1 和 0 使用的,所以结果为 6。"
疑问:虽然答案都是6,但是按照优先级,难道不该先运算 5 + True 吗?得出 6, 再运算 3 and 6 or False?
请各位大神指教,谢谢! and前面为真直接会返回后面表达式的值作为结果, or前面的值为假后面的值作为结果,如果or前面为真返回该值。and优先级高于or python优先级问题,是先算加减,再算and or not 这种逻辑运算符 如果帮助到了就给个最佳喔 本帖最后由 Twilight6 于 2020-5-18 08:19 编辑
代码:
3 and 5 + True or False
True 可以等价表示为 1
False 等价表示为 0
等价于:
3 and 5 + 1 or 0
#运算优先级从低到高
逻辑运算符: or
逻辑运算符: and
逻辑运算符:not
成员测试: in, not in
同一性测试: is, is not
比较: <,<=,>,>=,!=,==
按位或: |
按位异或: ^
按位与: &
移位: << ,>>
加法与减法: + ,-
乘法、除法与取余: *, / ,%
正负号: +x,-x
{:10_287:} Twilight6 发表于 2020-5-18 08:05
代码:
可以等价于:
我很好奇你怎么等价的,结果都不一样 按照优先级优先级的作用是什么?
优先级的作用是保证3 and 5 + True or False不会按照(3 and 5) + (True or False)来计算,但是后面计不计不算是管不着的。 本帖最后由 heidern0612 于 2020-5-18 08:16 编辑
优先级依次是:+ - not and or ,加减同一级。
3 and 5 + True or False..
等价于 (3 and(5+True)) or False
--->5+True = 6
--->3 and 6= 6
--->6 or False= 6
and运算采用举假法,有假举假,没假则取最后一位真。
or运算采用举真法,有真举真,没真则取最后一位假。 永恒的蓝色梦想 发表于 2020-5-18 08:06
我很好奇你怎么等价的,结果都不一样
{:10_278:}我刚刚正在更改,我自己都发现错误了{:10_262:} Twilight6 发表于 2020-5-18 08:05
代码:
True 可以等价表示为 1
最终结果为6,普及到优先级问题 楼主疑问是正确。验证方法,1.把代码加括号;2.代码位置变化后加括号。
>>> 3 and 5 + True or False
6
>>> 3 and (5 + True) or False
6
>>> (3 and 5) + (True or False)
6
>>> 3 and 5 + False or True
5
>>> 3 and (5 + False) or True
5
>>> (3 and 5) + (False or True)
6 运算中先算逻辑运算符(not or and)再算➕➖✖➗
页:
[1]