# 第15节教案 —— if/else 双分支：二选一（60分钟·GESP #31 #32）
> **GESP等级：一级 | 考级考点：GESP Python 一级**


> **GESP 考点**：#31（双分支结构）、#32（条件判断与分支执行）
> **教学形式**：turtle场景导入（0-10min）→ 知识点讲解（10-30min）→ 上机演示（30-40min）→ 实操练习（40-55min）→ 收尾小测（55-60min）
> **时长**：60 分钟（完整一节）| **对应文件**：`07第15节4_代码.py`、`课堂练习册_第15节_if_else.md`、`课后练习卡_第15节_if_else.md`
> **核心定位**：从"if 单分支"跨入"if/else 双分支"——岔路口思维：条件成立走if，不成立走else，必走一条。
> **身体锚点**：一个分岔路口——"走上面还是走下面？"

---

## GESP 知识映射

| GESP 考点 | 本节对应 | 身体锚点 |
|-----------|---------|---------|
| #31 双分支结构 | `if/else` 语法：条件真→走if，假→走else | 岔路口——两条路必须选一条 |
| #32 条件判断与分支执行 | 根据条件真假决定执行哪个分支代码块 | 看红绿灯——绿灯走红灯停 |
| — if/else vs 两个if | 互斥二选一 vs 独立判断各自执行 | 岔路口 vs 两个独立检查站 |

---

## 教学目标

孩子下课后能：

- **写出正确的 if/else 语句**：`if 条件:` 缩进块A `else:` 缩进块B
- **理解二选一执行逻辑**：条件真走if，条件假走else，两条路必走一条
- **分清 if/else 和 两个 if 的区别**：互斥二选一 vs 独立判断可并存
- **用 if/else 控制 turtle 上下分屏行为**：y>0 往下走 / y<=0 往上走
- **用 if/else 实现不同区域不同颜色绘制**
- **读懂 if/else 的执行流程并预测输出结果**

---

## 教学节奏总览

| 时间段 | 时长 | 阶段 | 核心内容 | 身体锚点 | 关键记忆句 |
|--------|------|------|---------|---------|-----------|
| 0-10min | 10min | 导入：上半屏往下走，下半屏往上走 | 想象小乌龟站在水平线上——y>0 往下走，y<0 往上走 | 双手举高往下压 / 蹲低往上抬 | "岔路口——二选一，必走一条" |
| 10-30min | 20min | 知识点讲解 | ①if/else语法 ②二选一执行流程 ③if/else vs 两个if的区别 | 岔路口手势——双手摊开选一边 | "条件真走if，条件假走else" |
| 30-40min | 10min | 上机演示 | `if y>0: 往下 / else: 往上` 四位置测试 | 老师敲代码，学生喊结果 | "if/else = 岔路口，二选一，必走一条！" |
| 40-55min | 15min | 实操练习 | ①补全if/else ②改条件画不同颜色 ③多位置测试 | 同桌互改，对照答案 | "上红下蓝，二选一！" |
| 55-60min | 5min | 收尾小测 | "if/else 和 两个 if 有什么区别？"全班齐答 | 岔路口 vs 两个检查站 | "if/else 是岔路口，两个if是独立检查站" |

> **节奏逻辑**：具象岔路口（0-10min）→ 抽象if/else语法（10-30min）→ 半具象演示（30-40min）→ 应用练习（40-55min）→ 记忆强化（55-60min）

---

## 课前准备

### 讲台道具清单
- **2张语法卡**（A4卡纸，正反面）：`if - else 语法结构` / `if/else vs 两个if 对比`
- **1条岔路口胶带**（在地上贴出Y形岔路——导入环节用）
- **1张大型记忆钩子海报**：**"if/else = 岔路口，二选一，必走一条！"**
- **红蓝马克笔各一支**（黑板画图用）
- **磁贴或透明胶**（贴黑板用）

### 黑板/白板布局
- **正中顶部**：大字标题 **if/else 双分支——二选一**
- **左侧 1/3**：if/else 语法结构 + 流程图
- **中央 1/3**：if/else vs 两个if 对比区
- **右侧 1/3**：实操区（预测题补全）

### 学生电脑环境
- 每台电脑已开机，Python/Thonny 已打开
- 桌面放置 `07第15节4_代码.py`

