选择
根据条件的真假,决定走哪一条语句;没有岔路,程序就无法表达「在何种情况下成立」。
它是什么
选择 让程序在路口做出判断:条件成立走这一支,否则走另一支。Python 用 if、elif、else 来写这些岔路。没有选择,程序只能从上到下走一条直线,应付不了「除数是不是零」「这组系数有没有解」这类问题。计算机科学关心的不是把所有情况挤进一条直线,而是把判断写成机器跟得上的结构。
if score >= 60:
print("及格")
elif score >= 0:
print("不及格")
else:
print("分数不在约定范围")属于某一支的语句必须 缩进。冒号开启一块,缩进标明这块有多长。
名字从哪来
branch 本义是树枝,也指岔路。程序从一条主干分出几条可能的去向,执行时只走其中一条(或一条也不走,如果所有条件都不成立且没有 else)。if 来自英语「如果」。这种写法可以追溯到 1950 年代的 Fortran 等早期语言。elif 是 else if 的缩写,避免一层层往右缩。
条件往往由 比较和逻辑运算 组成。比较的是值,不是变量的名字。
它怎么工作
解释器先求条件的值,得到真或假,再决定进入哪一块。elif 只有在前面的条件都失败时才会被检查。一旦某一支成功,后面的兄弟分支就跳过。连续几个独立的 if 可能不止走一支;if / elif / else 保证在这一组里至多走一支——这两种写法看起来相近,对世界的建模却不同。
选择可以代码嵌套:一支里面再写一个 if。嵌套一深,人眼就容易跟丢。这时更该想想能不能拆成 函数,或把条件写得更平坦。能预见到的边界,优先用选择写明白,而不是等到运行时再靠 异常 补救。
生活里在哪里
路口看灯:绿灯走,红灯停。实验若温度超过阈值就停止加热,否则继续。阅卷先看有没有违纪,再决定是否进入给分。这些判断在生活里可以靠现场常识微调;写成程序之后,漏掉的一支就不会被「大概知道该怎么做」的默契补上。验收一份程序时,列出它在何种输入下走错支路,往往比再看一次「幸运输入」是否能跑更有信息量。
和相近概念的差别
选择是「这次走哪条」。循环 是「这条还要再走几遍」。两者都靠条件和缩进,但一个分支、一个重复。循环内部几乎总会再写选择,用来处理每一个元素的不同情况。
异常处理也像岔路,可它处理的是计划外的失败。能说清楚的前提,写在 if 里;不寻常但必须诚实报告的事件,交给异常。把所有失败都塞进 except,会让「这个问题在模型里是否有定义」变得不可见。
常见误会
误会 1:写了 if 却忘了冒号或缩进。
Python 会拒绝运行。结构还没有成立,谈不上条件是否为真。
误会 2:几个独立的 if 和一组 if / elif 是一回事。
前者可能执行多支;后者在一组内至多走一支。要用哪一种,取决于问题本身是否互斥。
误会 3:条件里再写一个 =。
那是赋值。比较相等必须用 ==。见 运算符。
想知道更多
- 书:布鲁克希尔《计算机科学概论》
- 书:艾伦·唐尼《像计算机科学家一样思考Python(第2版)》
- 书:埃里克·马瑟斯《Python编程:从入门到实践(第3版)》
未登录时不会保存学习进度