# 第07节教案 —— 变量控制turtle（60分钟）
> **GESP等级：一级 | 考级考点：GESP Python 一级**


> **GESP 考点**：#16 变量控制turtle、#12 算术运算符 360/sides
> **文件**：`04_变量控制turtle_demo.py`
> **核心策略**：先踩坑（无变量改8处）→再给神器（变量改1处）→再踩坑（改sides忘改angle）→再给神器（360/sides自动算）——两次"踩坑→修复"循环，深刻理解变量的控制价值。
> **记忆钩子**："变量=遥控器，改sides改形状""改一处全变"

---

## GESP 知识映射

| GESP-1 考点 | 本关对应 | 身体锚点 |
|------------|---------|---------|
| #16 变量控制turtle | `size/sides/angle` 替代硬编码，改一行全部生效 | 遥控器——按一个键换一个台 |
| #12 算术运算符 | `angle=360/sides` 变量参与数学运算 | "你算不如Python算" |
| #6 赋值运算符 | `=` 是赋值动作，不是等于 | 盒子装纸条 |

---

## 教学目标

- 理解"无变量"vs"有变量"的核心区别：无变量改N处，有变量改1处
- 用 `size`/`sides`/`angle` 三个变量控制turtle画任意正多边形
- 掌握 `360/sides` 自动算角度，理解"改sides，angle自动对"
- 说出两条记忆钩子："变量=遥控器，改sides改形状""改一处全变"
- 能通过改变 `sides` 值画出三角形、正方形、五边形、六边形、八边形、十边形

---

## 课前准备清单

| 物品 | 用途 |
|------|------|
| 投影/大屏幕 + 学生电脑（Python+turtle） | 演示+上机 |
| `04_变量控制turtle_demo.py`（拷贝到学生机） | 分段演示 |
| 粉笔/白板笔（红蓝绿三色） | 板书关键字分色标注 |
| 两个遥控器（道具，可选） | 0-5min "变量=遥控器"引入 |

---

## 教学节奏（60分钟）

### 第一阶段：0-10分钟 —— 导入：改size=6的正方形→变六边形

#### 0-3分钟：快速复习 + 痛点唤醒

> 老师打开投影，展示无变量画正方形的代码：

```python
import turtle
t = turtle.Turtle()
t.forward(100); t.right(90)
t.forward(100); t.right(90)
t.forward(100); t.right(90)
t.forward(100); t.right(90)
```

> "同学们看——这是一个正方形。4条边，每个数字100出现几次？"
> 孩子回答："4次！"
>
> "那如果我要改成长度200——要改几个地方？"
> 孩子回答："4个forward里的100全改！"
>
> "如果还要把角度从90改成60呢？"
> 孩子回答："再改4个！共8处！"
>
> "**画100边形，改几处？**" → 沉默... "200处！"
>
> 板书大字：**无变量 → 改100次 vs 有变量 → 改1次**

#### 3-7分钟：引入变量概念——"盒子游戏"回忆

> "还记得第1关我们玩的盒子游戏吗？盒子标签叫什么？"
> → "变量名！"
> "盒子里装什么？"
> → "值！（数字/纸条）"
> "`=` 是什么意思？"
> → "装东西！不是等于！"

**老师拿起道具遥控器**：

> "今天变量有另一个外号——**遥控器**。没有遥控器时，每换一个台你要跑到电视前用手按。有了遥控器——沙发上按一个键，频道就变了！"
>
> "**`size`就是遥控器上的'音量键'——按100，边长就是100；按200，边长就是200。你只动一下手指头，所有用到size的地方全部自动更新！**"

**板书大字**：
> **"变量=遥控器——改一处，全部生效！"**

#### 7-10分钟：改size→从正方形到六边形

> "好，现在我们的遥控器 `size=100` 是正方形边长。如果我想画一个边长50的正方形——改几处？"
> 孩子回答："1处！改size=50！"

**演示**（快速运行）：

```python
size = 100   # ← 改成 50，全部缩小！
sides = 4
angle = 90
for i in range(sides):
    t.forward(size)
    t.right(angle)
```

> "改 `size=50` → 4个forward全部用50！改1处等于改了4处！这就是变量的魔法！"

