04. 程序的控制结构

分支结构

单分支结构

1
2
if <条件>:
<语句块1>

二分支结构

1
2
3
4
if <条件>:
<语句块1>
else:
<语句块2>

紧凑形式:适用于简单表达式的二分支结构(注意: 表达式不同于语句, 算是语句的一部分)
<表达式1> if <条件> else <表达式2>
例如

1
2
guess = eval(input())
print("猜{}了".format("对" if guess==100 else "错"))

多分支结构

1
2
3
4
5
6
7
if <条件1>:
<语句块1>
elif <条件2>:
<语句块2>
……
else:
<语句块N>

注意多条件之间的包含关系

反例:

Structural Pattern Matching(结构模式匹配)

Python 3.10 起正式引入了 match … case 结构。它并不是 if/elif 的简单语法糖,而是可以按模式(字面量、类型、长度、属性、捕获变量等)做多路分支。

1
2
3
4
5
6
7
8
9
10
11
12
13
match value:
case 1:
print('one')
case 2 | 3: # 或模式
print('two or three')
case int() if value < 0: # 类型+守卫条件
print('negative int')
case [x, *rest]: # 序列拆包
print('head', x, 'tail', rest)
case Point(x=0, y=0): # 类属性匹配
print('origin')
case _: # 通配符,兜底
print('something else')

要点速览

  • 关键字:match 开头,case 分支,可带 if 守卫。
  • 模式种类:字面量、通配符 _、捕获变量、序列、映射、类名、嵌套模式、OR 模式 |
  • 无隐式落空:只要命中一条就退出,不会继续往下执行(不用写 break)。
  • 必须有兜底:若前面的 case 都可能错过,最后加 case _ 避免 RuntimeError
  • 性能:底层跳转表 + 快速匹配算法,分支很多时比长串 if/elif 更清晰也更高效。

程序的循环结构

遍历循环(for 语句)

  • 核心语义:“按顺序逐个取元素,直到可迭代对象耗尽”
  • 语法
    1
    2
    3
    4
    for 变量 in 可迭代对象:
    循环体
    [else: # 可选,仅当循环没有被 break 中断时执行
    收尾语句]

可迭代对象:字符串、列表、元组、字典、集合、range、生成器、文件句柄等。

无限循环

  • 核心语义:“只要条件为真就反复执行”
  • 语法
    1
    2
    3
    4
    while 条件表达式:
    循环体
    [else: # 可选,仅当条件首次为假且未被 break 中断时执行
    收尾语句]
  • 典型用法
    • 不确定迭代次数:用户输入验证、网络重试、事件监听
    • 显式退出:内部用 break 跳出;或用 return 直接结束函数

循环控制保留字

关键字 作用域 说明
break 最内层循环 立即跳出整个循环,else 也不执行
continue 最内层循环 跳过本轮剩余语句,直接下一轮迭代
pass 任意位置 空操作,占位保持语法完整

快速对比

特征 for while
迭代次数 通常已知 通常未知
自动终止 可迭代对象耗尽即停 需手动变更条件或 break
代码可读性 高(语义清晰) 条件复杂时易出错
性能 遍历 C 级迭代器,快 纯 Python 条件判断,稍慢

range() 函数

异常处理

基本框架

1
2
3
4
5
6
7
8
try:
# 可能出错的语句
except SomeError as e: # 可写多个 except 分支
# 捕获到对应异常时执行
else: # 可选
# try 块**没有发生任何异常**时执行
finally: # 可选
# 无论是否异常、无论是否被捕获,都必定执行

执行顺序口诀
“先 try,有异常就 except,无异常就 else,最后永远 finally。”

捕获多个异常:except (FileNotFoundError, ValueError) as e:

手动抛出异常:raise Exception(‘xxx’)

继续向上传播:raise

易错提醒

  • 不要写裸 except: → 会连 KeyboardInterrupt、SystemExit也捕获;用except Exception: 或具体类型。
  • else 与 finally 可同时出现,顺序必须是 try → except → else → finally。
  • 如果 finally 里 return,它会覆盖前面 try/except/else 的返回值或异常,慎用!

random 库的使用

random 库是使用随机数的 Python 标准库

  • 伪随机数: 采用梅森旋转算法生成的(伪)随机序列中元素
  • random 库主要用于生成随机数
  • 使用 random 库

基本随机数函数

扩展随机数函数

随机数函数的使用

  • 能够利用随机数种子产生"确定"伪随机数
  • 能够产生随机整数
  • 能够对序列类型进行随机操作