11节课课后第二题
2. 请问下面表达式的值是什么?>>> 3 and 5 + True or False
答案:先是基于短路逻辑(从左往右,只有当第一个操作数的值无法确定逻辑运算的结果时,才对第二个操作数进行求值),所以 3 and 5 的结果为 5。然后,True 和 False 参与运算时是作 1 和 0 使用的,所以结果是 5 + 1 等于 6
疑问: “+”的优先级高于‘and'高于'or',为什么不先算5+true呢? 你的理解是正确的 本帖最后由 jackz007 于 2022-11-3 16:12 编辑
3 and (5 + True) or False
你的疑问很有道理,在 and 、+、or 三个操作符中,优先级以 +、and、or 的顺序降低。
5 + True # 先计算此表达式的值,True 的算数值为 1,表达式的值是 6
3 and 5 + True # 再计算此表达式,此表达式的核心操作符是 and,and 左边是 3,逻辑值为 True,结果由 and 右边决定,右边是 5 + True,值为 6,所以,表达式的值是 6
3 and 5 + True or False # 最后计算此表达式的值,此表达式的核心操作符是 or,or 的左边是 3 and 5 + True,值为 6,逻辑值是 True,就此,定下了整个表达式的值 6
确实,这里答案应该是错了
应该先 5 + True = 6之后判断:
3 and 6 or False ---> 3 and 6 返回 6 ---> 6 or False 返回 6,所以最终结果为 6
感谢指出,当时在写答案解析的时候确实看飘了(忘了考虑运算符优先级)~
这里应该先考虑运算符优先级,加号(+)的优先级比逻辑运算符的优先级高,所以先运算加法,即 3 and (5 + True) or False。
当 True 参数运算时,将当作数字 1 来使用,所以结果是 3 and 6 or False。
接着基于短路逻辑(从左往右,只有当第一个操作数的值无法确定逻辑运算的结果时,才对第二个操作数进行求值),所以 3 and 6 的结果为 6。
同样的道理,基于短路逻辑,6 or False 第一个操作数的值可以确定逻辑运算的结果,因此最终结果是 6。
页:
[1]