前两天在 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

但我心算答案是 False

我是如何心算的呢?

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

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

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

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

优先级最低的是或 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 视为同等优先级呢!——幸好还有机会能通过刷题发现自己的知识点错漏!

刷题翻车:python 布尔运算操作符的优先级的更多相关文章

  1. lintcode 刷题 by python 总结(1)

    博主之前在学习 python 的数据结构与算法的基础知识,用的是<problem-solving-with-algorithms-and-data-structure-using-python& ...

  2. lintcode 刷题 by python 部分链表题总结(2)

    本篇博客对最近做的链表的算法题做个简单的小结,主要描述题目和提供解题思路,具体代码见我的 github:https://github.com/MUSK1881/lintcode-by-python 3 ...

  3. 动态规划刷题集python代码

    1 爬楼梯(Fibonacci) #有一楼梯共M级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法? def fun(m): c = [0]*m c[0] = 1 c[1] = 2 for i ...

  4. python部落刷题宝学到的内置函数(二)

    感觉到刷题宝有一个好处,也许也不是好处,它的答案必须是真正输出的值,也就是说应该输出字符串aaaa的时候,答案必须写成界面上返回的值,即'aaaa'.有利于真正记忆返回值类型,但是....太繁琐了 1 ...

  5. python部落刷题宝学到的内置函数

    最近加入了python部落,感觉里面的刷题宝很有意思,玩了一下,知道了许多以前并不清楚的内置函数,然后感觉到快要记不住了,所以开始陈列一下 1.divmod(a,b):取a除以b的商和余数,功效等价于 ...

  6. 教你用python写:HDU刷题神器

    声明:本文以学习为目的,请不要影响他人正常判题 HDU刷题神器,早已被前辈们做出来了,不过没有见过用python写的.大一的时候见识了学长写这个,当时还是一脸懵逼,只知道这玩意儿好屌-.时隔一年,决定 ...

  7. Python中的操作符及优先级

    附注: 1.  Python中的按位运算符是把数字看作二进制来进行计算的.Python中的按位运算法则如下: 按位与   ( bitwise and of x and y ) &  举例: 5 ...

  8. Python 刷题笔记

    Python 刷题笔记 本文记录了我在使用python刷题的时候遇到的知识点. 目录 Python 刷题笔记 选择.填空题 基本输入输出 sys.stdin 与input 运行脚本时传入参数 Pyth ...

  9. python学习笔记七--数据操作符的优先级

    一.混合表达式哪个部分先计算: 1. 取决于操作符的优先级,不同操作符的优先级是不一样的,例如‘*’的优先级高于‘+’ 2. 上节的表格里越靠后,优先级越高. 3 . 同一表达式的相同操作符是按从左到 ...

随机推荐

  1. ADB命令无法导出文件到物理机上处理办法

    因为想查看一下脚本生成的sqlite文件.就想导出文件,,结果导出adb pull命令一直报错.使用su也是错误的..最后发现adb pull 不能再adb的命令状态下执行.需要退出adb命令.然后直 ...

  2. 设计模式----创建型模式之工厂模式(FactoryPattern)

    工厂模式主要分为三种简单工厂模式.工厂方法模式.抽象工厂模式三种.顾名思义,工厂主要是生产产品,作为顾客或者商家,我们不考虑工厂内部是怎么一个流程,我们要的是最终产品.将该种思路放在我们面向对象开发实 ...

  3. Redis 介绍学习

    1.Redis 简介 Redis 是一个支持数据结构更多的键值对数据库.它的值不仅可以是字符串等基本数据 类型,也可以是类对象,更可以是 Set.List.计数器等高级的数据结构. Memcached ...

  4. C#用抽象类定义几何图形

    using System;/*using System.Data;*/namespace tx{    abstract class tx    {        public double chan ...

  5. linux系统定时发送邮件

    Linux Centos7系统下利用自带的mail发送邮件服务 简介 本章分为五部分. 第一部分是基于虚拟机下的CentOS 7环境定时发送邮件: 第二部分是基于在阿里云购买的CentOS 7服务器环 ...

  6. Cocos Creator 通用框架设计 —— 资源管理

    如果你想使用Cocos Creator制作一些规模稍大的游戏,那么资源管理是必须解决的问题,随着游戏的进行,你可能会发现游戏的内存占用只升不降,哪怕你当前只用到了极少的资源,并且有使用cc.loade ...

  7. 域渗透基础之Kerberos认证协议

     本来昨晚就该总结整理,又拖到今天早上..6点起来赶可还行 0x01 Kerberos前言 Kerberos 是一种由 MIT(麻省理工大学)提出的一种网络身份验证协议.它旨在通过使用密钥加密技术为客 ...

  8. PBO项目的组织

    前言: 最近发现PMI的英文官网已经公布了第五版PMBOK的初稿,针对第四版而言的确有了不少变动.了解这些变动,对理解项目管理知识的整理和发展,以及掌握PMP考试的变化方向都是很重要的.当然,变动尤其 ...

  9. comparator接口实现时,只需要实现 int compare(T o1, T o2)方法?

    从Comparator接口的源码,可以看到Comparator接口中的方法有三类: 1 普通接口方法 2 default方法 3 static方法 其中default方法和static方法 是java ...

  10. libevent::事件::定时器

    #include <cstdio> #include <errno.h> #include <sys/types.h> #include <event.h&g ...