# 第14节教案 —— if基础 + 比较运算符（60分钟·GESP #20 #21）
> **GESP等级：一级 | 考级考点：GESP Python 一级**


> **GESP 考点**：#20 比较运算符（> < >= <= == !=）、#21 if 条件判断
> **教学形式**：turtle场景导入（0-10min）→ 知识点讲解（10-30min）→ 上机演示（30-40min）→ 实操练习（40-55min）→ 收尾小测（55-60min）
> **时长**：60 分钟（完整一节）| **对应文件**：`第14节_if基础.py`、`课堂练习册_第14节_if基础.md`、`课后练习卡_第14节_if基础.md`
> **核心定位**：if 判断地基课——每个孩子必须掌握 if 语法、6个比较运算符、分清 = 赋值与 == 比较。

---

## GESP 知识映射

| GESP 考点 | 本节对应 | 身体锚点 |
|-----------|---------|---------|
| #20 比较运算符 | 6个比较符：`>` `<` `>=` `<=` `==` `!=` | 两手比大小——张大嘴吃大的 |
| #21 if 条件判断 | `if 条件:` 缩进执行 | 小乌龟眼睛看到墙就回头 |
| #20 `==` 等于比较 | `if x == 200:` 判断是否相等 | 两手平行=相等 |
| #20 `!=` 不等于 | `if x != 200:` 判断不相等 | 两手交叉≠不等 |
| — `=` 赋值 | `x = 200` 把值装进变量 | 一个等号装东西 |
| — `==` 比较 | `x == 200` 判断两边相等 | 两个等号比大小 |

---

## 教学目标

孩子下课后能：

- **写出正确的 if 语句**：`if 条件:` 后面缩进写要执行的代码
- **使用 6 个比较运算符**：`>` `<` `>=` `<=` `==` `!=`
- **分清 `=` 和 `==`**：一个等号赋值装东西，两个等号比较比大小
- **用 if 做 turtle 边界检测**：`if t.xcor() > 200:` 让小乌龟掉头
- **读懂 if 的执行流程**：条件为 True 才执行缩进块
- **独立完成补全 if 代码、判断输出、乌龟碰墙掉头练习**

---

## 教学节奏总览

| 时间段 | 时长 | 阶段 | 核心内容 | 身体锚点 | 关键记忆句 |
|--------|------|------|---------|---------|-----------|
| 0-10min | 10min | 导入：传感器游戏 | 蒙眼乌龟碰线→传感器喊"撞墙！" | 双手摸墙喊"撞墙啦！" | "if 像传感器——条件满足就触发" |
| 10-30min | 20min | 知识点讲解 | ①if语法结构 ②6个比较运算符 ③=赋值vs==比较 | 六个动作对应六个符号 | "一个等号装东西 两个等号比大小" |
| 30-40min | 10min | 上机演示 | `if t.xcor()>200: t.right(180)` 掉头 | 老师敲代码，学生猜结果 | "if 是小乌龟的眼睛——看到墙就回头" |
| 40-55min | 15min | 实操练习 | ①补全if边界检测 ②判断=和==区别 ③乌龟碰墙掉头 | 同桌互改，对照答案 | "if 让小乌龟自己动脑筋——遇到墙自己转弯" |
| 55-60min | 5min | 收尾小测 | "==和=有什么区别？"全班齐答+记忆口诀 | 两手平举== 单手抓东西= | "一个等号装东西 两个等号比大小" |

> **节奏逻辑**：具象传感器（0-10min）→ 抽象if语法（10-30min）→ 半具象演示（30-40min）→ 应用练习（40-55min）→ 记忆强化（55-60min）

---

## 课前准备

### 讲台道具清单
- **6张比较运算符卡**（A4卡纸，正反面）：`>` `<` `>=` `<=` `==` `!=`
- **2张语法卡**：`=` 赋值卡（装东西📦） / `==` 比较卡（比大小⚖️）
- **1张大型记忆钩子海报**：**"if = 小乌龟眼睛看到墙就回头" / "一个等号装东西 两个等号比大小"**
- **一条绳子或胶带**（贴在教室地上模拟"墙线"——供导入环节用）
- **一支马克笔**、**磁贴或透明胶**（贴黑板用）

