> **GESP等级：二级 | 考级考点：GESP Python 二级**

# 第08节 if/elif/else 多分支 · 条件顺序陷阱
**课时：** 1课时（约60分钟）
**目标学生：** 已掌握 if/else 基础

---

## 教学目标

1. **理解 `elif` 的本质**：`elif = else + if` 合体，是 `else` 后面紧跟一个 `if` 条件的缩写
2. **掌握多分支执行规则**：从上到下依次判断，碰到第一个满足条件就执行对应代码块，执行后跳出整个 `if` 结构
3. **认识条件顺序的重要性**：窄条件（小范围）放在前面，宽条件（大范围）放在后面，否则会产生"短路"陷阱
4. **能独立编写四色区域判断代码**并能预测执行结果

---

## 教学重难点

| 类型 | 内容 |
|------|------|
| 重点 | `elif` 语法格式、多分支从上到下执行规则 |
| 难点 | 条件顺序对结果的影响——宽条件"吃掉"窄条件 |
| 易错点 | 忘记 `elif` 不能独立使用（必须跟在 `if` 或另一个 `elif` 后面） |

---

## 教学过程

### 第一部分：导入 · 四色区域（00:00-10:00）

**故事引入：**
> 想象一条长长的路，从 West 到 East，分成四个颜色区域——
>
> | 范围 | 颜色 | 名称 |
> |------|------|------|
> | x ≤ 100 | 🔵 蓝色 | 极西（Extreme West） |
> | 100 < x ≤ 200 | 🟢 绿色 | 西区（West Zone） |
> | 200 < x ≤ 300 | 🟡 黄色 | 东区（East Zone） |
> | x > 300 | 🔴 红色 | 极东（Extreme East） |
>
> 输入一个坐标 x，判断它在哪个区域。

**引导提问：**
- 如果只用 `if/else`，怎么表达四种情况？（嵌套 if → 啰嗦）
- 有没有更简洁的方式？（引出 `elif`）

**板书：** 四色区域图（数轴标注 100/200/300 分界点）

---

### 第二部分：知识点讲解（10:00-30:00）

#### ① `elif` = `else` + `if` 合体

```python
# 不用 elif 的写法（嵌套）
if x <= 100:
    color = "极西"
else:
    if x <= 200:
        color = "西区"
    else:
        if x <= 300:
            color = "东区"
        else:
            color = "极东"

# 用 elif（扁平化）
if x <= 100:
    color = "极西"
elif x <= 200:
    color = "西区"
elif x <= 300:
    color = "东区"
else:
    color = "极东"
```

**`elif` 拆解：** `elif` = `else` + `if`，意思就是"否则，如果……"

#### ② 执行规则：从上到下，第一个真就停

```
                      ┌──────────┐
                      │ if 条件 ? │──False→┌──────────┐
                      └────┬─────┘        │ elif ?   │──False→...
                           │ True          └────┬─────┘
                           ▼                    │ True
                    执行 if 代码块               ▼
                                          执行 elif 代码块
```

**关键记忆：** "排队检查，第一个对的执行，后面的全部跳过"

#### ③ 条件顺序陷阱（核心难点！）

**错误示范：把大范围条件放在前面**

```python
# ❌ 错误的顺序
if x > 100:       # 大范围：所有 >100 的数都会进来
    color = "西区"
elif x > 200:     # 永远不会执行！因为 >200 的数已经 >100
    color = "东区"
elif x > 300:     # 也永远不会执行
    color = "极东"
else:
    color = "极西"
```

**结果：** x = 300 时，`300 > 100` 为真，输出"西区"——明显错误！

**正确做法：小范围（窄条件）放前面**

```python
# ✅ 正确的顺序
if x <= 100:      # 最窄的条件
    color = "极西"
elif x <= 200:    # 其次
    color = "西区"
elif x <= 300:    # 再次
    color = "东区"
else:             # 剩下的
    color = "极东"
```

**口诀：** "小范围在前，大范围在后；elif 排队，找到就停。"

---

### 第三部分：演示代码（30:00-40:00）

讲师现场运行 `07第08节4_代码.py`，演示两种顺序的结果对比。

| x 值 | 正确顺序结果 | 错误顺序结果 | 说明 |
|------|-------------|-------------|------|
| 50 | 极西 | 极西 | 两种顺序都正确（因为 x≤100 单独被 else 兜底） |
| 150 | 西区 | 西区 | 恰好落在第一个范围 |
| 300 | 东区 | ❌ 西区 | 错误顺序被 `x>100` 拦截 |
| 500 | 极东 | ❌ 西区 | 错误顺序同样被 `x>100` 拦截 |

**重点演示：** 修改条件顺序（把 `x > 100` 放到第一个），让学生观察 x=300 时输出变成"西区"。

---

### 第四部分：实操练习（40:00-55:00）

**练习 1：补全四色判断代码**
> 给出半成品代码，学生补全 `elif` 条件。

**练习 2：预测输出**
> 给定不同的 x 值和不同的条件顺序，预测 color 的值。
> 例如：x = 50，用正确顺序 → color = ？
> 提示：50 ≤ 100 → True → color = "极西"

**练习 3：改顺序看影响**
> 让学生修改条件顺序（把 `x > 200` 放第一个等），观察结果变化，总结规律。

---

### 第五部分：小测与总结（55:00-60:00）

**小测题目：**
1. `elif` 为什么不能独立使用？
   - **答案：** `elif` 本质是 `else` 和 `if` 的合体，它必须在某个 `if` 或另一个 `elif` 之后才有意义。没有前面的 `if`，`elif` 就没有"否则"的对象。
2. 如果 `if` 和所有 `elif` 都不满足，执行哪里？
   - **答案：** `else` 代码块
3. 多分支中，条件顺序为什么重要？
   - **答案：** Python 从上到下执行，第一个满足的条件就执行并跳出。如果大范围条件放前面，后面的窄条件永远不会执行到。

**记忆钩子：**
> **"elif = else + if 合体排队检查，第一个对的执行，后面全部跳过"**

---

## 板书设计

```
┌─────────────────────────────────────┐
│  if/elif/else  多分支               │
│                                     │
│  elif = else + if                   │
│                                     │
│  规则：从上到下，第一个真就执行      │
│                                     │
│  ⚠️  陷阱：大范围在前 → 短路！      │
│      ✅ 小范围在前，大范围在后      │
│                                     │
│  记忆：排队检查，第一个对的执行      │
└─────────────────────────────────────┘
```

---

## 课后反思

- 学生对 `elif` 的"否则如果"语义是否清晰？
- 条件顺序的陷阱是否需要更多演示案例？
- 能否用生活中的例子（如考试成绩等级判断）辅助理解？