### 其他材料
- **课堂练习纸**：每人一张（含3道题），课前放座位右上角
- **课后练习卡**：`课后练习卡_第15节_if_else.md` 打印版，下课时发放

---

## 教学流程

### 阶段一：导入——岔路口游戏：上半屏往下走，下半屏往上走（0-10min）

> **目标**：通过身体游戏引出"二选一"的概念——一个条件对应两条互斥的路，必须选一条

**步骤 1：岔路口游戏（5min）**

- 老师在地上（或用黑板上的画）画一条水平线（y=0）
- 水平线上方写着"上半屏（y>0）"，下方写着"下半屏（y<0）"
- 请一名学生上台，站在水平线上当"小乌龟"
- 老师喊一个位置，学生判断：在上半屏就双手举高喊"我在上面！"并往下走；在下半屏就蹲低喊"我在下面！"并往上走
- 玩3-4轮，每次学生都要**选一个方向走**

**老师的引导语**：
- "刚才这位同学站在线上——TA只有两种可能：要么在上面，要么在下面"
- "没有中间选项！这就是 **二选一**——两条路，必须选一条"
- "在 Python 里，`if/else` 就是做这个的！"

**步骤 2：把游戏映射到代码（3min）**

老师在黑板上写：

```
条件：y > 0（在上半屏？）
如果成立（True）→ 往下走（right(90)）
如果不成立（False）→ 往上走（left(90)）
```

```python
# 人类版：站在水平线上
if 在上半屏:          # 条件判断
    往下走             # 条件成立时执行
else:                 # 否则
    往上走             # 条件不成立时执行
```

**步骤 3：引出本节 3 个要点（2min）**

老师说："要让小乌龟学会'岔路口二选一'，今天需要学 3 件事——"

1. **if/else 语法**：怎么写"如果…否则…"
2. **二选一执行流程**：条件真走if，假走else，必走一条
3. **if/else vs 两个 if**：岔路口 vs 两个独立检查站

**记忆句**：**"if/else = 岔路口，二选一，必走一条！"**

---

### 阶段二：知识点讲解（10-30min）

> **目标**：系统讲解 if/else 语法、执行流程、与两个if的区别

#### 知识点①：if/else 语法结构（8min）

**板书**：
```
if 条件:
    条件成立时执行的代码    ← 条件为 True 走这里
else:
    条件不成立时执行的代码  ← 条件为 False 走这里
```

**核心规则**：
1. `if` 后面跟**条件**，条件后面有**冒号** `:`
2. `else` 是关键字，后面也有**冒号** `:`（不要写成 `else if`！）
3. 两个缩进块互斥——**只能执行其中一个**
4. 不管条件真假，**总有一条被执行**（与单分支 if 的关键区别）

**流程图（边画边讲）**：

```
         ┌──────────┐
         │ 遇到 if   │
         └────┬─────┘
              │
        ┌─────▼─────┐
        │ 条件成立？ │
        └─────┬─────┘
       ┌──────┴──────┐
       ▼              ▼
    ┌────────┐   ┌────────┐
    │ 走 if  │   │走 else │
    │ 缩进块  │   │ 缩进块  │
    └────────┘   └────────┘
       │              │
       └──────┬───────┘
              ▼
         ┌──────────┐
         │ 继续执行  │
         └──────────┘
```

**身体动作**（全班起立做）：
- `if 条件:` → 右手伸出，手心朝上，表示"如果……"
- `else:` → 左手伸出，手心朝上，表示"否则……"
- 两手向两边摊开——"岔路口，二选一！"

**互动：条件判断游戏**

老师说条件，学生用手指指左边（走if）或右边（走else）：

| 条件 | 走 if 还是 else？ |
|------|-----------------|
| `5 > 3`（真） | 走 if ✅ |
| `10 < 2`（假） | 走 else |
| `7 == 7`（真） | 走 if ✅ |
| `4 != 4`（假） | 走 else |

**强调**："不管条件真还是假，都有路走——这就是 if/else 和单分支 if 最大的不同！"

#### 知识点②：if/else 执行流程——追代码（6min）

**板书：走一遍代码**

```python
y = 80    # 在上半屏

if y > 0:
    print("在上半屏，往下走")
else:
    print("在下半屏，往上走")
```

**逐行讲解执行流程**：
1. `y = 80` → 变量 y 装进 80
2. `if y > 0:` → 判断 80 > 0，结果是 True
3. 条件为 True → 执行 if 缩进块：输出"在上半屏，往下走"
4. **跳过** else 缩进块（不执行）
5. 继续执行后面的代码

