朱丽花 发表于 2022-12-22 21:57:14

做11讲作业时的疑问

本帖最后由 朱丽花 于 2022-12-22 22:51 编辑


请问为什么结果不是直接基于“短路逻辑”而显示0哎{:10_243:}

柿子饼同学 发表于 2022-12-22 22:22:01

把题目发下看看呢

朱丽花 发表于 2022-12-22 22:54:03

柿子饼同学 发表于 2022-12-22 22:22
把题目发下看看呢

才发现图没发出来,已经改了,谢谢大佬{:10_254:}

lxping 发表于 2022-12-22 23:27:46

朱丽花 发表于 2022-12-22 22:54
才发现图没发出来,已经改了,谢谢大佬

逻辑运算返回值即逻辑值(True、False或者1、0),所以可以理解这里的False和0是等价的
参考文档:https://fishc.com.cn/forum.php?mod=viewthread&tid=180490&highlight=0%2Bor%2BFalse

isdkz 发表于 2022-12-22 23:28:40

朱丽花 发表于 2022-12-22 22:54
才发现图没发出来,已经改了,谢谢大佬

因为python中任何对象都可以作为逻辑操作符的操作对象(有一些或者说大部分的编程语言只支持布尔类型来参与到逻辑表达式中),所以 python 中任何对象都可以作为逻辑表达式的值,

在 python 中所有对象的零值(整数的零值为0,浮点数的零值为0.0,列表的零值为{} 等等)被判定为 False 之外,其它对象都被判定为 True,

而短路原则就是如果左值已经可以确定整个表达式的值就不再看右值

or 运算为一真则真,所以只要 or 运算的左值等同于 True(也就是任何对象的非零值),则结果为左值,否则即为右值;而 and 运算为一假则假,所以只要 and 运算的左值等同于 False(也就是任何对象的零值),则结果为左值,否则即为右值

所以 0 or False 中的 0 不能确定整个表达式的值,因为 0 不为真,所以 0 or False 的结果为它的右值,即 False,然后 0 or False or False 则成了 False or False,左值还是不为真,所以结果为右值,即 False

tommyyu 发表于 2022-12-23 08:22:43

在 0 or False or False 中,Python 会从左至右计算,首先计算 0 or False,然后在计算 (0 or False) or False.

在 0 or False 中,这个式子的值并不由 0 决定。因为 0 or 0 = 0,0 or 1 = 1,这个式子的值由右边的数决定,此时就会根据短路逻辑返回"False"。

因此,原式的值就是 False or False,再次根据上面的过程,得出整个式子的值是False
页: [1]
查看完整版本: 做11讲作业时的疑问