> **GESP等级：二级 | 考级考点：GESP Python 二级**

# 第05节 ASCII与编码 —— 教案

> 面向 7-10 岁少儿 · 时长 60 分钟 · 五段式教学

---

## 一、课程概览

| 项目 | 内容 |
|------|------|
| 课程名称 | ASCII 与编码 —— "文字穿数字外衣" |
| 总时长 | 60 分钟 |
| 核心概念 | 字符编码、ASCII 表、ord() / chr() 函数、大小写转换原理 |
| 记忆口诀 | "零48，A65，小a大A差32" |
| 身体锚点 | 手指比数字 = 编码；张嘴说字母 = 字符；32 = 弯曲三指再比二 |

### 教学目标

1. **知识与技能**
   - 理解计算机用"数字编号"来存储文字
   - 知道 ASCII 编码表范围 0-127
   - 记住三个关键编码：'0'=48、'A'=65、'a'=97
   - 会用 `ord()` 获取字符编码，用 `chr()` 将编码转回字符
   - 理解小写字母 = 大写字母 + 32 的规律
   - 知道空格编码是 32

2. **过程与方法**
   - 通过故事比喻理解抽象概念
   - 通过身体动作强化记忆
   - 通过 turtle 可视化观察编码规律
   - 通过游戏化练习巩固

3. **情感态度**
   - 消除对"编码"的神秘感
   - 感受计算机"用数字说话"的逻辑之美
   - 培养探索规律的兴趣

### 教学重点

- 字符与编码一一对应的关系（ord / chr 互转）
- 三个关键编码的记忆（48 / 65 / 97）

### 教学难点

- 理解"字符在计算机里其实都是数字"
- 区分 ord() 和 chr() 的方向（"变过去"和"变回来"）

### 教学准备

- 电脑 / 投影 / Python IDLE 或 Thonny
- Turtle 画布（支持 write 函数）
- 提前打印 ASCII 表小抄（0-127 对照图）
- 准备小奖品（贴纸等）

---

## 二、教学流程（五段式）

---

### 第一段：导入 —— "文字的隐身衣"（10 分钟）

#### 1. 情境故事（5 分钟）

**老师开场白：**

"小朋友们，今天老师要讲一个'间谍故事'。

很久很久以前，有两台计算机想偷偷传递信息。但是它们中间有一条很长的线，这条线只能传递——猜猜能传什么？

（停顿，让学生猜）

对啦！这条线只能传'有电'和'没电'，也就是 0 和 1。

那问题来了：如果只能传 0 和 1，怎么把'Hello'传过去呢？

第一台计算机说：'我有个好主意！我给每个字母都编个号！A 是 1 号，B 是 2 号……这样我不用传字母，只传数字就行了！'

另一台说：'收到！那我收到数字就查表，把数字翻译回字母！'

这就是计算机存储文字的秘密——**给每个字符穿上一件'数字外衣'！**"

#### 2. 身体锚点引入（3 分钟）

**老师带领全班做动作：**

"来，跟老师一起做——
（举起右手，伸出一根手指）'1 号'→ 说'A'
（举起右手，伸出两根手指）'2 号'→ 说'B'
（举起右手，伸出三根手指）'3 号'→ 说'C'

好厉害！你们刚才就在做'编码'和'解码'的事！

- 手指比数字 = **编码**（把字母变成数字）
- 看到数字说字母 = **解码**（把数字变回字母）"

#### 3. 过渡提问（2 分钟）

"那老师考考你们：如果我们要写'Hello'，需要哪几个数字？
（学生可能会猜 H=8, e=5, l=12, l=12, o=15）

嗯，猜得不错！但是……计算机用的编号和我们用的可不一样哦。
计算机有一个'秘密编码表'，叫做 **ASCII**（读作'阿斯克'）。

今天我们就来破解这张表！"

**【导入结束 · 用时 10 分钟】**

---

### 第二段：知识点讲解 —— "破解 ASCII 密码本"（20 分钟）