**再走一遍——换 y = -30**：
1. `y = -30`
2. `if y > 0:` → 判断 -30 > 0，结果是 False
3. 条件为 False → **跳过** if 缩进块
4. 执行 else 缩进块：输出"在下半屏，往上走"
5. 继续执行后面的代码

**互动：预测输出**

老师在黑板上写出代码，学生举手回答输出结果：

```python
# 题目 1
score = 60
if score >= 60:
    print("及格了")
else:
    print("不及格")
# 输出：______（及格了）

# 题目 2
age = 15
if age >= 18:
    print("成年了")
else:
    print("未成年")
# 输出：______（未成年）

# 题目 3
x = 100
if x == 50:
    print("x是50")
else:
    print("x不是50")
# 输出：______（x不是50）
```

#### 知识点③：if/else vs 两个 if 的区别（6min）

> 这是本节最关键的理解难点——很多孩子一开始分不清"二选一"和"两个独立的if"

**板书（左右对比）**：

```
写法 A：if/else                   写法 B：两个独立的 if
─────────────────────             ─────────────────────
if y > 0:                         if y > 0:
    往下走                           往下走
else:                             if y <= 0:
    往上走                           往上走

特点：                           特点：
  • 两个分支互斥                    • 两个条件独立判断
  • 条件真→走if 假→走else          • 可能走0条、1条、2条
  • 必走一条，不会都走              • 条件不互斥时可能都走
```

**用"岔路口 vs 检查站"来理解**：

- **if/else = 岔路口**：你走到一个岔路口，只能选一条路走。选了左边就不能走右边，选了右边就不能走左边。**二选一，必走一条！**

- **两个 if = 两个独立检查站**：你走过第一个检查站（检查身份证），走过第二个检查站（检查行李）。两个检查站互不干扰——可能都通过，可能一个通过一个不通过，可能两个都不通过。

**互动：判断下面哪种情况用 if/else，哪种用两个 if？**

| 场景 | 用 if/else 还是两个 if？ |
|------|----------------------|
| 考试成绩≥60分及格，否则不及格 | if/else ✅ |
| 今天下雨带伞，今天降温穿外套 | 两个 if ✅ |
| 坐标在上半屏往右走，在下半屏往左走 | if/else ✅ |
| 碰右边界掉头、碰左边界也掉头 | 两个 if ✅（两个边界都可能碰到）|

**老师总结**：
- 如果两个条件是**互斥的**（非此即彼）→ 用 if/else
- 如果两个条件是**独立的**（互不影响）→ 用两个 if
- ⚠️ 一个常见的错误：**该用 if/else 的地方用了两个 if**——效率低且不清晰

#### 知识点梳理 + 记忆钩子（2min）

**全班起立，带动作齐读两遍**：

```
if 条件冒号换行     →  右手伸出，手心朝上
else 冒号换行       →  左手伸出，手心朝上
岔路口，二选一     →  双手向两边摊开
必走一条不落空     →  双手握拳向下压
条件真走 if 块     →  指左边
条件假走 else 块   →  指右边
```

---

### 阶段三：上机演示——if/else 上半屏往下走，下半屏往上走（30-40min）

> **目标**：通过 turtle 实时演示 if/else 的双分支执行，视觉化展示"二选一"

**演示准备**（2min）
- 打开 `07第15节4_代码.py`，运行演示部分
- 在画布上画一条灰色的水平线（y=0）作为分界线
- 标注"上半屏"和"下半屏"

**演示 1：四个位置测试——二选一效果（4min）**

测试四个位置：两个在上半屏（y>0），两个在下半屏（y<0）

```
位置 A (-200, 100)  上半屏 → 蓝色的笔，往下走  ↓
位置 B ( 150,  80)  上半屏 → 蓝色的笔，往下走  ↓
位置 C (-150, -90)  下半屏 → 橙色的笔，往上走  ↑
位置 D ( 200, -70)  下半屏 → 橙色的笔，往上走  ↑
```

核心代码：
```python
if t.ycor() > 0:        # 条件：在上半屏？
    t.color("blue")
    t.right(90)          # 往下走
    t.forward(80)
else:                    # 否则：在下半屏
    t.color("orange")
    t.left(90)           # 往上走
    t.forward(80)
```

