学径 LearnPath

CAICP-E · Python 编程基础 / Wiki

逻辑运算

用并且、或者、反过来,把真假拼起来。

它是什么

逻辑运算 处理真和假。 三个词:andornot。 中文常说与、或、非。

一个条件常常不够。 出门既要带水杯,也要带纸巾,用 and。 帽子或者伞,带一样就行,用 or。 「不是下雨」则要把结果反过来,用 not

python
print(True and True)    # True
print(True and False)   # False
print(True or False)    # True
print(not True)         # False

名字从哪来

逻辑的英文是 logic。 今天电脑里的真假运算,常常叫布尔运算。

名字来自英国数学家乔治·布尔(George Boole,1815—1864)。 1847 年他发表《逻辑的数学分析》。 1854 年又出版《思维规律的研究》。 他用代数的方法写「并且」「或者」「不是」。 后来的电路和程序,都站在这座桥上。

Python 没有选用 C 语言的 &&||!。 它直接用英语单词 andornot。 这和 Python「尽量像人话」的脾气一致。

TrueFalse 必须大写。 它们是布尔值,属于 数据类型 里的 bool

它怎么工作

and 表示并且。 两边都真,结果才真。

or 表示或者。 有一边真,结果就真。 两边都真,结果也是真。 不是「只能选一个」。

not 表示反过来。 真变假,假变真。

常常和 比较 连用。

python
score = 85
print(score >= 60 and score < 90)

先得到两个真假,再用 and 拼。

运算先后看 优先级not 先于 andand 先于 or。 看不清就加括号。

python
print(True or False and False)         # True,因为先算 and
print((True or False) and False)       # False

逻辑题可以画小表。 一格一格填,不容易错。

ABA and BA or B

if 后面的条件,经常就是比较加逻辑。 见 分支

初学先按真假来理解就够。 写复杂条件时,请加括号,让意思更清楚。

生活里在哪里

  • 食堂:带饭卡并且到了开放时间,才能打饭。
  • 图书馆:学生证或者老师证明,可以办借书。
  • 过马路:红灯时不能过,是把「可以过」反过来。
  • 游戏通关:收集钥匙并且打败守卫。
  • 天气预报:降温或者下雨,就提醒加衣服。

电路里的开关串联有点像 and:都接通才亮。 并联有点像 or:有一路通就亮。 这就是布尔运算走进芯片的路。

和相近概念的差别

比较在问大小、是否相等。 逻辑在把已经得到的真假再组合。

score >= 60 是比较。 score >= 60 and score < 90 才是逻辑装配。

if 不是逻辑运算。 if 是路口。 逻辑运算给路口提供「能不能走」的答案。

not 和负号 - 也不一样。 负号管数字。 not 管真假。

常见误会

误会 1:把 and 当成或者。

并且要两边都真。 或者有一边真就行。

误会 2:中文写「并且」进代码。

代码里要写英文 and

误会 3:or 表示「只能选一个」。

两边都真,结果仍是真。 它不是「二选一竞赛」。

误会 4:一长串不拆,读的人晕。

拆成两步,或加括号。

误会 5:忘记 not 只作用于紧跟的那一块。

复杂时请加括号。 not a and bnot (a and b) 不是一回事。

想知道更多

  • 书:潘洪波《小学生 Python 趣味编程》(用「既要……又要……」这类生活判断练并且、或者)。
  • 电影:《隐藏人物》(Hidden Figures)。和家长一起看:早期计算怎样把一步步判断写清楚。这是根据真实故事改编的电影,不是编程教材。

未登录时不会保存学习进度