**过渡**：

> "那如果我想把正方形变成六边形呢？只改size不行了——还要改什么？"
> 孩子回答："边数！转的角度！"
> → "好！接下来我们正式学习用三个变量控制turtle！"

---

### 第二阶段：10-30分钟 —— 知识点精讲

#### 10-15分钟：size / sides / angle 三变量画多边形

**老师板书三个变量的作用**：

```
size  = 100    # 边长    → 控制图形大小
sides = 4      # 边数    → 控制图形边数
angle = 90     # 转角    → 控制每次转多少度
```

**逐行拆解**（指着每一行）：
- `size = 100` → 盒子标签size，里面装100
- `sides = 4` → 盒子标签sides，里面装4
- `angle = 90` → 盒子标签angle，里面装90
- `for i in range(sides):` → range里写变量！Python去盒子里找4，循环4次
- `t.forward(size)` → forward里也是变量！每次去盒子里拿数字
- `t.right(angle)` → right里也是变量！每次去盒子里拿角度

**关键对比——并排板书**：

```
┌── 无变量 ──────────────────┐    ┌── 有变量 ──────────────────┐
│ t.forward(100)  ← 要改4处  │    │ size = 100                  │
│ t.right(90)     ← 要改4处  │    │ sides = 4                   │
│ 改一处→要改8处！           │    │ angle = 90                  │
│                           │    │ for i in range(sides):      │
│                           │    │     t.forward(size)  ←不改  │
│                           │    │     t.right(angle)   ←不改  │
│                           │    │ 改一处→真的只改一处！         │
└───────────────────────────┘    └──────────────────────────────┘
```

> **核心发现**："数字只出现一次，在变量里。想改？只改变量那一行！其余代码全用变量名，不用管。"
>
> **全班齐读**："改——一——处——，全——部——生——效——！"

#### 15-22分钟：360/sides 自动算角度（踩坑→修复）

**踩坑第一步**：老师把 `sides=4` 改成 `sides=6`，但不改 `angle`。

```python
size = 100
sides = 6          # 改成六边形
angle = 90         # ← 忘了改！还是90°
```

运行——图形不对！收不了口！

> "为什么不对？" → "角度不对！六边形转角不是90°！"
> "六边形转角是多少？" → "360÷6=60°！"
> "每次都要手算，有点烦。有没有办法让Python自己算？"

**救星登场**：

```python
size = 100
sides = 6
angle = 360 / sides    # ← 让Python自动算！360÷6=60°
```

运行——完美六边形！

> "现在把 `sides=6` 改成 `sides=8`，angle改不改？"
> 孩子回答："不用改！Python自己算！360÷8=45°！"

**身体锚点——"360/sides操"**：

> "全班起立！老师报边数，你们报角度！"
> "4条边？" → "90度！"
> "6条边？" → "60度！"
> "8条边？" → "45度！"
> "10条边？" → "36度！"
> "3条边？" → "120度！"
> "100条边？" → "3.6度！越来越接近圆！"
>
> "坐下！你算得再快，也没Python快——**360/sides，不管sides是几，角度自动对！**"

**记忆钩子**——全班齐读：
> **"360/sides——不管sides是几，角度自动对！"**

#### 22-27分钟：变量=遥控器深度理解——改sides改形状

**老师打开 `04_变量控制turtle_demo.py`，连续演示不同sides值**：

| sides | 图形 | 角度自动算 |
|:-----:|:----:|:----------:|
| 3 | 三角形 | 120° |
| 4 | 正方形 | 90° |
| 5 | 五边形 | 72° |
| 6 | 六边形 | 60° |
| 8 | 八边形 | 45° |
| 10 | 十边形 | 36° |

> "同一段代码——只改 `sides` 这一个数字，图形全变！3变三角形、4变正方形、5变五边形、6变六边形、8变八边形、10变十边形！"

**关键三连问**：

1. "改 `sides=6` 画什么？" → "六边形！"
2. "angle需要改吗？" → "不用！360/sides自动算！"
3. "同时改 `size=50, sides=8` 画什么？" → "边长50的八边形！"