---

#### 知识块 1：计算机怎么存文字？（4 分钟）

**核心一句话：**
> "计算机不认识字母，只认识数字。每个字符都对应一个唯一的数字——这就是**编码**。"

**用板书画图：**

```
字母 A  ----[编码]---->  数字 65  ----[存进电脑]---->  01000001
字母 a  ----[编码]---->  数字 97  ----[存进电脑]---->  01100001
```

"就像每个同学都有学号一样：
- '张小明' → 学号 01
- '李小红' → 学号 02

计算机也用'学号'来记住每个字符。"

**举例互动：**

老师问："'A'的学号是多少？"（答案在下一个知识块揭晓）

---

#### 知识块 2：ASCII 编码表 —— 世界通用密码本（5 分钟）

**展示 ASCII 表（板书或投影）：**

```
ASCII 表（0-127）—— 共 128 个字符
━━━━━━━━━━━━━━━━━━━━━━━━━━
0-31   控制字符（响铃、换行等）—— 看不见的指令
32     空格（' '）—— 最重要的"空白"
33-47  标点符号（! " # $ % & ' ( ) * + , - . /）
48-57  数字 0-9  ← 注意'0'不是 0！
58-64  更多标点
65-90  大写字母 A-Z
91-96  更多标点
97-122 小写字母 a-z
123-127 更多标点 + 删除键
```

**重点强调规律：**

"看！ASCII 表就像一栋 128 层的'字符公寓'：
- 1 楼（0-31）：住的都是'隐形人'——控制指令
- **2 楼（32）**：住着空格——'看不见的空白居民'
- **3 楼（33-47）**：住着标点符号家族
- **4 楼（48-57）**：住着数字 0-9 —— 它们不是数值，是'字符'！
- **5 楼（58-64）**：更多标点
- **6 楼（65-90）**：住着大写字母 A-Z  —— 26 个兄弟
- **7 楼（91-96）**：标点
- **8 楼（97-122）**：住着小写字母 a-z —— 也是 26 个兄弟
- **9 楼（123-127）**：最后的标点 + 删除键"

---

#### 知识块 3："三大天王"—— 必须记住的 3 个编码（5 分钟）

**记忆钩子 + 身体锚点组合教学：**

##### 第一位：'0' = 48

**口诀："四八三十二，零是 48"**

**怎么记？**
- 拆解："四八"就是 4×8=32——不对！是 48！
- 视觉：数字 0 像一个大圆圈，48 里面有个"4"和"8"
- 身体锚点：四根手指（4）+ 八根手指（8）= 12 根？不够！
  实际动作：左手比 4（四根手指），右手比 8（八根手指），一起喊"48！"

**老师问："字符'0'的编码是多少？"**
全班答："四八三十二——零是 48！"

##### 第二位：'A' = 65

**口诀："A 是老大 65 分"**

**怎么记？**
- A 是字母老大，考试得了 65 分（及格了！）
- 视觉：大写的 A 像一座金字塔，65 是它的高度（夸张）
- 身体锚点：双手举过头顶比一个"A"的形状，喊"65！"

**老师问："大写 A 的编码是多少？"**
全班答："A 是老大 65 分！"

##### 第三位：'a' = 97

**口诀："小 a 比大 A 大 32"**

**怎么记？**
- 小写 a 比大写 A 多了'32'——为什么是 32？
- 因为小写字母区在大写字母区的'下面'，隔了 32 层楼！
- 65 + 32 = 97，完美！

**身体锚点：**
- 右手比大 A（举高），左手比小 a（放低一点）
- 两手之间的距离 = 32！
- 弯曲三根手指（3）再比二（2）= 32！

**老师问："小 a 的编码怎么算？"**
全班答："65 + 32 = 97！"

##### 合体口诀（全班齐声）

> **"零 48，A 65，小 a 大 A 差 32！"**

---

#### 知识块 4：ord() 和 chr() —— 编码穿梭机（3 分钟）