### 黑板/白板布局
- **正中顶部**：大字标题 **if基础 + 比较运算符**
- **左侧 1/3**：if 语法结构（if 条件: 缩进块）
- **中央 1/3**：6个比较运算符对比区
- **右侧 1/3**：= 赋值 vs == 比较 + 预测题

### 学生电脑环境
- 每台电脑已开机，Python/Thonny 已打开
- 桌面放置 `第14节_if基础.py`

### 其他材料
- **课堂练习纸**：每人一张（含3道题），课前放座位右上角
- **课后练习卡**：`课后练习卡_第14节_if基础.md` 打印版，下课时发放

---

## 教学流程

### 阶段一：导入——传感器游戏：蒙眼乌龟碰线（0-10min）

> **目标**：通过身体游戏引出"条件判断"的概念——当某个条件成立时，做对应的动作

**步骤 1：蒙眼走线游戏（5min）**

- 老师在地上（或用黑板上的画）画一条"墙线"
- 请一名学生上台，蒙上眼睛（或用布条遮眼）
- 这名学生扮演"小乌龟"，从起点开始往前走
- 其他学生观察——当"小乌龟"走到墙线时齐声喊 **"撞墙啦！"**
- 蒙眼学生听到喊声停住，转身换方向

**老师的引导语**：
- "刚才蒙眼同学看不到墙，是谁告诉 TA 要停下来的？" —— 其他同学的喊声
- "这个喊声就像一个 **传感器**——条件满足（碰到墙）就触发（喊撞墙）"
- "在 Python 里，`if` 就是这个传感器！"

**步骤 2：把游戏映射到代码（3min）**

老师在黑板上写：

```
条件：走到墙边（x坐标 > 200）
传感器（if）：检测到条件满足
动作（缩进块）：停住 + 掉头
```

```python
# 人类版：蒙眼走路
if 碰到墙:        # 条件判断
    喊"撞墙啦！"   # 条件成立时执行
    掉头换方向     # 条件成立时执行
```

**步骤 3：引出今天要学的 3 个要点（2min）**

老师说："要让小乌龟自己学会'看到墙就回头'，今天需要学 3 件事——"

1. **if 语法**：怎么写条件判断
2. **6个比较运算符**：怎么描述条件（大于、小于、等于……）
3. **分清 = 和 ==**：一个等号是装东西，两个等号才是比大小

**记忆句**：**"if = 小乌龟眼睛看到墙就回头"**

---

### 阶段二：知识点讲解（10-30min）

> **目标**：系统讲解 if 语法、6个比较运算符、=赋值 vs ==比较

#### 知识点①：if 语法结构（6min）

**板书**：
```
if 条件:
    条件成立时执行的代码    ← 缩进（4个空格/Tab）
    可以写多行
```

**核心规则**：
1. `if` 后面跟**条件**，条件一般是比较表达式
2. 条件后面有**冒号** `:`（不要忘！）
3. 条件成立（为 True）时，执行**缩进块**里的代码
4. 缩进一般用 4 个空格或 1 个 Tab

**流程图（边画边讲）**：

```
         ┌──────────┐
         │ 遇到 if  │
         └────┬─────┘
              │
        ┌─────▼─────┐
        │ 条件成立？ │
        └─────┬─────┘
       ┌──────┴──────┐
       ▼              ▼
    ┌──────┐     ┌──────────┐
    │ 执行 │     │ 跳过跳过 │
    │缩进块│     │ 啥也不做 │
    └──────┘     └──────────┘
       │              │
       └──────┬───────┘
              ▼
         ┌──────────┐
         │ 继续执行  │
         └──────────┘
```

**身体动作**：
- `if` → 右手在眼前做"眼睛"动作，表示检测
- `条件` → 双手比出比较的姿势
- `:` 冒号 → 手指指下面，表示"接下来……"
- `缩进块` → 右手向右推，表示"往里缩"

**互动：条件判断游戏**

老师说条件，学生判断"成立"还是"不成立"：

| 条件 | 结果 |
|------|------|
| `5 > 3` | ✅ 成立 |
| `10 < 2` | ❌ 不成立 |
| `7 == 7` | ✅ 成立 |
| `4 != 4` | ❌ 不成立 |

#### 知识点②：6个比较运算符（8min）

**板书**：
```
>   大于        5 > 3    → True
<   小于        5 < 3    → False
>=  大于等于    5 >= 5   → True
<=  小于等于    5 <= 3   → False
==  等于（比较） 5 == 5   → True
!=  不等于      5 != 3   → True
```