**记忆钩子**——全班齐读：
> **"变量=遥控器——改sides改形状！"**

#### 27-30分钟：小结+过渡

**老师板书三句话**：

```
变量控制turtle 三句话：
① 改一处，全部生效！        ← size/sides/angle替代硬编码
② 360/sides，角度自动对！   ← 改sides不用改angle
③ 变量=遥控器，改sides改形状！← 同一代码不同结果
```

**过渡话术**：

> "刚才我们一直在改变量看效果。现在轮到你们——**自己动手**，用变量画多边形！老师出三关，一关比一关难！"

---

### 第三阶段：30-40分钟 —— 演示：同一代码不同结果

#### 30-33分钟：sides=4 正方形演示

> "先看一个基础版——sides=4画正方形。"

老师运行代码（sides=4）：
```python
size = 100
sides = 4
angle = 360 / sides
for i in range(sides):
    t.forward(size)
    t.right(angle)
```

> "sides=4 → 循环4次 → 4条边 → 正方形！注意angle=360/4=90°是自动算的。"

#### 33-36分钟：sides=8 八边形演示

> "现在只改一个数字——把sides=4改成sides=8。"

**改之前让孩子预测**："改sides=8会变成什么？"
→ 孩子答："八边形！"

运行验证：
```python
size = 80
sides = 8
angle = 360 / sides    # ← 没改！自动算成45°
for i in range(sides):
    t.forward(size)
    t.right(angle)
```

> "看到了吗？只改了一个数字 `sides=8`，图形从正方形变成了八边形！angle没改但Python自动用360÷8=45°。这就是**同一代码不同结果**——变量的魔力！"

#### 36-40分钟：sides=10 + sides=3 对比演示

> "再改sides=10——变成什么？"
→ "十边形！比八边形更接近圆形！"

> "改sides=3呢？"
→ "三角形！"

**并排总结图**（板书）：

```
     sides=3 ──→ 三角形
     sides=4 ──→ 正方形
     sides=5 ──→ 五边形
     sides=6 ──→ 六边形
     sides=8 ──→ 八边形
     sides=10──→ 十边形
     sides=100→ 接近圆形！
     ↑
  只改这一个数字！！！
```

> **全班齐读**："同一段代码——只改一个数字sides，画N条边就是N边形！"

---

### 第四阶段：40-55分钟 —— 实操三关

> "现在轮到你们了！打开电脑，新建Python文件，完成三关任务。每完成一关举手示意，老师过来看。"

#### 40-45分钟：实操①——补全变量画五边形

**题目**：补全下面的代码，画一个正五边形。

```python
import turtle
t = turtle.Turtle()
t.shape("turtle")
t.speed(5)

size = ______        # 填空：填边长（建议80~120）
sides = ______       # 填空：填边数（五边形是几？）
angle = ______       # 填空：用360/sides让Python自动算

t.color("blue")
for i in range(sides):
    t.forward(size)
    t.right(angle)

turtle.done()
```

> **提示**："五边形有几条边？→ sides填几？→ 角度不用手算，用 `360/sides` 让Python算！"

**巡视重点**：
- 是否用 `360/sides` 而不是手写72°
- sides是否填了5
- 缩进是否正确

**参考答案**：
```python
size = 100
sides = 5
angle = 360 / sides
```

#### 45-50分钟：实操②——改sides画不同形状

**题目**：在实操①的基础上，只修改一行代码，画出以下图形：

1. 把五边形改成六边形（改1个数字）
2. 再把六边形改成八边形（再改1个数字）
3. 最后改成三角形（还是改1个数字）

> "每改一次，运行一次，看图形变化！注意——你每次只改 **sides** 这一个数字，**angle不要动**！"

**引导提问**：
> "为什么angle不用动？"
> → "因为 `angle = 360 / sides` 会自动算！sides变了，angle自动跟着变！"

**巡视重点**：确保孩子只改了sides，没有手动修改angle。

#### 50-55分钟：实操③——用变量画正十边形

**题目**：自己写完整代码，用变量控制turtle画一个**正十边形**。

要求：
- 边长自己定
- 用变量 `size`、`sides`、`angle`
- `angle` 必须用 `360/sides`
- 颜色自定义