**用"变变变"游戏引入：**

**ord() —— "变过去"（字符 → 编码）**
> "ord 是'秩序'的缩写，就像是给字符'排学号'。"

```python
print(ord('A'))   # 输出 65
print(ord('0'))   # 输出 48
print(ord(' '))   # 输出 32
```

**chr() —— "变回来"（编码 → 字符）**
> "chr 是'字符'的缩写，就像是'查学号找同学'。"

```python
print(chr(65))    # 输出 A
print(chr(48))    # 输出 0
print(chr(97))    # 输出 a
```

**记忆方法：**

| 函数 | 方向 | 记忆口诀 |
|------|------|----------|
| `ord(字符)` | 字 → 数 | "order 排号" |
| `chr(编码)` | 数 → 字 | "character 角色" |

**黑板画箭头：**

```
  ord()  ——→
[字符]           [编码]
  ←——  chr()
```

"箭头指向哪边，就是'变到哪边'。"

---

#### 知识块 5：大小写转换的秘密（2 分钟）

**"发现规律！"**

```python
print(ord('A'))   # 65
print(ord('a'))   # 97
print(97 - 65)    # 32
```

"A→a 要加 32，那 a→A 呢？"

```python
# 大写转小写：+32
print(chr(ord('B') + 32))   # 输出 'b'

# 小写转大写：-32
print(chr(ord('b') - 32))   # 输出 'B'
```

**全班一起念：**
> "小写 = 大写 + 32"
> "大写 = 小写 - 32"

**记忆钩子：**
"想象大写字母站在'65 层'，小写字母站在'97 层'。中间差了 32 层楼！
坐电梯上去要 +32，坐电梯下来要 -32。"

---

#### 知识块 6：空格 = 32（1 分钟）

"空格看起来什么都没有，但它也有编码哦！
而且，它的编码是……32！

你发现了吗？'0'是 48，'空格'是 32。
它们俩不一样——'0'是一个看得见的数字字符，
空格是'看不见的空白居民'。"

```python
print(ord(' '))   # 输出 32
print(chr(32))    # 输出一个空格（看不见！）
```

**身体锚点：**
"做一个'空抓'的动作——手里什么都没有，但这就是'空格'！比一个 3 再比一个 2。"

**【知识点结束 · 用时 20 分钟】**

---

### 第三段：演示 —— "turtle 画 ASCII 表"（10 分钟）

#### 演示 1：ASCII 编码展示墙（4 分钟）

**老师运行代码，学生观察：**

```python
# 演示代码（老师操作）
import turtle

t = turtle.Turtle()
t.penup()

# 显示一行字符及其编码
y = 200
for i, ch in enumerate('HELLO'):
    t.goto(-200 + i * 80, y)
    t.write(f"{ch}", font=("Arial", 20, "normal"))
    t.goto(-200 + i * 80, y - 40)
    t.write(f"={ord(ch)}", font=("Arial", 16, "normal"))
```

"看！turtle 把每个字符和它的编码都写在屏幕上了！
H=72，E=69，L=76，L=76，O=79。"

**引导学生观察：**
- "有没有发现 L 出现了两次？编码相同吗？"（相同！76）
- "同一个字符，编码永远相同。"

#### 演示 2：猜编码游戏（3 分钟）

**老师运行一个数字闪现程序：**

"现在老师来考考大家！turtle 会显示一个数字，
你们要大声说出它对应的字符！"

```python
# 猜编码游戏
import turtle
import time

t = turtle.Turtle()
t.penup()
t.goto(0, 0)

# 闪现 65 → 学生喊 A
t.write("65", font=("Arial", 48, "normal"))
time.sleep(2)
t.clear()
t.write("65 = " + chr(65) + "！对了！", font=("Arial", 24, "normal"))
```

**互动过程：**
- 闪现 48 → 学生喊"0号！"
- 闪现 65 → 学生喊"A！"
- 闪现 97 → 学生喊"小a！"
- 闪现 32 → 学生喊"空格！"

