绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
刷题翻车:Python 布尔运算操作符的优先级
2020-01-08 15:30:31

前两天在 xue.cn 体验答题挑战,我有道题做错了,却不明白错在哪里。题目大概如下,代码运行后将打印什么?

if True or False and False:
print('1')
else:
print('2')

这个题目考察两个简单的知识点,一个是布尔运算,另一个是流程控制语句。结果是 1,我则选了2。

复盘我的解题思路。先是布尔运算部分,我把 True or False and False 的结果算成 False,于是代码简化为:

if False:
    print('1')
else:
    print('2')

我短暂发懵,后来回过神来,整理了一篇笔记《和35岁刘阿姨一起自测 Python 流程控制基本功》用于巩固基础功。

流程控制之if 分支控制语句,仅会执行条件为真的那个分支,所以上述代码段 B 的结果为 2。然后这才发现,我错在布尔运算部分。在 xue.cn 网页上直接输入并运行True or False and False ,显示结果为 True

true

但我心算答案是 False。 我是如何心算的呢?

  • True or False 等于 True
  • True and False 等于 False

布尔值仅有 TrueFalse 两个,布尔值操作符也仅有 与and, 或or, 非not 三个。我本来以为自己全部掌握,怎么还做错,而且还不知道错在哪儿?

简单的运算,自测一下,我均已掌握,并无错漏。

true1

太奇怪了,错在哪儿?想不明白,那就打开《自学是门手艺》的“入口”和“值及相应的运算” 两个章节,重复读布尔运算操作符部分,才发现关键是:

优先级低的是或 or,然后是与 and, 优先级高的是非 not

而上述心算时,我把 andor 视为同等优先级,并从左往右顺序计算。——务必留意:这个认识是错误的!这俩优先级不同!

True or False and False 的计算顺序,应该是:

  • 没有括号,也没有not,那就先算and
  • False and False 等于 False,现在语句是 True or False
  • 后算 or,True or False 等于 True

再找个题目True and False or not True 自测一下:

  • 没有括号,先算 notnot True 等于 False ,现在语句是True and False or False
  • 其次算 andTrue and False 等于False,现在语句是 False or False
  • 后算 orFalse or False结果是False

作者:刘娟娟🍀PRESS.ONE
链接:https://juejin.im/post/5dc7b7856fb9a04ab3202d24
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
分享好友

分享这个小栈给你的朋友们,一起进步吧。

MySQL&python小菜鸟打怪升级栈
创建时间:2019-07-06 12:51:25
MySQL and python 菜鸟漫长升级路
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • sql_master
    栈主

小栈成员

查看更多
  • local0
  • 栈栈
  • chinacc
  • daxuesheng
戳我,来吐槽~