**附加挑战（给速度快的孩子）**：
> "把sides改成20，看看像什么？改成50呢？改成100呢？"
> → "边数越多越接近圆形！"

**参考代码**：
```python
import turtle
t = turtle.Turtle()
t.shape("turtle")
t.speed(5)

size = 60
sides = 10
angle = 360 / sides

t.color("purple")
for i in range(sides):
    t.forward(size)
    t.right(angle)

turtle.done()
```

---

### 第五阶段：55-60分钟 —— 小测 + 总结

#### 55-57分钟：快速小测

**口答小测（老师提问，全班齐答或举手回答）**：

| 问题 | 答案 |
|:----|:-----|
| 改 `sides=6` 会画什么？ | 正六边形！ |
| 改 `sides=3` 呢？ | 正三角形！ |
| 改 `sides=5` 呢？ | 正五边形！ |
| 只用变量画多边形，改大小时改哪个变量？ | `size`！ |
| 改形状（边数）时改哪个变量？ | `sides`！ |
| 改sides后angle要手动改吗？ | 不用！`360/sides`自动算！ |
| 用变量画多边形比硬编码好在哪？ | 改一处，全部生效！ |

**判断题——举手打勾/叉**：

1. "改 `sides=8` 画八边形，angle是8°。" → **叉！** 是360÷8=45°
2. "`angle = 360 / sides` 写在代码里，sides变了angle自动变。" → **勾！**
3. "不用变量画正十边形，要改20处数字。" → **勾！** 10个forward+10个right
4. "用变量画正十边形，改sides=10就行。" → **勾！**
5. "`size=size+3` 数学上是对的。" → **叉！** 编程里是赋值，不是等于

#### 57-59分钟：总结 + 口诀齐读

**板书三句口诀**（全班起立，齐读三遍）：

> **"改一处，全部生效！"**
> **"360/sides——不管sides是几，角度自动对！"**
> **"变量=遥控器，改sides改形状！"**

**口答收尾三问**：

| 问题 | 标准答案 |
|:----|:---------|
| 用变量控制turtle画多边形，核心好处是什么？ | "改一处，全部生效！只改变量，不改代码！" |
| `360/sides` 是干什么的？ | "自动算角度！不用手算！改sides自动跟！" |
| 变量像什么？ | "遥控器！改sides改形状！" |

#### 59-60分钟：下节预告

> "今天我们用变量控制了turtle——size控制大小，sides控制边数，360/sides自动算角度。但变量能做的事远不止这些！"
>
> "变量还有一个更神奇的能力——**它能自己'变'自己**！`size = size + 3`——每次画完边长自动变大，画出螺旋！下一节课我们一起揭秘变量更新的魔法！"

---

## 课堂练习答案

| 练习 | 答案 |
|:----|:-----|
| 实操① 补全画五边形 | `size=80~120` / `sides=5` / `angle=360/sides` |
| 实操② 改sides画不同形状 | sides=6→六边形, sides=8→八边形, sides=3→三角形 |
| 实操③ 用变量画正十边形 | `sides=10`, `angle=360/sides`, size自定 |

---

## 易错点

| 错误 | 原因 | 纠正 |
|:----|:-----|:-----|
| 改sides忘改angle → 画歪 | 手写固定angle值 | 用 `angle=360/sides`——"你算不如Python算" |
| `t.forward("size")` 加引号 | 以为变量名要加引号 | 加引号=文字，变量名裸写=去盒子里拿值 |
| 手写 `angle=72` 而不是 `360/sides` | 自己算好了写死 | 强调"让Python算，不是为了省事，是为了sides变了angle自动跟" |
| 变量未定义 → NameError | 忘了先声明变量 | "先造盒子再用！先 `size=100` 再 `forward(size)`" |
| 循环缩进错误 | 忘了for后面的代码要缩进 | "看到冒号就缩进——for行末尾有冒号" |
| `sides` 写成 `side`（少s） | 拼写错误 | "边数sides有s——复数！" |

---

## 板书设计

