# 第1阶段·第05节教案 —— 自由创作 + 注释
> **GESP等级：一级 | 考级考点：GESP Python 一级**


| 项目 | 内容 |
|------|------|
| **课程名称** | 自由创作 + 注释 |
| **适用对象** | 零基础编程启蒙（小学高年级 / 初中低年级） |
| **课时** | 60 分钟 |
| **核心概念** | 注释、代码规划、综合运用 turtle 全部命令 |
| **GESP 考点** | #1 顺序结构 · #2 坐标系 · #3 循环 · #4 颜色 · #5 填充 · #6 自定义功能 · #注释 |

---

## 一、教学目标

### 知识与技能
1. 理解**单行注释**（`#`）的语法与作用 —— "电脑跳过，人看"。
2. 理解**多行注释**（`''' '''` 或 `""" """`）的用法。
3. 学会**用注释规划代码**：先写伪代码注释，再填充真实代码。
4. 综合运用前 5 节学过的全部 turtle 命令绘制复杂图形（房子、花园、自由创作）。

### 过程与方法
- 通过"先注释规划→再写代码"的演示，建立**程序设计思维**（设计先行，编码在后）。
- 三个练习 **逐步撤脚手架**：半填空 → 半开放 → 全开放，梯度递进。

### 情感态度与价值观
- 让学生感受"当导演"的掌控感 —— 乌龟演员完全听你指挥。
- 鼓励个性化表达，每个学生的作品都是独一无二的。
- 培养代码注释的好习惯，为后续团队协作打下基础。

---

## 二、教学重点与难点

| 类型 | 内容 |
|------|------|
| **重点** | `#` 单行注释的语法与作用；用注释做代码规划；综合调用 turtle 命令 |
| **难点** | 理解"注释是给人看的，不是给电脑执行的"；从规划到代码的映射 |

---

## 三、教学准备

- 教师机 + 学生机，均已安装 Python + IDLE（或 Thonny / VS Code）
- 投影 / 大屏
- **成品画示例**：一幅用 turtle 画的房子（方形墙 + 三角形屋顶 + 圆形窗户 + 花园点缀）
- 练习文件（教师课前准备）：
  - `练习1_半填空_画房子.py`
  - `练习2_半开放_画花园.py`
  - `练习3_全开放_自由创作.py`
- 评分贴纸 / 小奖品（互评环节激励）

---

## 四、教学过程（60 分钟）

### 第 1 段：导入 —— 展示成品画（10:00）

| 时间 | 环节 | 教师活动 | 学生活动 |
|------|------|----------|----------|
| 0:00-2:00 | **开场** | 展示一幅用 turtle 画的精美房子（带花园、太阳、云朵）。<br>提问："前 5 节我们学了前进、转弯、画圆、上色……如果把这些命令全组合起来，能画出什么？" | 观察，自由回答 |
| 2:00-5:00 | **设悬念** | "今天这节课，**你是导演，乌龟演员听你指挥！** 你想让它画什么它就画什么。"<br>展示本节课的三幅目标作品：①房子 ②花园 ③自由创作 | 激起兴趣，期待 |
| 5:00-8:00 | **引出注释** | 在大屏上展示一段"只有代码、没有注释"的 turtle 程序，让学生猜每行在干什么。<br>再展示**加了注释**的同一段代码，对比差异。<br>提问："多了什么？这些 `#` 后面的文字是干嘛的？" | 对比发现"注释"的存在 |
| 8:00-10:00 | **揭示课题** | "今天我们就来学**注释**——给代码写备注。然后用注释做规划，画出你自己的大作！" | 明确学习目标 |

---

### 第 2 段：知识点讲授（20:00）

| 时间 | 环节 | 教师活动 | 学生活动 |
|------|------|----------|----------|
| 10:00-13:00 | **① 单行注释 `#`** | 语法演示：`# 这是一条注释`<br>关键句：**"电脑看到 `#`，直接跳过这一行后面的内容——注释是写给人看的。"**<br>演示：<br>```python<br>t.forward(100)  # 向前走100步<br># t.left(90)    # 这行被注释了，不会执行<br>t.right(90)<br>```<br>对比运行结果，验证 `#` 后的代码不会执行。 | 跟着老师在 IDLE 中逐行运行，观察效果 |
| 13:00-15:00 | **② 多行注释 `''' '''`** | "如果注释很长，一行写不下怎么办？"<br>演示多行注释：<br>```python<br>'''<br>这段代码的功能：<br>1. 画一个正方形<br>2. 填充红色<br>3. 移动到下一个位置<br>'''<br>```<br>说明：三个单引号（或双引号）包裹的内容，无论多少行，电脑全部跳过。 | 理解多行注释的适用场景 |
| 15:00-18:00 | **③ 用注释规划代码** | **核心方法：先写注释，再写代码。**<br>演示一个"画房子"的规划过程：<br>```python<br>import turtle as t<br><br># === 画房子 ===<br># 1. 设置画布和画笔<br>t.speed(5)<br>t.pensize(3)<br><br># 2. 画墙壁（正方形）<br>t.pencolor("brown")<br>for i in range(4):<br>    t.forward(150)<br>    t.left(90)<br><br># 3. 画屋顶（三角形）<br>t.pencolor("red")<br>t.fillcolor("red")<br>t.begin_fill()<br>for i in range(3):<br>    t.forward(150)<br>    t.left(120)<br>t.end_fill()<br><br># 4. 画窗户（圆形）<br>...<br>```<br>强调："先写 `#` 规划，就像盖房子先画图纸。" | 观察"注释规划→代码实现"的完整过程 |
| 18:00-20:00 | **④ 综合示例：房子 = 方形 + 三角形 + 圆** | 完整运行一遍"画房子"程序，展示最终效果。<br>逐行对照注释解释每段代码的作用，强化"注释帮助理解代码"的概念。 | 在脑中建立"图形 = 基本形状组合"的思维 |

