鱼C论坛

 找回密码
 立即注册
查看: 1716|回复: 2

一个关于短路逻辑的疑问

[复制链接]
发表于 2021-12-22 22:40:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
问题:求表达式的值?
3 and 5 + True or False
结果是6     但应该先计算5 + True等于6 再计算3 and 6 等于6,最后是6 or False  等于6吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-22 23:21:30 | 显示全部楼层
有人发了和你完全一样的帖子,差点以为是同一个人~~~
这样吧,我把答案粘过来~~~
先说结论,试验结果和官方文档说的完全一致(当然,这是一句废话。。)
结论是:计算的时候,完全按照从左到右的顺序进行计算,所以严格来说是没有楼主说的那种优先级的,如果说有优先级,那也是严格的从左到右的优先级

先放一个官方文档里关于and 和or 的说明
https://docs.python.org/2/library/stdtypes.html
官方文档的5.2节,详细解释了and 和or 的作用
x or y         if x is false, then y, else x
x and y       if x is false, then x, else y
not x          if x is false, then True, else False

然后我的例子
>>> 5 + 0 and True
True
>>> 5 + (0 and True)
5
>>> 1 or 2 + True
1
>>> 0 or 2 + True
3
>>> 1 or 2 + d    # 注意此处的变量d我并未定义,仍然得到了结果1
1
>>> 0 or 2 + d    
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'd' is not defined

1.从第一个、第二个和第三个例子对比可以,and 前面的部分计算完作为and 连接符左侧的x来进行判断,
2.从第四个和第五个例子可以看到,or连接符左侧如果为真,那么不论右侧是什么都不会运行
and连接符左侧如果为假,那么不论右侧是什么都不会运行
这里可以扩展出一个简化(gaoluan)代码的一个用法
表达式a  and 函数b

if 表达式a:
    函数b
上面的两段代码的功能相同,or 也可以这么玩~~~


所以,我个人的理解是,楼主的例子中,图片中的说法,和楼主的说法都不准确
这个例子中实际的运作是这样的  3 and 5 + True or False
1.先从左到右进行计算,and左侧是3,所以根据文档的规则x and y       if x is false, then x, else y,这里的x=3是True,所以这个表达式的值应该是and右侧的部分5 + True or False这个表达式的值
2.5 + True or False这个表达式同样从左往右,计算到or的时候, or左侧为5+True=6,根据文档的规则x or y       if x is false, then y, else x,所以这个表达式=6,最后得到整个表达式的值为6

多说一句,虽然看起来好像是先计算了5+True ,但仅仅这样理解是片面的,真正的规则只有一个,就是从左往右进行计算,然后严格按照and 和or 的逻辑判断规则进行计算

以上,如过说的有问题,欢迎讨论,我还是挺喜欢交流的,交流就是学习~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-23 13:43:27 | 显示全部楼层
<<3 and 5 + True or False
结果是6     但应该先计算5 + True等于6 再计算3 and 6 等于6,最后是6 or False  等于6吧?>>
楼主前半部分是正确的,“+”的运算优先级在这里是最高的,所以第一次运行后是 3  and 6 or False,而第二次运行时,先判断“and”,因为3跟6不是0,所以and为Ture,程序运行到6就得出结果,后面的or是不会在运行了。
同理,把楼主的题目改成“3 or Ture and 5 + True”,结果是3.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 18:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表