**逐行讲解**：
- "海龟现在站在位置 A，y=100，大于 0 —— 条件成立！"
- "所以走 if 分支：变蓝色，往下走 80 步"
- "海龟站到位置 C，y=-90，不大于 0 —— 条件不成立！"
- "所以走 else 分支：变橙色，往上走 80 步"

**学生观察**：每个位置确实只走了一条路，要么往下要么往上，没有都走也没有都不走

**记忆句**："if/else = 岔路口，二选一，必走一条！"

**演示 2：删除 else 会怎样？——对比实验（2min）**

老师把 else 块注释掉，只留一个 if：

```python
if t.ycor() > 0:
    t.color("blue")
    t.right(90)
    t.forward(80)
# else 被删掉了——下半屏什么都不做
```

- 运行后学生看到：上半屏的乌龟往下走了，但**下半屏的乌龟原地不动！**
- "看到区别了吗？没有 else，下半屏的乌龟'无路可走'——if 条件不满足就什么都不做"
- "加上 else，**不管条件真还是假，都有一条路走**"

**演示 3：if/else 切换颜色——二选一效果（2min）**

让乌龟随机走8步，每步根据 y 坐标切换颜色：

```python
if t.ycor() > 0:
    t.color("red")       # 上半屏红色
else:
    t.color("blue")      # 下半屏蓝色
```

学生观察：乌龟走到上半屏变红，走到下半屏变蓝，每次切换都是"二选一"

**总结（2min）**

老师在黑板上写出本节的**核心三点**：

```
① if/else → 条件真走if，假走else，必走一条！
② 没有 else → 条件假时什么都不做
③ 岔路口思维：两条路互斥，只能选一条
```

---

### 阶段四：实操练习（40-55min）

> **目标**：三道练习题，巩固 if/else 语法、补全、不同条件应用

**练习 1：补全 if/else 代码（5min）**

补全下面的代码，让海龟在 y>0 时往下走，否则往上走：

```python
import turtle
t = turtle.Turtle()
t.speed(2)

# 海龟在位置 (0, 80)
t.goto(0, 80)
t.pendown()
t.setheading(0)

# 补全 if/else：y > 0 往下走，否则往上走
____ t.______() ____ 0:
    t.________(90)    # 往下走
    t.forward(60)
____:
    t.______(90)     # 往上走
    t.forward(60)
```

答案：
```python
if t.ycor() > 0:
    t.right(90)
    t.forward(60)
else:
    t.left(90)
    t.forward(60)
```

**练习 2：改条件——不同区域画出不同颜色（5min）**

乌龟随机走 8 步，每步根据 y 坐标切换颜色：
- y > 0 → 红色
- y <= 0 → 蓝色

补全代码：
```python
for step in range(8):
    ____ t.ycor() ____ 0:
        t.color("____")     # 上半屏红色
    ____:
        t.color("____")     # 下半屏蓝色
    
    t.forward(70)
    if step % 2 == 0:
        t.left(45)
    else:
        t.right(45)
```

答案：
```python
    if t.ycor() > 0:
        t.color("red")
    else:
        t.color("blue")
```

**练习 3：多位置测试——if/else 方向切换（5min）**

给定多个 y 值列表 `[50, -50, 100, -100, 30, -30]`，对每个 y：
- y > 0 → 红色往下
- else → 蓝色往上

补全代码：
```python
test_y_values = [50, -50, 100, -100, 30, -30]

for test_y in test_y_values:
    t.goto(-200, test_y)
    t.pendown()
    
    ____ test_y ____ 0:
        t.color("____")
        t.right(90)
        t.forward(70)
        print(f"y={test_y} → 红色向下")
    ____:
        t.color("____")
        t.left(90)
        t.forward(70)
        print(f"y={test_y} → 蓝色向上")
    
    t.penup()
```

答案：
```python
    if test_y > 0:
        t.color("red")
        t.right(90)
        t.forward(70)
    else:
        t.color("blue")
        t.left(90)
        t.forward(70)
```

**讲评（5min）**
- 练习 1 重点：if/else 语法——`if 条件:` 不能忘冒号，`else:` 也不能忘冒号
- 练习 2 重点：`y > 0` 真→红色，假→蓝色，**两个分支颜色不同**
- 练习 3 重点：直接在 `test_y` 变量上判断，不需要再用 `t.ycor()`
- 强调：**"条件真走 if，条件假走 else——岔路口，二选一！"**