---

### 第 3 段：演示 —— 从注释规划到代码实现（10:00）

| 时间 | 环节 | 教师活动 | 学生活动 |
|------|------|----------|----------|
| 20:00-25:00 | **边写边讲** | 在 IDLE 中**从头开始**写一个"画房子"程序：<br>**第一步**：先写注释规划<br>```python<br># 画一座小房子<br># 步骤：<br># 1. 画正方形墙壁<br># 2. 画三角形屋顶（红色填充）<br># 3. 画圆形窗户（蓝色）<br># 4. 画长方形门（棕色）<br>```<br>**第二步**：在每条注释下方写对应代码<br>教师边说边写，让学生看到"先想后做"的过程。 | 跟随教师思路，口述下一步代码 |
| 25:00-28:00 | **运行验证** | 运行程序，房子逐部分出现。 | 观察运行过程，验证规划是否正确 |
| 28:00-30:00 | **总结演示要点** | "先写 `#` 规划——再写代码。注释就是你的**设计图纸**。"<br>展示最终作品，让学生感受成就感。 | 内化"规划先行"的程序设计思想 |

---

### 第 4 段：实操练习（25:00）

三个练习，**逐步撤脚手架**，从半填空到全开放。

---

#### 练习 1：半填空 —— 画房子（10:00）

**目标**：在给定的注释框架中，补充缺失的代码。

**文件**：`练习1_半填空_画房子.py`

**内容**：

```python
import turtle as t

# 设置画笔
t.speed(5)
t.pensize(3)

# 1. 画墙壁（正方形）
t.pencolor("blue")
# 请补充：用循环画一个边长120的正方形
# 你的代码写在这里：
for i in range(____):
    t.forward(____)
    t.left(____)

# 2. 画屋顶（三角形，填充红色）
t.fillcolor("red")
t.begin_fill()
# 请补充：用循环画一个等边三角形，边长120
# 你的代码写在这里：
for i in range(____):
    t.forward(____)
    t.left(____)
t.end_fill()

# 3. 画窗户（圆形，填充黄色）
t.penup()
t.goto(30, ____)   # 移动到窗户位置
t.pendown()
t.fillcolor("yellow")
t.begin_fill()
# 请补充：画一个半径为20的圆
# 你的代码写在这里：
t.circle(____)
t.end_fill()

# 隐藏画笔
t.hideturtle()
t.done()
```

**教师巡视重点**：
- 学生是否理解 `range(4)` 和 `range(3)` 的含义
- `left(90)` vs `left(120)` 是否用对
- 坐标 `goto` 的参数是否理解

**差异化支持**：
- 基础弱的学生：提示"正方形4条边、三角形3条边"
- 基础好的学生：鼓励添加更多细节（烟囱、门、装饰）

---

#### 练习 2：半开放 —— 画花园（8:00）

**目标**：只给注释规划，学生自主编写全部代码。

**文件**：`练习2_半开放_画花园.py`

**内容**（只给注释框架，不给代码）：

```python
import turtle as t

# ===== 我的花园 =====
# 设置画笔速度


# 1. 画太阳（黄色圆形，在左上角）
# 提示：先抬笔 goto 定位，再落笔画圆填充


# 2. 画花朵（红色花瓣 + 绿色茎）
# 提示：可以用 circle 画花瓣，或者用循环画花瓣


# 3. 画草地（绿色直线或折线）
# 提示：用循环画一排草


# 4. 画围栏（棕色长方形）
# 提示：画一个长方形，可以重复几次


# 隐藏画笔，结束
t.hideturtle()
t.done()
```

**教师引导**：
- "看看注释，第一步要做什么？……第二步呢？"
- "不会写的命令可以翻看前几节的笔记。"
- 鼓励学生自由发挥，不必和老师一模一样。

**差异化支持**：
- 基础弱的学生：给出"画太阳"的代码片段作为参考
- 基础好的学生：鼓励画多种花朵、蝴蝶、云朵

---

#### 练习 3：全开放 —— 自由创作（7:00）