#### 演示 3：整排字母规律展示（3 分钟）

"我们来看看 A 到 Z 的编码有什么规律。"

```python
t.clear()
y = 150
for i in range(65, 75):  # A-J
    ch = chr(i)
    t.goto(-250 + (i-65) * 55, y)
    t.write(f"{ch}={i}", font=("Courier", 14, "normal"))
```

"A=65, B=66, C=67……发现什么规律了吗？"
（学生：每次加 1！）

"对！字母是按顺序排号的！A 是 65，B 是 66，Z 最大是 90。"

**【演示结束 · 用时 10 分钟】**

---

### 第四段：实操 —— "我是编码小侦探"（15 分钟）

#### 任务 1：写出我的名字编码（5 分钟）

"请用 ord() 写出你自己名字拼音首字母的编码。"

**示例：**
```python
# 如果我叫小明（Xiao Ming）
print(ord('X'))   # 输出 88
print(ord('M'))   # 输出 77
```

**拓展：**
"再用 chr() 把编码变回来，验证一下。"

```python
print(chr(88))    # 输出 X
print(chr(77))    # 输出 M
```

**学生自主完成，老师巡视指导。**

#### 任务 2：大小写转换器（4 分钟）

"请写出一个程序：输入一个大写字母，输出它的小写字母。"

**要求：只能用 ord 和 chr，不能用 .lower()！**

```python
# 大小写转换器
upper = input("请输入一个大写字母：")
code = ord(upper)  # 拿到编码
lower_code = code + 32  # 加 32 变小小写
lower = chr(lower_code)
print(f"{upper} 的小写是 {lower}")
```

**提示：**
"记得我们学的口诀——小写 = 大写 + 32！"

#### 任务 3：ASCII 表小画家（4 分钟）

"用 turtle 在屏幕上画出'ABC'三个字母和它们的编码。"

**参考代码框架：**
```python
import turtle

t = turtle.Turtle()
t.penup()
t.goto(-100, 0)

# 在屏幕上写出 A=65, B=66, C=67
t.write("A=" + str(ord('A')), font=("Arial", 20, "normal"))
# ……
```

**拓展挑战：**
"能不能画出你自己的名字首字母的三个字母？"

#### 任务 4（快速挑战，有余力的同学做）：加密小秘密（2 分钟）

"把你的名字每个字母都加上 1，变成'密码'。"

```python
name = "BOB"
for ch in name:
    new_code = ord(ch) + 1
    print(chr(new_code), end="")  # 输出 "CPC"
```

**【实操结束 · 用时 15 分钟】**

---

### 第五段：小测 —— "编码大闯关"（5 分钟）

> 全班举手抢答或按小组积分

#### 第 1 题（记忆题）
**问：字符'0'的编码是多少？**
A. 0    B. 48    C. 65    D. 32
> 答案：B（口诀："四八三十二，零是 48"）

#### 第 2 题（记忆题）
**问：大写字母'A'的编码是多少？**
A. 65    B. 97    C. 48    D. 32
> 答案：A（口诀："A 是老大 65 分"）

#### 第 3 题（计算题）
**问：小写字母'a'的编码是多少？**
A. 65    B. 48    C. 97    D. 32
> 答案：C（"65 + 32 = 97"）

#### 第 4 题（理解题）
**问：以下哪个程序能输出小写'b'？**
A. `print(chr(97))`    B. `print(chr(66 + 32))`
C. `print(ord('b'))`   D. `print(chr(98))`
> 答案：B 和 D 都对（66+32=98，chr(98)='b'）

#### 第 5 题（挑战题）
**问：空格的编码是多少？它和'0'的编码有什么关系？**
A. 空格=48，一样大    B. 空格=32，比'0'小
C. 空格=0，最小       D. 空格=65，和 A 一样
> 答案：B（空格=32，'0'=48，32 小于 48）

**【小测结束 · 用时 5 分钟 · 全课结束】**