**逐个讲解 + 身体动作**：

1. **`>` 大于**（2min）
   - 嘴巴张大朝左——"大鱼吃小鱼，大的那边张嘴"
   - 身体动作：右手斜向上张开 > 形状
   - 例子：`10 > 5` → True（10大于5成立）
   - 例子：`3 > 8` → False（3大于8不成立）

2. **`<` 小于**（1min）
   - 嘴巴张大朝右——"小尖尖指哪边，哪边就小"
   - 身体动作：右手斜向下 < 形状
   - 例子：`3 < 8` → True

3. **`>=` 大于等于**（1min）
   - `>` 下面加一横——比大于多了一个"等于"的情况
   - 例子：`5 >= 5` → True（5等于5成立）
   - 例子：`6 >= 5` → True（6大于5成立）
   - 例子：`4 >= 5` → False（4既不大于也不等于5）

4. **`<=` 小于等于**（1min）
   - 同理，`<` 加一横
   - 例子：`4 <= 5` → True（4小于5成立）

5. **`==` 等于**（1min）
   - 两个等号——"两个等号才比大小"
   - 身体动作：双手平行平举——
   - 例子：`5 == 5` → True
   - 例子：`5 == 3` → False

6. **`!=` 不等于**（1min）
   - 感叹号 + 等于——"不等于就是两边不一样"
   - 身体动作：双手交叉 ✖️
   - 例子：`5 != 3` → True（5不等于3成立）
   - 例子：`5 != 5` → False（5不等于5不成立）

**记忆口诀（全班齐读两遍）**：

```
大于小于张嘴吃   →  > <
大于等于多一横   →  >=
小于等于多一横   →  <=
两个等号比大小   →  ==
感叹号加不等号   →  !=
```

#### 知识点③：= 赋值 vs == 比较（6min）

> 这是本节最核心也是最容易混淆的点，需要花足够时间

**板书（左右对比）**：

```
=  赋值          == 比较
─────────        ─────────
x = 200           x == 200
'=' 装东西        '==' 比大小

例子：            例子：
x = 100            if x == 100:
print(x)  → 100     print("x是100")
                  （判断x的值是不是100）
```

**核心区别（逐条讲解）**：

| | `=` 赋值 | `==` 比较 |
|---|---------|----------|
| 含义 | 把右边的值装进左边的变量 | 判断左右两边是否相等 |
| 结果 | 没有值（只是装东西） | True 或 False |
| 发音 | "x 等于 200"不好，要说"把200装进x" | "x 等于 200 吗？" |
| 记忆钩子 | **一个等号装东西** 📦 | **两个等号比大小** ⚖️ |

**经典错误对比**：

```python
# ❌ 常见错误：在 if 条件里写一个等号
if x = 100:     # 错误！= 是赋值，不是比较
    print("是100")

# ✅ 正确写法
if x == 100:    # 正确！== 是比较
    print("是100")
```

**为什么不能写一个等号？**
- `x = 100` 是"把100装进x"，它不是 True 也不是 False，不能做条件
- `x == 100` 是"判断x的值是不是100"，结果是 True 或 False，可以做条件

**互动：判断对错**

老师举例，学生判断"对"还是"错"：

| 代码 | 对/错 | 原因 |
|------|:-----:|------|
| `x = 10` | ✅ | 赋值，把10装进x |
| `if x = 10:` | ❌ | if条件里不能赋值，要用== |
| `if x == 10:` | ✅ | 判断x是否等于10 |
| `y == 20` | ✅ | 比较y和20是否相等（但单独写没用） |
| `y = 20` | ✅ | 把20装进y |

**重要提示**："解释器看到 `if` 后面写了一个等号会直接报错——所以记住！if 条件里出现等号必须是两个！"

#### 知识点梳理 + 记忆钩子（2min）

**全班起立，带动作齐读两遍**：

```
if 条件冒号换行     →  眼睛看到 + 比条件 + 手指下指
缩进里面写动作     →  右手向右推

一个等号装东西 📦  →  单手做抓东西动作
两个等号比大小 ⚖️  →  双手平行比

大于小于张嘴吃     →  右手比 > <
大于等于多一横     →  >= 动作
小于等于多一横     →  <= 动作
感叹号加不等号     →  双手交叉 ✖️
```

