Oktopus 发表于 2020-5-18 04:53:59

《零基础入门学习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?

请各位大神指教,谢谢!

pyrhon萌新# 发表于 2020-5-18 07:51:18

and前面为真直接会返回后面表达式的值作为结果, or前面的值为假后面的值作为结果,如果or前面为真返回该值。and优先级高于or

pyrhon萌新# 发表于 2020-5-18 07:53:42

python优先级问题,是先算加减,再算and or not 这种逻辑运算符

pyrhon萌新# 发表于 2020-5-18 07:54:15

如果帮助到了就给个最佳喔

Twilight6 发表于 2020-5-18 08:05:03

本帖最后由 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:}

永恒的蓝色梦想 发表于 2020-5-18 08:06:17

Twilight6 发表于 2020-5-18 08:05
代码:

可以等价于:


我很好奇你怎么等价的,结果都不一样

永恒的蓝色梦想 发表于 2020-5-18 08:08:39

按照优先级优先级的作用是什么?

优先级的作用是保证3 and 5 + True or False不会按照(3 and 5) + (True or False)来计算,但是后面计不计不算是管不着的。

heidern0612 发表于 2020-5-18 08:08:47

本帖最后由 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运算采用举真法,有真举真,没真则取最后一位假。

Twilight6 发表于 2020-5-18 08:14:03

永恒的蓝色梦想 发表于 2020-5-18 08:06
我很好奇你怎么等价的,结果都不一样

{:10_278:}我刚刚正在更改,我自己都发现错误了{:10_262:}

pyrhon萌新# 发表于 2020-5-18 08:14:22

Twilight6 发表于 2020-5-18 08:05
代码:

True 可以等价表示为 1


最终结果为6,普及到优先级问题

kakensei 发表于 2020-5-18 08:50:09

楼主疑问是正确。验证方法,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

pyrhon萌新# 发表于 2020-5-18 11:03:22

运算中先算逻辑运算符(not or and)再算➕➖✖➗
页: [1]
查看完整版本: 《零基础入门学习Python》【最新版】第11讲问答题第2题