鱼C论坛

 找回密码
 立即注册
查看: 1282|回复: 7

[已解决]第011讲 短路逻辑和运算符优先级课后测试题问题

[复制链接]
发表于 2022-1-12 23:03:08 | 显示全部楼层 |阅读模式

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

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

x
>>> 3 and 5 + True or False

解释为解析:基于“短路逻辑”(从左往右,只有当第一个操作数的值无法确定逻辑运算的结果时,才对第二个操作数进行求值),3 and 5 的结果为 5。另外,True 和 False 参与运算是是作 1 和 0 使用的,所以结果为 6。!

个人答案解释 . 3 and 5 + True or False

   优先级  + - 比 not , and, or 优先,所以5+1

   3 and 6 or False
   and 比 or 优先,所以
    6 or False  答案为6
都是6 ,数字和 True False不能加减吗?
最佳答案
2022-1-15 11:37:08
koreabao 发表于 2022-1-15 10:15
题目 :3 and 5 + True or False

答案的意思就是从左到右

expression1 and expression2 or expression3 not expression4

3 and 5 + True or False
3  5+True  False 这是三个表达式(expression)

False and  5 + d
确实没有报错,那就是说计算机的计算顺序是
(是说明表达式可以确定值之后,是直接返回结果的,如and左侧是Flase, or的左侧是True,都会直接返回结果)
(0 and 5) + d
这样结果才是 False
(如果是你这样算,那么Flase + d呢,肯定会产生错误的。
验证你最上面的连等式, 和你的想法,用这个:  False and d + 3 or 2
如果先处理 d + 3 为什么不会报错?
另外False and 5*d是不会报错的,你的IDE测试会报错?

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-12 23:45:18 | 显示全部楼层
可以的,当成 0 1 就好
>>> True + 1
2
>>> True - 1
0
>>> 2 - False
2
>>> 2 + False
2
>>> 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-14 12:02:35 | 显示全部楼层
大马强 发表于 2022-1-12 23:45
可以的,当成 0 1 就好

谢谢回答,那我想问下,就是对于运算优先级,
是参考答案对呢
还是我的对呢?
谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-14 15:22:41 | 显示全部楼层
The operator priority or precedence is important to evaluate arithmetic expression involving many operators. The order of evaluation of arithmetic operators is from left to right.

‎运算符优先级或优先级对于计算涉及许多运算符的算术表达式非常重要。算术运算符的计算顺序是从左到右。‎
题主的这里涉及到,算数运算符,和逻辑运算符


对于可以知道的结果,例如  1 or 0 。在左侧为真的情况下,程序可以直接发回,所以你的 1 or 2 + d 这里不会产生报错,因为后面不会处理。
对于不知道的结果,例如 1 and 2 ,在左侧为真的情况下,程序必须处理完右侧才能知道结果。


题主这样的  3 and 5 + True or False   测试: 3 and 5 + True or 3 + d 并未报错。
我比较倾向的解释流程是。从左到右,有结果就出结果。 expression1 and expression2 or expression3 not expression4
处理 3 是真,处理右侧
处理 5 + True 是 6,也是真 返回 6
这里就变成了 6 or False 直接返回6


如果觉得解释器看起来比较麻烦,可以看下更加简单一些的,计算器程序:https://fishc.com.cn/thread-170706-1-1.html
原则上这个就和处理计算一串字符串的算式一样

也有优先级 + - / *  (  ) 但是从程序的角度来说,总是左到右。优先也只是说我需要它的结果,所以才优先处理。

譬如这个算数式  2 + 2 * 3 - 5   看做  2 and 2 * 3 or 5
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-14 15:28:21 | 显示全部楼层
koreabao 发表于 2022-1-14 12:02
谢谢回答,那我想问下,就是对于运算优先级,
是参考答案对呢
还是我的对呢?

你的优先级是不对的。 你可以尝试  False and  5 + d   代码,此时d是没有定义的,但是程序不会报错。

优先是指相对。就好像 5 + 1 + 6 * 7 。对程序而言,他处理的是  6 + 6 * 7 而不是  5 + 1 + 42
从左到右,有结果就出结果。 expression1 and expression2 or expression3 not expression4
看楼上具体的解答,有疑问在回帖



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-15 10:15:56 | 显示全部楼层
Stubborn 发表于 2022-1-14 15:28
你的优先级是不对的。 你可以尝试  False and  5 + d   代码,此时d是没有定义的,但是程序不会报错。

...

题目 :3 and 5 + True or False

答案的意思就是从左到右
3 and 5 所以 是5, 然后算后面 Ture or False =>1 or 0  答案为1
所以 5+1 为 6
(3 and 5) + (True or False)
我想说的意思,我看视频说 运算符号 +/- 优先于 not  and. or
所以我觉得应该题目 3 and 5 + True or False
变为 3 and (5+True) or False
3 and 6 or 0
然后判断答案为6 。我说的是这个意思  

False and  5 + d
确实没有报错,那就是说计算机的计算顺序是
(0 and 5) + d
这样结果才是 False

那算数运算(+ ,-)运算优先级 低于逻辑运算优先级 但是我尝试了下
False and 5*d ,就报错说d is not defined
那我可以理解为         算数运算 + ,- < 逻辑运算 < 算数运算 */ '/'吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-15 11:37:08 | 显示全部楼层    本楼为最佳答案   
koreabao 发表于 2022-1-15 10:15
题目 :3 and 5 + True or False

答案的意思就是从左到右

expression1 and expression2 or expression3 not expression4

3 and 5 + True or False
3  5+True  False 这是三个表达式(expression)

False and  5 + d
确实没有报错,那就是说计算机的计算顺序是
(是说明表达式可以确定值之后,是直接返回结果的,如and左侧是Flase, or的左侧是True,都会直接返回结果)
(0 and 5) + d
这样结果才是 False
(如果是你这样算,那么Flase + d呢,肯定会产生错误的。
验证你最上面的连等式, 和你的想法,用这个:  False and d + 3 or 2
如果先处理 d + 3 为什么不会报错?
另外False and 5*d是不会报错的,你的IDE测试会报错?

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-15 20:17:01 | 显示全部楼层
Stubborn 发表于 2022-1-15 11:37
expression1 and expression2 or expression3 not expression4

3 and 5 + True or False

对, 这个解释回答的我的疑惑
3(expression1)  5+True(expression2)  False(expression3) 这是三个表达式(expression)

但是网站的解释
解析:基于“短路逻辑”(从左往右,只有当第一个操作数的值无法确定逻辑运算的结果时,才对第二个操作数进行求值),3 and 5 的结果为 5。另外,True 和 False 参与运算是是作 1 和 0 使用的,所以结果为 6。

让我觉得是
3 and 5 (expression1) True and False(expression2)
所以我就不理解了,这次明白了,那我觉得网站的参考答案容易让初学者造成误解

False and 5*d是不会报错的,你的IDE测试会报错?
确实不报错,应该是失误了

谢谢,终于清晰了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 13:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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