```
┌─────────────────────────────────────────────────────────┐
│   第07节  变量控制turtle                            │
│                                                          │
│  ★ 核心口诀                                              │
│  ① 改一处，全部生效！                                     │
│  ② 360/sides——不管sides是几，角度自动对！                │
│  ③ 变量=遥控器，改sides改形状！                          │
│                                                          │
│  无变量 vs 有变量                                         │
│  ┌─────────────────┐  ┌─────────────────┐               │
│  │ forward(100)    │  │ size = 100       │               │
│  │ forward(100)    │  │ sides = 4        │               │
│  │ 改4处！共8处！！ │  │ angle = 360/sides│               │
│  └─────────────────┘  │ for i in range():│               │
│                        │     forward(size)│               │
│                        │     right(angle) │               │
│                        │ 改1处！         │               │
│                        └─────────────────┘               │
│                                                          │
│  sides 控制形状：                                         │
│   3→△  4→□  5→五  6→六  8→八  10→十  100→○             │
│                                                          │
│  记忆钩子："变量=遥控器"                                  │
│  ───────────────────────────────────────                 │
│  今天：变量指挥小乌龟                                     │
│  下节：变量自己"变"起来（size=size+3螺旋）                │
└──────────────────────────────────────────────────────────┘
```

---

## 教学节奏总览

| 时间 | 阶段 | 核心 | 身体锚点 | 记忆钩子 |
|:---:|:----|:----|:--------|:--------|
| 0-10min | 导入 | 无变量痛点→变量=遥控器→改size变大小 | 遥控器道具 | "变量=遥控器" |
| 10-15min | 三变量精讲 | size/sides/angle逐行拆解→并排对比 | 指认三个盒子 | "改一处全部生效" |
| 15-22min | 360/sides | 改sides=6踩坑→360/sides修复→改sides不用改angle | 全班"360/sides操" | "360/sides角度自动对" |
| 22-30min | 变量=遥控器 | 连续演示sides=3/4/5/6/8/10/100→同一代码不同结果 | 三连问 | "改sides改形状" |
| 30-40min | 演示 | sides=4正方形→sides=8八边形→sides=3三角形 | 改前预测 | "同一代码不同结果" |
| 40-55min | 实操三关 | ①补全画五边形②改sides不同形状③画正十边形 | 独立动手 | "sides一变全变" |
| 55-60min | 小测+总结 | 7问+5判+口诀三遍+下节预告 | 全班齐读 | 三句口诀收尾 |

---

## GESP衔接

本关是 GESP 一级"变量与赋值"模块中 **#16 变量控制turtle** 的关键教学关。

**本关完成的认知飞跃**：
- 理解变量替代硬编码的核心价值——改一处全部生效
- 掌握三个核心变量（size/sides/angle）各自控制什么
- 理解 `360/sides` 让角度随边数自动变化
- 建立"变量=遥控器"的身体直觉

**后续衔接**：
- 第2关后半程（变量更新）——`size=size+3` 让变量真正"变"起来
- GESP二级——`+=` `-=` `*=` 简写
- 第5关（创意挑战）——用变量控制turtle做创意画

**课后才能回答的问题**：
> "不用变量画100边形要改几处？用变量呢？"
> → 无变量200处 vs 有变量1处（改sides=100）

---

## 教员备忘

- **最关键5分钟**：15-20min "踩坑→修复"环节。先让孩子看到"sides改6但angle还是90"的错误结果，再引入360/sides，印象深十倍。
- **第二关键环节**：22-27min 连续sides=3/4/5/6/8/10演示，只改一个数字让图形完全不同。"同一代码不同结果"的视觉冲击比任何说教都强。
- **最容易翻车**：①孩子手写 `angle=72` 而不是 `360/sides` → 实操巡视重点；②实操②中孩子改sides的同时也手动改了angle → 强调"只改sides！angle不动！"；③时间不够 → 实操③可转为课后作业。
- **时间弹性**：演示阶段超时 → 合并sides=3和sides=10演示，省2分钟；实操阶段超时 → 实操③转为课后练习。
- **与第07节衔接**：开头用"盒子游戏"回忆快速唤醒变量概念，节省5分钟。
- **过渡钩子**：收尾时预告"变量还能自己变自己"——`size=size+3` 画螺旋，为下一节课埋伏笔。