---

### 阶段三：上机演示——乌龟碰墙掉头（30-40min）

> **目标**：通过 turtle 实时演示 if 条件判断，让学生看到条件成立时缩进块被执行

**演示 1：乌龟走到墙边（不处理）——看到问题（3min）**

```python
import turtle
t = turtle.Turtle()
t.speed(2)

# 乌龟一直往前走，不判断边界
t.forward(300)

# 乌龟跑出画布了！它不知道边界
```

- 运行后发现 turtle 跑出窗口消失了
- "乌龟没有眼睛——它看不到边界，一直走一直走，走出了画布"

**演示 2：加 if 条件，乌龟看到墙就掉头（4min）**

```python
import turtle
t = turtle.Turtle()
t.speed(2)

# 走一步，检查一次
for i in range(100):
    t.forward(10)
    
    # if 是小乌龟的眼睛——检测到边界就掉头
    if t.xcor() > 200:           # 条件：x坐标大于200？
        t.right(180)              # 成立：掉头！
        t.forward(10)             # 再往前走一步（回到安全区）
```

- 逐行讲解：turtle 每走一步，if 就检查一次 x 坐标
- 当 `t.xcor() > 200` 成立（True），执行缩进块：掉头
- 学生观察：turtle 在 x=200 附近来回走，不再跑出画布

**记忆句**："if 是小乌龟的眼睛——看到墙就回头！"

**演示 3：多个方向边界检测（3min）**

```python
import turtle
t = turtle.Turtle()
t.speed(3)

# 让乌龟随机走，遇到四个边界都掉头
for i in range(200):
    t.forward(10)
    
    # 右边界
    if t.xcor() > 200:
        t.right(180)
    
    # 左边界
    if t.xcor() < -200:
        t.right(180)
    
    # 上边界
    if t.ycor() > 200:
        t.right(180)
    
    # 下边界
    if t.ycor() < -200:
        t.right(180)
```

- 展示 if 可以写多个（顺序检测）
- 每个 if 独立判断，条件成立就执行对应的缩进块
- 学生看到 turtle 在四个边界内来回反弹

---

### 阶段四：实操练习（40-55min）

> **目标**：三道练习题，巩固 if 语法、比较运算符、=与==区分

**练习 1：补全 if 边界检测（5min）**

补全下面的代码，让乌龟在 x 坐标超过 150 时掉头：

```python
import turtle
t = turtle.Turtle()
t.speed(2)

for i in range(50):
    t.forward(10)
    
    # 补全条件：如果 x 坐标大于 150
    ____ t.xcor() ____ 150:
        _______________    # 掉头
```

答案：
```python
    if t.xcor() > 150:
        t.right(180)
```

**练习 2：判断 = 和 == 区别（5min）**

判断下面的代码是对还是错，错的写出正确写法：

```python
# 题目A
x = 100
if x = 100:
    print("x是100")
# 对/错？→ ______  正确写法：____________

# 题目B
y = 50
if y == 50:
    print("y是50")
# 对/错？→ ______

# 题目C
z = 200
if z == 200:
    z = z - 50
    print("z减了50")
# 对/错？→ ______  输出是什么？____________
```

答案：
```python
# A：错！if条件里不能用=，要用==
# 正确写法：if x == 100:

# B：对！==是比较，条件成立输出"y是50"

# C：对！先比较z==200成立，再赋值z=z-50（z变成150），输出"z减了50"
```

**练习 3：乌龟碰墙掉头——综合应用（5min）**

写一段代码，让 turtle 从左边开始往右走，当 x 坐标超过 250 时掉头，往左走到 x 坐标小于 -250 时再掉头，循环 200 步。

提示模板：
```python
import turtle
t = turtle.Turtle()
t.speed(3)

for i in range(200):
    t._____(10)         # 往前走
    
    # 右边界检测：x > 250 掉头
    ____ t.xcor() > _____:
        t._________(180)
    
    # 左边界检测：x < -250 掉头
    if t.______() < ______:
        t.right(_____)
```

答案：
```python
import turtle
t = turtle.Turtle()
t.speed(3)

for i in range(200):
    t.forward(10)
    
    if t.xcor() > 250:
        t.right(180)
    
    if t.xcor() < -250:
        t.right(180)
```

