# 3f 培训内容：流程控制与实训

## 课程定位

- 对象：已学变量、输入输出、比较与逻辑运算的 Python 初学者。
- 建议时长：100 分钟；主线是选择、重复与停止。
- 先修要求：能读懂赋值、print、比较表达式和 and/or/not。
- 参考教材：`../3f.pdf`，对应《Python 快速编程入门（第 3 版）》第 3 章。
- 课堂材料：`../第03讲_Python条件判断与循环.ipynb`、`课堂Slides.tex`、`课堂Slides.pdf`、`课后练习.py`。

课程沟通目标：学生能把自然语言规则改写为清楚的分支和循环，并用边界样例检查程序是否按预期选择、重复和停止。

## 学习目标与验收

| 目标 | 学生可观察行为 | 验收方式 |
|---|---|---|
| 写条件分支 | 正确使用 if/else | 及格判断 |
| 处理多种情况 | 由高到低写 if-elif-else | 成绩边界测试 |
| 表达依赖规则 | 必要时使用嵌套条件 | 月份天数函数 |
| 控制重复任务 | 区分 while、for 和 range | 累加、遍历练习 |
| 控制循环节奏 | 区分 break 与 continue | 字符串遍历观察 |
| 完成业务实训 | 将规则写成可复跑函数 | 会员、物流、登录 |

## 100 分钟流程

| 时间 | 教学环节 | 教师动作 | 学生活动 | 形成性评价 |
|---:|---|---|---|---|
| 0-8 分钟 | 流程热身 | 展示 58 分与 88 分应走的路径 | 预测布尔结果 | 能否读出条件真假 |
| 8-22 分钟 | if 与 if-else | 强调冒号、缩进、完整反馈 | 改写及格判断 | 59/60 是否正确 |
| 22-35 分钟 | 多分支与嵌套 | 用成绩等级、2 月天数拆规则 | 测试 74/75/84/85 | 是否先判高阈值 |
| 35-49 分钟 | while 循环 | 拆初值、条件、更新 | 写 1 到 10 累加 | 能否终止 |
| 49-61 分钟 | for 与 range | 对比遍历与固定次数 | 预测 range(2, 6) | 是否理解右边界 |
| 61-70 分钟 | 循环嵌套与跳转 | 演示棋盘、break、continue | 解释行列职责 | 是否区分结束与跳过 |
| 70-82 分钟 | 会员等级实训 | 带读从高到低的门槛 | 完成等级函数 | 双门槛是否都检查 |
| 82-92 分钟 | 物流与登录实训 | 强调输入验证、向上计费、尝试次数 | 修改样例并复跑 | 非法地区、成功登录 |
| 92-97 分钟 | 房贷拓展 | 展示条件选利率与公式封装 | 阅读函数输出 | 不要求手算公式 |
| 97-100 分钟 | 离场检验 | 提问边界、循环三要素、跳转差异 | 提交简短答案 | 能否口头解释 |

## 核心讲解

### 1. 分支先解决规则是否完整

if 只处理成立情况；if-else 覆盖两种结果；if-elif-else 处理多个互斥分支。多阈值规则必须从高到低写，因为第一个命中的分支会结束整条分支链。每个阈值至少测试前一位、阈值本身、后一位。

### 2. 嵌套只用于有先后依赖的判断

月份天数的例子中，只有月份为 2 时才需要判断闰年。若多个条件平行、互不依赖，优先使用清楚的 elif 或单独的布尔变量，不要滥用嵌套。

### 3. 循环前先说清三件事

- 初值：循环从什么状态开始；
- 条件：什么时候继续或停止；
- 更新：每轮如何向停止条件靠近。

while 适合次数未知、停止条件明确的场景；for 适合遍历对象；for range 适合固定次数。range 的终点不包含在结果中。

### 4. break 与 continue 的边界

break 结束当前这一层循环；continue 跳过当前轮的后续代码。二者均应和明确的条件配合，不应用来掩盖原本混乱的循环条件。

### 5. 实训代码先验证输入

会员等级需要同时检查金额和积分；物流费用需要验证地区编号、重量和向上计费规则；登录检测需要明确最多次数。把每项规则封装成函数，便于重复测试。

## 实训组织

### 实训一：会员等级评定

按教材门槛从钻石到青铜依次判断。验收样例：

- 1200 元、12000 分：钻石会员；
- 650 元、5200 分：白金会员；
- 180 元、900 分：普通会员。

### 实训二：物流费用计算

使用地区编号字符串 01、02、03，避免输入 01 后丢失前导零。首重不超过 2 kg；超过部分向上按整 kg 计算。验收样例：华北地区 3.2 kg 应为 14 + 2 * 4 = 22 元。

### 实训三：账号密码检测

以三个预置尝试样例代替课堂输入。成功时立即结束；连续三次失败才显示锁定提示。真实系统不应在明文中保存密码，本练习仅用于流程控制。

### 拓展：房贷估算器

用条件确定年利率，用函数封装等额本息公式。练习只用于理解代码组织，不构成金融建议；实际贷款请以金融机构提供的合同和测算为准。

## 常见误区与纠偏话术

| 误区 | 纠偏 |
|---|---|
| 冒号后代码不必缩进 | 缩进决定代码块；同层代码必须对齐 |
| 多分支先写最低阈值也没关系 | 第一个命中就停止，阈值要从高到低 |
| range(5) 包含 5 | 它只产生 0 到 4 |
| while 可以不更新变量 | 条件永远为真时程序可能无法停止 |
| break 会结束所有嵌套循环 | 它只结束当前最内层循环 |
| continue 等于结束循环 | 它只跳过当前这一轮 |
| 能跑一次就说明规则正确 | 还需测试阈值、非法输入和失败路径 |

## 课后练习使用方式

1. 学生只修改课后练习.py 中的 TODO。
2. 每题先写至少一个边界样例，再运行验证。
3. 完成后确保文件从上到下一次运行不出现异常。
4. 房贷题只做拓展阅读，不作为基础必做题。

评分建议：条件分支 25%，循环结构 25%，边界与异常考虑 20%，综合实训 20%，代码可读性与解释 10%。