---

### 阶段五：收尾小测 + 记忆钩子强化（55-60min）

**小测问题**（全班起立，举手回答）：

> **"if/else 和 两个独立的 if，执行效果有什么不同？"**

参考答案：
- **if/else**：两个分支互斥，条件真走if，条件假走else，**必走一条且只走一条**
- **两个 if**：每个 if 独立判断，可能走0条、1条，**条件不互斥时可以走2条**
- 记忆钩子：**"if/else = 岔路口二选一，两个 if = 独立检查站各查各的"**

**再加一道代码预测题**：

```python
x = 50
y = 30

# 写法 A：if/else
if x > 0:
    print("x大于0")
else:
    print("x不大于0")

# 写法 B：两个 if
if x > 0:
    print("x大于0")
if y > 0:
    print("y大于0")
```

问：写法 A 输出几行？写法 B 输出几行？
答案：写法 A 输出 1 行（条件成立走 if），写法 B 输出 2 行（两个条件都成立都执行）

**全班齐读记忆钩子（2遍，带动作）**：

```
if 条件冒号换行     →  右手伸出
else 冒号换行       →  左手伸出
岔路口，二选一     →  双手向两边摊开
必走一条不落空     →  握拳向下
条件真走 if 块     →  指左边
条件假走 else 块   →  指右边
```

**布置课后练习卡**
- 发放 `课后练习卡_第15节_if_else.md` 打印版
- 预告下一节："下节课我们学 if-elif-else——多个条件多分支，让选择更丰富！"

---

## 板书设计（终版）

```
╔═══════════════════════════════════════════════════════════════════════╗
║           if/else 双分支——二选一                                      ║
╠═══════════════════╦═══════════════════════╦═══════════════════════════╣
║  if/else 语法      ║  if/else vs 两个 if    ║  实践与预测              ║
║                   ║                       ║                          ║
║  if 条件:          ║  if/else:             ║  题目1：                 ║
║      代码A         ║  岔路口，二选一       ║  score=60                ║
║  else:             ║  必走一条！           ║  if score>=60:           ║
║      代码B         ║                       ║      print("及格")       ║
║                   ║  两个 if:             ║  else:                   ║
║  流程：            ║  独立检查站           ║      print("不及格")     ║
║  条件真→走A        ║  各查各的             ║  → 输出：及格            ║
║  条件假→走B        ║  可能走0/1/2条       ║                          ║
║  必走一条不落空    ║                       ║  题目2：                 ║
║                   ║  选哪个：             ║  age=15                  ║
║  例子：            ║  互斥→if/else        ║  if age>=18:             ║
║  if y>0: 往下      ║  独立→两个if         ║      print("成年")       ║
║  else: 往上        ║                       ║  else:                   ║
║                   ║                       ║      print("未成年")     ║
║                   ║                       ║  → 输出：未成年           ║
╚═══════════════════╩═══════════════════════╩═══════════════════════════╝
║  记忆钩子：                                                           ║
║  "if/else = 岔路口，二选一，必走一条！"                                ║
║  "条件真走 if，条件假走 else"                                         ║
╚═══════════════════════════════════════════════════════════════════════╝
```

---

## 差异化教学

| 学生类型 | 表现 | 应对策略 |
|---------|------|---------|
| 快进型 | 练习做得快，开始分心 | 额外挑战：用 if/else 实现"奇偶路"——如果移动步数是奇数走红色，偶数走蓝色，让乌龟走出彩色斑马线 |
| 慢热型 | 搞不清什么时候用 if/else 什么时候用两个 if | 用"岔路口 vs 两个检查站"的实物演示：岔路口只能选一条路（if/else）；两个检查站各查各的可以先查身份证再查行李（两个if） |
| 概念混淆型 | if/else 和 if 单分支混用，该用 else 的地方用第二个 if | 强调对比：没有 else 时条件假了什么都不做——"乌龟走到下半屏就停住了，因为没有 else 给它指路"。加上 else 后"不管真假都有路走" |

---

## 课后反思（教师填写）

| 项目 | 评价 | 备注 |
|------|:----:|------|
| 教学目标达成度 | /5 | |
| 学生参与度 | /5 | |
| 时间把控 | /5 | |
| 需改进点 | | |
