学径 LearnPath

选择

1 / 1 · ← → 翻页

阅读模式

第 4 课

选择

在分岔处进行判断。

芬兰奥卢的铁路道岔
芬兰奥卢的手动铁路道岔。TeVe。来源:Wikimedia Commons,公有领域。

导言

课程目标

if...elif...else和缩进用来描述选择结构。

条件成立,才进入子结构。

现象

闸机先判断,再选一条路

地铁进站闸机的流程图:菱形是判断,矩形是处理
地铁进站闸机的流程图。菱形表示判断,矩形表示处理;「是」与「否」各自通向一条路,程序只进入其中一条。

菱形发起一次判断。根据是否成立选择不同的处理步骤。

现象

列车只能运行在一条轨道上

芬兰奥卢的铁路道岔
芬兰奥卢的手动铁路道岔。TeVe。来源:Wikimedia Commons,公有领域。

原理

条件不成立,缩进的那一行被跳过

python
# 求绝对值
number = 1
if number < 0:
    number = -number
print(number)
  • 1 不小于 0,赋值步骤被跳过
  • 最后一行与 if 对齐,不属于子结构,总会执行

把 number 改成负数再跑一遍,对照取相反数。

原理

两种情形,用 else 接住另一条

python
# 判断是否为7的倍数
number = 20
if number%7 == 0:
    print(number, '可以被7整除')
else:
    print(number, '不可以被7整除')
  • if 与 else 同样顶格
  • 20 除以 7 余 6,走进 else

把 number 改成 21,看进入 if 的那一支。

原理

更多情形,用 elif 依次问

python
# 根据分数评级
score = 65
if score >= 90:
    print('A')
elif score >= 75:
    print('B')
elif score >= 60:
    print('C')
else:
    print('D')
  • 前两次判断都为假,直到第三个判断处,条件成立,进入子结构
  • 打印 C 之后,这次的选择就结束了,不再看后面的其他情况

指出 65 停在第三问。这一支成立之后,后面不再检查。

原理

子结构的嵌套

python
# 求解方程ax+b=0
a = 0
b = 1
if a == 0:
    if b == 0:
        print('有无数解')
    else:
        print('无解')
else:
    print(-b/a)
  • 如果外层成立,才看内层
  • 如果外层不成立,内层整块被跳过

a = 0、b = 1,走到内层 else,打印无解。

原理

使用逻辑运算组合复杂条件

python
# 求解方程ax+b=0
a = 0
b = 1
if a == 0 and b == 0:
    print('有无数解')
elif a == 0:
    print('无解')
else:
    print(-b/a)
  • and:两侧都真
  • 能合成时,不必再套一层缩进

对照上一页:无数解和无解仍分开,不必再为 b 套一层 if。

实践

本节练习

5.8 偏酸,7.0 近中性,8.2 偏碱。

界线:6.5 与 7.5。

请打开「在线 IDE」。分别用 5.8、7.0、8.2 各走一条路。

小结

本节要点

  • 选择结构在判断处选路。条件成立,才执行缩进的子结构;与 if 对齐的语句不在这条路上。
  • 两种情形用 if...else...。更多情形用 elif:前面的条件已经成立,后面的分支不再检查。
  • 代码嵌套是子结构里再写子结构。外层不成立,内层整块都被跳过,包括内层的 else。
  • and / or / not 把几个判断组合成一个复杂条件。能合成时,不必为每一问再套一层缩进。
已到最后一页。可按 ← 回顾,或切换回阅读模式。