**讲评（5min）**
- 练习 1 重点：if 条件语法——条件用 > 比较，缩进写掉头
- 练习 2 重点：分清 = 和 ==，if 条件里一定要用 ==
- 练习 3 重点：两个 if 分别检测左右边界，turtle 在两个墙之间来回弹
- 强调：**if 条件后面的冒号不能忘！缩进不能少！**

---

### 阶段五：收尾小测 + 记忆钩子强化（55-60min）

**小测问题**（全班起立，举手回答）：

> **"== 和 = 有什么区别？"**

参考答案：
- `=` 是**赋值**——把右边的值装进左边的变量（一个等号装东西 📦）
- `==` 是**比较**——判断左右两边的值是否相等（两个等号比大小 ⚖️）
- 在 if 条件里只能用 `==`，不能用 `=`（用 `=` 会报错）

**全班齐读记忆钩子（2遍，带动作）**：

```
if 条件冒号换行     →  眼睛看到 + 比条件
缩进里面写动作     →  右手向右推

一个等号装东西 📦  →  单手抓东西
两个等号比大小 ⚖️  →  双手平行比

大于小于张嘴吃     →  右手比 > <
大于等于多一横     →  右手比 >=
小于等于多一横     →  右手比 <=
两个等号比大小     →  == 双手平行
感叹号加不等号     →  != 双手交叉
```

**布置课后练习卡**
- 发放 `课后练习卡_第14节_if基础.md` 打印版
- 预告下一节："下节课我们学 if-else——如果……否则……让小乌龟做更聪明的选择！"

---

## 板书设计（终版）

```
╔═══════════════════════════════════════════════════════════════════════╗
║           if基础 + 比较运算符                                        ║
╠═══════════════════╦═══════════════════════╦═══════════════════════════╣
║  if 语法           ║  6个比较运算符         ║  =  vs  ==              ║
║                   ║                       ║                          ║
║  if 条件:          ║  >  大于    10>5 ✅   ║  =  赋值                ║
║      缩进块        ║  <  小于    3<8  ✅   ║      x = 100            ║
║                   ║  >= 大于等于 5>=5 ✅   ║      "装东西"           ║
║  条件→True→执行    ║  <= 小于等于 4<=5 ✅   ║                          ║
║  条件→False→跳过   ║  == 等于    5==5 ✅   ║  == 比较                ║
║                   ║  != 不等于  5!=3 ✅   ║      if x == 100:       ║
║  if t.xcor()>200: ║                       ║      "比大小"           ║
║      t.right(180) ║  记忆口诀：            ║                          ║
║                   ║  大于小于张嘴吃        ║  预测题：                ║
║                   ║  多一横就是等于        ║  x = 10                 ║
║                   ║  两个等号比大小        ║  if x == 10:            ║
║                   ║  感叹号加不等号        ║      print("对")        ║
╚═══════════════════╩═══════════════════════╩═══════════════════════════╝
║  记忆钩子：                                                           ║
║  "if = 小乌龟眼睛看到墙就回头"                                        ║
║  "一个等号装东西  两个等号比大小"                                     ║
║  "大于小于张嘴吃  多一横就是等于"                                     ║
╚═══════════════════════════════════════════════════════════════════════╝
```

---

## 差异化教学

| 学生类型 | 表现 | 应对策略 |
|---------|------|---------|
| 快进型 | 练习做得快，开始分心 | 额外挑战：让乌龟在屏幕上反弹——用 if 检测四个边界，碰到任意边界就随机转 90-180 度，像台球一样反弹 |
| 慢热型 | 分不清 = 和 == | 用实物演示：拿一个盒子（变量 x），把写着 100 的纸放进去（`x = 100`）是"装东西"——两个等号 `x == 100` 是"打开盒子看里面的数是不是 100"——是"检查/判断" |
| 概念混淆型 | 搞不清比较运算符的方向 | 在黑板上画鳄鱼嘴 🐊 ——鳄鱼嘴总是张向更大的数。`5 > 3` 嘴朝5（左），`3 < 5` 嘴朝5（右）——尖尖指向小的数，嘴巴张开朝向大的数 |

---

## 课后反思（教师填写）

| 项目 | 评价 | 备注 |
|------|:----:|------|
| 教学目标达成度 | /5 | |
| 学生参与度 | /5 | |
| 时间把控 | /5 | |
| 需改进点 | | |
