欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

刷题翻车:python 布尔运算操作符的优先级

程序员文章站 2022-12-21 13:33:14
现在想想真的很奇怪,当初我是如何想当然地把 `and` 和 `or` 视为同等优先级呢!——幸好还有机会能通过刷题发现自己的知识点错漏! ......

前两天在 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 分支控制语句,仅会执行条件为真的那个分支,所以上述代码段的结果为 2。然后这才发现,我错在布尔运算部分。在 xue.cn 网页上直接输入并运行true or false and false ,显示结果为 true

刷题翻车:python 布尔运算操作符的优先级

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

  • true or false 等于 true
  • true and false 等于 false

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

最简单的运算,自测一下,我均已掌握,并无错漏。
刷题翻车:python 布尔运算操作符的优先级

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

优先级最低的是或 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

现在想想真的很奇怪,当初我是如何想当然地把 andor 视为同等优先级呢!——幸好还有机会能通过刷题发现自己的知识点错漏!