---

## 三、板书设计

```
┌─────────────────────────────────────────────────┐
│  第05节  ASCII与编码                              │
│  记住：'文字穿数字外衣'                          │
├─────────────────────────────────────────────────┤
│                                                  │
│  【口诀墙】                                       │
│  ┌─────────────────────────────────────┐        │
│  │  "零48，A65，小a大A差32"            │        │
│  └─────────────────────────────────────┘        │
│                                                  │
│  【三个必记编码】                                 │
│  '0' = 48    'A' = 65    'a' = 97               │
│                                                  │
│  【公式】                                        │
│  小写 = 大写 + 32                                 │
│  大写 = 小写 - 32                                 │
│                                                  │
│  【函数】                                        │
│  ord(字符) → 编码   （字→数）                    │
│  chr(编码) → 字符   （数→字）                    │
│                                                  │
│  ASCII表：0 ~ 127（共128个）                     │
│  48-57 数字  65-90 大写  97-122 小写             │
│                                                  │
└─────────────────────────────────────────────────┘
```

---

## 四、身体锚点 + 记忆钩子汇总

| 知识点 | 身体锚点 | 记忆钩子 |
|--------|----------|----------|
| 编码 = 数字外衣 | 手指比数字 = 编码号 | "文字穿数字外衣" |
| ord() = 字→数 | 手指从嘴（字符）指向脑（数字） | "order 排号" |
| chr() = 数→字 | 手指从脑指向嘴 | "character 角色" |
| '0' = 48 | 左手比4，右手比8 | "四八三十二，零是48" |
| 'A' = 65 | 双手举过头顶比A形 | "A是老大65分" |
| 'a' = 97 | 双手放低比a形 | "小a比大A大32" |
| 32的差 | 弯曲三指再比二 | "32层楼的电梯" |
| 空格 = 32 | 做一个"空抓"动作 | "看不见的空白居民" |

---

## 五、常见问题与应对（教师备查）

### Q1: 学生问"为什么是 65 不是 1？"
**答：** "一开始的设计师们讨论过很多方案。用 65 开头是因为要留出位置给 0-31 这些'隐形指令'和 32-64 的标点符号。就像我们班的学号不是从 1 开始，而是从 10 开始——因为前面要留一些号给转学生！"

### Q2: 学生混淆 ord 和 chr
**应对方法：** 画方向箭头 + 做动作
- ord：嘴巴说字母 → 手比数字
- chr：手比数字 → 嘴巴说字母
反复练习 2-3 次

### Q3: 学生以为 '0' 的编码就是 0
**应对：** "'0'是一个字符，就像'A'是一个字符一样。字符'0'住在大楼里，它的房间号是 48，不是 0！数字 0 和字符'0'是两码事哦！"

### Q4: turtle 写中文乱码
**解决方法：** 设置字体参数，如 `font=("SimHei", 16, "normal")`

### Q5: 部分学生跟不上 ASCII 表全貌
**应对：** 只强调三个关键编码 + 记住"数字、大写、小写"三个区间的范围即可。不必记住全部表。

---

## 六、课后延伸建议

1. **制作 ASCII 编码手卡：** 每个学生做一张卡片，正面写字符，背面写编码
2. **家庭作业彩蛋：** 用 ord 给家人写一封"编码信"，让家人用 chr 解码
3. **下一节预告：** "今天我们给字符编了号，下次我们要给一大段文字编号——字符串的索引！"

---

## 七、教学反思（课后填写）

| 维度 | 记录 |
|------|------|
| 教学目标达成度 | /5 |
| 学生兴趣度 | /5 |
| 难点突破情况 | |
| 时间控制 | |
| 需要改进 | |
| 备注 | |

---

> 本教案由少儿编程教师团队设计，遵循"具体→抽象→应用"的认知路径，
> 融合身体锚点、记忆钩子、可视化编程三大教学策略，
> 专为 7-10 岁零基础学员打造。
