Open xuzhengfu opened 4 years ago
如果源代码是我们写出来的故事,那么 “逻辑判断与分支” 就是故事中的情节编排,是场景之间的关联、排列和衔接 —— 这一点程序和小说、影视剧不那么相近,倒是更像电子游戏。游戏是互动性最强的艺术形式,可以根据玩家的行为走向不同的情节,发生不同的事件和冲突,这种分支多样性极大地增加了表现力和趣味性。
程序也一样,如果一个程序只能顺序一条一条指令执行,能表达的东西就太少了。我们需要根据输入的不同执行不同的指令,最终给出不一样的结果,这样程序才有价值。所以所有的编程语言都会提供逻辑判断和分支执行的能力。
所谓分支,其实也很简单,就是 “如果这样就 A 否则就 B”,通过这个句式的组合可以实现无穷无尽的变化,这个句式翻译成 Python 的语法就是: if X: A else: B X 是一个 “逻辑判断”,其结果要么是真(True)要么是假(False);A 和 B 是两个代码段(code block),分别缩进以表示从属于 if 和 else。上面的代码意思是:如果 X 是真就执行代码段 A,否则就执行代码段 B。
所谓分支,其实也很简单,就是 “如果这样就 A 否则就 B”,通过这个句式的组合可以实现无穷无尽的变化,这个句式翻译成 Python 的语法就是:
if X: A else: B
X 是一个 “逻辑判断”,其结果要么是真(True)要么是假(False);A 和 B 是两个代码段(code block),分别缩进以表示从属于 if 和 else。上面的代码意思是:如果 X 是真就执行代码段 A,否则就执行代码段 B。
True
False
if
else
X
A
B
Python 还可以连着写好几个 if,比如: if X: A elif Y: B else: C 这里的 elif 是 else if 的简化写法,整个意思是:如果 X 是真就执行 A(不管 Y 如何),否则继续判断 Y —— 如果 Y 是真就执行 B,否则就执行 C。
Python 还可以连着写好几个 if,比如:
if X: A elif Y: B else: C
这里的 elif 是 else if 的简化写法,整个意思是:如果 X 是真就执行 A(不管 Y 如何),否则继续判断 Y —— 如果 Y 是真就执行 B,否则就执行 C。
elif
else if
只要最终给出一个逻辑真值或假值的东西 都可以算作 “逻辑表达式”,我们大致分分类可以有这么些: 布尔类型的变量或者值,要么是 True 要么是 False; 上一章介绍的 大小比较操作符 的运算结果,例如 a <= 6 a + b == c 这类; 返回布尔值的函数,例如我们上一章介绍的 isinstance(); 上面这些东西通过上一章介绍的 逻辑运算操作符 组合起来,例如 (a > 1) and (a <= 6) isinstance(x, int) or isinstance(x, float)。 这些东西通称 “逻辑表达式”,因为其结果最终都是一个逻辑真值或者假值,根据其真假 if...else 语句就知道到底应该执行哪一个分支。
只要最终给出一个逻辑真值或假值的东西 都可以算作 “逻辑表达式”,我们大致分分类可以有这么些:
a <= 6 a + b == c
isinstance()
(a > 1) and (a <= 6)
isinstance(x, int) or isinstance(x, float)
这些东西通称 “逻辑表达式”,因为其结果最终都是一个逻辑真值或者假值,根据其真假 if...else 语句就知道到底应该执行哪一个分支。
if...else
上一节列出了几类 逻辑表达式,它们都可以放在 if 后面做逻辑判断,但可以放在 if 后面的远不止这些,事实上几乎任何东西都可以。因为 Python 提供了一组规则来判断一个值 “相当于” 逻辑真 还是 假,这种定义是在所谓 “合理类比” 和方便性的基础上做出的,比如: 数字 0 “相当于” 假,而其他数字都相当于真; 空字符串 “相当于” 假,非空的字符串 “相当于” 真。 其他很多情形也类似,一般来说 0 啊、空啊之类的都 “相当于” 假,其他就算 真 了。如果我们搞不清楚某个东西相当于 真 还是 假,可以借助于内置函数 bool(),这个函数可以把任何东西变成布尔值(True 或者 False)。
上一节列出了几类 逻辑表达式,它们都可以放在 if 后面做逻辑判断,但可以放在 if 后面的远不止这些,事实上几乎任何东西都可以。因为 Python 提供了一组规则来判断一个值 “相当于” 逻辑真 还是 假,这种定义是在所谓 “合理类比” 和方便性的基础上做出的,比如:
其他很多情形也类似,一般来说 0 啊、空啊之类的都 “相当于” 假,其他就算 真 了。如果我们搞不清楚某个东西相当于 真 还是 假,可以借助于内置函数 bool(),这个函数可以把任何东西变成布尔值(True 或者 False)。
0
bool()
这种 “相当于” 的逻辑,可以帮助我们写出更简洁的代码,比如下面两段代码是完全等价的: a = 42 if n != 0: a = a / n a = 42 if n: a = a / n
这种 “相当于” 的逻辑,可以帮助我们写出更简洁的代码,比如下面两段代码是完全等价的:
a = 42 if n != 0: a = a / n
a = 42 if n: a = a / n
下面两段也完全等价:
s = input('请输入您的姓名') if s == '': print('姓名不可为空,请重新输入') s = input('请输入您的姓名') if not s: print('姓名不可为空,请重新输入')
s = input('请输入您的姓名') if s == '': print('姓名不可为空,请重新输入')
s = input('请输入您的姓名') if not s: print('姓名不可为空,请重新输入')
最后这个例子里的 input() 也是 Python 内置函数,它的作用是提示用户输入点什么,并把用户输入的东西作为函数值返回。
input()
"根据一个逻辑判断做分支执行" 的能力 使得计算机程序真正开始变得 “智能”,程序中的角色(变量与值)和交互(操作符与函数)通过它才最终编排成有用的东西; if...else 的语法简单直观,但通过各种逻辑表达式组合可以实现丰富的逻辑选择; Python 中的几乎任何值都能转换为布尔值 True 或 False,bool() 函数可以告诉我们特定值对应的是 逻辑真 还是 假。
2020-02-15 20:40:46 initialize
1. 理解 逻辑判断与分支的意义
2. 了解 if...else 语句
3. 了解 逻辑表达式
4. 了解 “万物皆为布尔值”
下面两段也完全等价:
小结
Logging
2020-02-15 20:40:46 initialize