**目标**：完全自主选题，从注释规划到代码实现全部自己完成。

**文件**：`练习3_全开放_自由创作.py`

**只给开头**：

```python
import turtle as t

t.speed(5)

# 我的作品：_______________
# 我的规划（先写注释，再写代码）：
# 1.
# 2.
# 3.
# 4.

# === 开始写代码 ===


t.hideturtle()
t.done()
```

**教师引导**：
- "想画什么都可以！机器人、小鱼、星星、蛋糕……"
- "先在本子上（或用注释）列计划，再写代码。"
- "不会画的图形，想想它由什么基本形状组成。"

**温馨提示**：
- 时间不够可以带回家继续完成
- 鼓励学生保存好自己的作品

---

### 第 5 段：互评与总结（5:00）

| 时间 | 环节 | 教师活动 | 学生活动 |
|------|------|----------|----------|
| 55:00-57:00 | **作品互评** | 挑选 3-4 位同学上台展示作品。<br>引导提问：<br>① "这幅画画了什么？"<br>② "你用了哪几条 turtle 命令？"<br>③ "你用了注释吗？注释写了什么？"<br>其他同学用贴纸投票"最喜欢的作品"。 | 展示作品，回答问题<br>同学之间互相欣赏 |
| 57:00-59:00 | **知识回顾** | 带领全班回顾：<br>① `#` 是做什么的？（电脑跳过，人看）<br>② 为什么要写注释？（规划代码、帮助理解）<br>③ 今天用了哪些 turtle 命令？（forward, left, right, circle, goto, penup, pendown, pencolor, fillcolor, begin_fill, end_fill……） | 口头回答，巩固记忆 |
| 59:00-60:00 | **总结升华** | **记忆钩子**：<br>"**`#` = 给代码写备注，电脑跳过它**"<br>"**`#` 是写给自己看的便签**"<br><br>预告下一节课："乌龟还能做更有趣的事——画会动的画！" | 记住钩子，期待下一节 |

---

## 五、板书设计

```
┌─────────────────────────────────────┐
│     第05节 · 自由创作 + 注释          │
│                                     │
│  # 单行注释    ''' 多行注释 '''      │
│  电脑跳过，人看                       │
│                                     │
│  先写规划（注释）→ 再写代码          │
│                                     │
│  房子 = 方形 + 三角形 + 圆           │
│  花园 = 太阳 + 花 + 草地 + 围栏     │
│                                     │
│  记忆钩子：                          │
│  # = 给代码写备注，电脑跳过它         │
│  # = 写给自己看的便签                │
└─────────────────────────────────────┘
```

---

## 六、教学反思（教师课后填写）

| 维度 | 记录 |
|------|------|
| 时间把控 | 各环节是否按计划完成？哪一段超时/不足？ |
| 学生掌握 | 多数学生是否理解注释的作用？能否独立完成练习2？ |
| 常见错误 | 学生容易犯什么错？（如：忘了 `#`、缩进不对、坐标算错） |
| 改进方向 | 下一轮教学可以在哪些环节优化？ |

---

## 七、课后延伸

1. **挑战任务**：用今天学的知识，画一幅"我的学校"或"我的家"。
2. **笔记整理**：在笔记本上写下 `#` 注释的两种形式（单行、多行）及自己的理解。
3. **预习提示**：下一节将学习 turtle 的动画效果 —— `t.speed(0)` 最快、`t.tracer()` 控制刷新。

---

## 八、附录：参考代码

### 练习1 完整参考代码

```python
import turtle as t

t.speed(5)
t.pensize(3)

# 1. 画墙壁（正方形）
t.pencolor("blue")
for i in range(4):
    t.forward(120)
    t.left(90)

# 2. 画屋顶（三角形，填充红色）
t.fillcolor("red")
t.begin_fill()
for i in range(3):
    t.forward(120)
    t.left(120)
t.end_fill()

# 3. 画窗户（圆形，填充黄色）
t.penup()
t.goto(30, 30)
t.pendown()
t.fillcolor("yellow")
t.begin_fill()
t.circle(20)
t.end_fill()

t.hideturtle()
t.done()
```

### 练习2 参考思路（不唯一）

```python
import turtle as t

t.speed(5)
t.pensize(2)

# 1. 太阳
t.penup()
t.goto(-200, 150)
t.pendown()
t.fillcolor("yellow")
t.begin_fill()
t.circle(40)
t.end_fill()

# 2. 花朵（简化为彩色圆形花心 + 花瓣）
t.penup()
t.goto(50, -50)
t.pendown()
t.fillcolor("pink")
t.begin_fill()
t.circle(25)
t.end_fill()
# 茎
t.pencolor("green")
t.right(90)
t.forward(80)

# 3. 草地
t.penup()
t.goto(-250, -100)
t.pendown()
t.pencolor("green")
for i in range(10):
    t.left(60)
    t.forward(15)
    t.backward(15)
    t.right(60)
    t.penup()
    t.forward(30)
    t.pendown()

t.hideturtle()
t.done()
```
