梦2022 发表于 2022-11-3 15:35:03

11节课课后第二题

2. 请问下面表达式的值是什么?
>>> 3 and 5 + True or False

答案:先是基于短路逻辑(从左往右,只有当第一个操作数的值无法确定逻辑运算的结果时,才对第二个操作数进行求值),所以 3 and 5 的结果为 5。然后,True 和 False 参与运算时是作 1 和 0 使用的,所以结果是 5 + 1 等于 6

疑问: “+”的优先级高于‘and'高于'or',为什么不先算5+true呢?

tommyyu 发表于 2022-11-3 15:37:33

你的理解是正确的

jackz007 发表于 2022-11-3 15:58:13

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

Twilight6 发表于 2022-11-3 18:36:57



确实,这里答案应该是错了

应该先 5 + True = 6之后判断:

3 and 6 or False ---> 3 and 6 返回 6   ---> 6 or False 返回 6,所以最终结果为 6

小甲鱼 发表于 2022-11-4 04:55:53

感谢指出,当时在写答案解析的时候确实看飘了(忘了考虑运算符优先级)~

这里应该先考虑运算符优先级,加号(+)的优先级比逻辑运算符的优先级高,所以先运算加法,即 3 and (5 + True) or False。

当 True 参数运算时,将当作数字 1 来使用,所以结果是 3 and 6 or False。

接着基于短路逻辑(从左往右,只有当第一个操作数的值无法确定逻辑运算的结果时,才对第二个操作数进行求值),所以 3 and 6 的结果为 6。

同样的道理,基于短路逻辑,6 or False 第一个操作数的值可以确定逻辑运算的结果,因此最终结果是 6。
页: [1]
查看完整版本: 11节课课后第二题