> **GESP等级：三级 | 考级考点：GESP Python 三级**

# 第15节：进制大转盘

## 课程概览

| 项目 | 内容 |
|------|------|
| 课程名称 | 进制大转盘 |
| 课程时长 | 60分钟 |
| 教学形式 | 线下互动课 + Turtle图形演示 |
| 核心概念 | 十进制、二进制、八进制、十六进制、进制互转、Python进制函数 |

---

## 教学目标

### 知识与技能
1. 了解四种常见进制：二进制、八进制、十进制、十六进制
2. 掌握各种进制的数字范围和表示方法
3. 学会二进制与八进制、十六进制之间的快速转换
4. 掌握Python中的进制转换函数：bin()、oct()、hex()、int(str, base)

### 过程与方法
1. 通过"星球故事"建立不同进制的情境化理解
2. 通过"大转盘"图形演示直观对比四种进制
3. 通过身体动作锚定不同进制的特征

### 情感态度与价值观
1. 理解"不同的进制只是数的不同表达方式"
2. 建立"每种进制都有它的用途"的认知
3. 感受计算机科学的简洁之美（八进制和十六进制是二进制的"缩写"）

---

## 教学重点与难点

| 类型 | 内容 | 突破方法 |
|------|------|----------|
| 教学重点 | 四种进制的数字范围与表示 | 转盘图形+颜色区分 |
| 教学重点 | Python进制转换函数 | 代码演示+实操 |
| 教学难点 | 十六进制A-F的理解 | 故事化（"字母帮忙"） |
| 教学难点 | 二进制与十六进制的快速互转 | 4位分组法 |

---

## 教学流程（60分钟 / 5段式）

---

### 第一段：导入（10分钟）——"不同星球的不同数法"

#### 活动1：星球故事会（5分钟）

**教师讲故事：**

> "很久很久以前，宇宙中有四个数字星球……"
>
> **地球（十进制）：** 人类住在上面，每个人都有10根手指，所以人类发明了十进制：0,1,2,3,4,5,6,7,8,9。满10就进1位。
>
> **电脑星（二进制）：** 电脑人住在上面，他们只有0和1两个数字。他们的电路只有"通"和"断"两种状态。满2就进1位。虽然数字少，但电脑人什么都能算！
>
> **八脚章鱼星（八进制）：** 8只脚的章鱼人住在上面，他们有8只脚，所以用八进制：0,1,2,3,4,5,6,7。满8就进1位。
>
> **十六精灵星（十六进制）：** 16个脚的精灵住在上面，他们有16只脚，所以需要用16个数字：0,1,2,3,4,5,6,7,8,9，可是10个数字不够用啊！所以他们借来了字母：A=10, B=11, C=12, D=13, E=14, F=15。满16就进1位。

**师生互动：**
```
老师："地球人用什么进制？"
学生："十进制！"
老师："为什么呢？"
学生："因为人有10根手指！"
老师："那电脑星人呢？"
学生："二进制！因为电路只有通和断！"
老师："章鱼星人呢？"
学生："八进制！有8只脚！"
老师："精灵星人呢？"
学生："十六进制！他们借了字母！"
```

#### 活动2：身体热身——进制猜猜猜（5分钟）

**教师活动：**
- 老师说一种进制，学生用身体动作表示
  - 十进制：张开双手（10根手指）
  - 二进制：握拳再伸出一根手指（0和1）
  - 八进制：双手比"八"字（拇指和食指张开）
  - 十六进制：双手比"OK"然后手指张开（代表字母A-F）

- 老师说数字，学生判断属于哪种进制：
  - "10" -> 三种进制都有10！从上下文判断
  - "AF" -> 一定是十六进制（因为有字母）
  - "78" -> 可能是十进制或八进制（八进制最大数字是7，所以78不可能是八进制）
  - "1010" -> 可能是二进制、八进制、十进制或十六进制

**过渡语：**
> "今天我们就像坐上了宇宙飞船，去拜访这四个数字星球！看看它们之间怎么互相翻译——这就是'进制转换'！"

---

### 第二段：知识点讲解（20分钟）——"四进制大揭秘"

#### 知识点1：四种进制对比（5分钟）

**进制对比表：**

| 特性 | 二进制 (Binary) | 八进制 (Octal) | 十进制 (Decimal) | 十六进制 (Hex) |
|------|----------------|---------------|-----------------|---------------|
| 数字 | 0,1 | 0-7 | 0-9 | 0-9, A-F |
| 基数 | 2 | 8 | 10 | 16 |
| 进位规则 | 满2进1 | 满8进1 | 满10进1 | 满16进1 |
| 人类使用 | 电脑内部 | 早期电脑、文件权限 | 日常生活 | 内存地址、颜色编码 |
| Python前缀 | 0b | 0o | 无 | 0x |

**举例：同一个数字"28"，在不同进制中的表示：**

```
二进制(0b)：  11100   (16+8+4+0+0)
八进制(0o)：  34      (3x8+4)
十进制：      28      (2x10+8)
十六进制(0x)：1C      (1x16+12)
```

**口诀：**
> "二进制看电脑，十进制看人类，八进制像章鱼，十六进制像精灵"
> "十六进制A-F，数字不够字母凑"

**记忆钩子——进制名字和缩写：**

| 缩写 | 英文 | 中文 | 记忆方法 |
|------|------|------|----------|
| bin | binary | 二进制 | "白皑皑"只有黑白（0和1） |
| oct | octal | 八进制 | "章鱼"（octopus）有8条腿 |
| dec | decimal | 十进制 | "德克马"（decade=10年） |
| hex | hexadecimal | 十六进制 | "六边形"（hexagon）？不，是16！ |

#### 知识点2：二进制与八进制互转（4分钟）

**核心方法：3位二进制=1位八进制**

因为 8 = 2^3，所以每3个二进制位正好对应1个八进制位。

**二进制 -> 八进制：**

步骤：
1. 从右往左，每3位二进制数分成一组
2. 最左边不够3位时补0
3. 每组转成对应的八进制数字（0-7）

**示例：101110(2) -> 八进制**

```
分组（从右往左每3位）：  101  110
                          5    6
所以：101110(2) = 56(8)
```

**示例：1101011(2) -> 八进制**

```
分组：  001  101  011    （最左边补了2个0）
         1    5    3
所以：1101011(2) = 153(8)
```

**八进制 -> 二进制：**

反过来，每位八进制数字转成3位二进制。

**示例：72(8) -> 二进制**

```
  7     2
 111   010
所以：72(8) = 111010(2)
```

**示例：345(8) -> 二进制**

```
  3     4     5
 011   100   101
所以：345(8) = 11100101(2)
```

**口诀：**
> "三位二进制，一位八进制。分组从右起，不够前面补"
> "八进制转二进制，每位展开三位数"

#### 知识点3：二进制与十六进制互转（4分钟）

**核心方法：4位二进制=1位十六进制**

因为 16 = 2^4，所以每4个二进制位正好对应1个十六进制位。

**二进制 -> 十六进制：**

步骤：
1. 从右往左，每4位二进制数分成一组
2. 最左边不够4位时补0
3. 每组转成对应的十六进制数字（0-9或A-F）

**十六进制数字对应表：**

| 二进制 | 十六进制 | 二进制 | 十六进制 |
|--------|---------|--------|---------|
| 0000 | 0 | 1000 | 8 |
| 0001 | 1 | 1001 | 9 |
| 0010 | 2 | 1010 | A |
| 0011 | 3 | 1011 | B |
| 0100 | 4 | 1100 | C |
| 0101 | 5 | 1101 | D |
| 0110 | 6 | 1110 | E |
| 0111 | 7 | 1111 | F |

**记忆规则：**
```
0000=0    0001=1    0010=2    0011=3
0100=4    0101=5    0110=6    0111=7
1000=8    1001=9    1010=A    1011=B
1100=C    1101=D    1110=E    1111=F
```

**记忆钩子：**
- "1010=A" -> A像10（A是字母表第1个，10是十进制）
- "1111=F" -> F像15（F是字母表第6个，但其实是第6个字母=15？数一数：A=10,B=11,C=12,D=13,E=14,F=15）
- 更简单的记忆：A=10（A像1和0拼起来），F=15（F像4条横线=1+1+1+1=4，不对...试试数手指：A=10,B=11,C=12,D=13,E=14,F=15）

**示例：10111010(2) -> 十六进制**

```
分组：  1011  1010
          B     A
所以：10111010(2) = BA(16)
```

**示例：1101011011(2) -> 十六进制**

```
分组：  0011  0101  1011    （最左边补了2个0）
          3     5     B
所以：1101011011(2) = 35B(16)
```

**十六进制 -> 二进制：**

反过来，每位十六进制数字转成4位二进制。

**示例：A3(16) -> 二进制**

```
  A      3
 1010   0011
所以：A3(16) = 10100011(2)
```

**示例：FF(16) -> 二进制**

```
  F      F
 1111  1111
所以：FF(16) = 11111111(2)
```

**口诀：**
> "四位二进制，一位十六进制。分组从右起，A到F要牢记"
> "十六进制转二进制，每位展开四位数字"

**身体锚点：**
- 伸出4根手指代表"4位二进制=1位十六进制"
- A-F用手指数：A=10(握拳再张开=10)，B=11，...F=15

#### 知识点4：Python进制转换函数（5分钟）

**四大进制函数：**

```python
# 二进制：bin()
print(bin(5))    # 输出: 0b101
print(bin(10))   # 输出: 0b1010
print(bin(255))  # 输出: 0b11111111

# 八进制：oct()
print(oct(8))    # 输出: 0o10
print(oct(100))  # 输出: 0o144

# 十六进制：hex()
print(hex(10))   # 输出: 0xa
print(hex(255))  # 输出: 0xff
print(hex(100))  # 输出: 0x64

# 任意进制转十进制：int(str, base)
print(int("101", 2))    # 输出: 5
print(int("77", 8))     # 输出: 63
print(int("FF", 16))    # 输出: 255
print(int("123", 10))   # 输出: 123
```

**师生互动示例：**

```python
# 课堂小问答
老师："5的二进制是什么？"
学生："101！"
老师："好，我们用Python验证一下！"
print(bin(5))  # 显示: 0b101
```

**常见错误提醒：**
1. bin()、oct()、hex()返回的是字符串，前面有0b、0o、0x前缀
2. int()的第一个参数是字符串，第二个参数是进制数
3. 十六进制可以小写（0xff）也可以大写（0xFF），Python都认

**口诀：**
> "bin oct hex，三种进制转换"
> "bin转二进制，oct转八进制，hex转十六进制"
> "int(str, base)，任意进制转十进制"

#### 知识点5：为什么需要多种进制？（2分钟）

**二进制的不足：**
- 写起来太长！比如 255(10)=11111111(2)，8个数字好累！
- 人眼读二进制容易看错

**八进制的优势：**
- 3位二进制压缩成1位
- 早期电脑（如Unix系统）广泛使用
- 文件权限用八进制表示（chmod 755）

**十六进制的优势：**
- 4位二进制压缩成1位
- 计算机内存地址用十六进制
- 网页颜色用十六进制：#FF0000=红色
- 一个字节（8位）正好用2位十六进制表示

**示例对比（数字255）：**

```
二进制：   11111111  （8位，好长！）
八进制：   377       （3位，好点了）
十进制：   255       （3位，熟悉）
十六进制： FF        （2位，最短！）
```

**总结：**
> "二进制电脑看得懂，十进制人类看得懂，八进制和十六进制是给程序员偷懒用的——把长长的二进制'压缩'成短一点的写法！"

---

### 第三段：演示（10分钟）——"Turtle进制大转盘"

**教师操作流程：**

#### 演示1：进制大转盘
1. 运行 02_进制大转盘.py
2. 观察Turtle画出的4个扇区的大转盘
3. 每个扇区用不同颜色代表不同进制
4. 输入一个数字，观察它在4种进制下的表示

**关键提问：**
```
老师："大家看，转盘的4个扇区分别代表什么进制？"
学生："红=二进制、蓝=八进制、绿=十进制、紫=十六进制！"
老师："输入数字5，看看四种进制怎么表示？"
学生："二进制是101，八进制是5，十进制是5，十六进制是5"
老师："为什么八进制和十六进制也是5？"
学生："因为5小于8，也小于16，所以所有进制都是5！"
```

#### 演示2：不同数字的进制展示
1. 依次输入 8, 10, 15, 16, 31, 100
2. 观察什么时候不同进制开始"分叉"
3. 重点观察：
   - 8：八进制=10（满8进1了！）
   - 10：十六进制=A（字母出场！）
   - 15：十六进制=F（字母F出场！）
   - 16：十六进制=10（满16进1了！）
   - 100：十六进制=64，八进制=144

#### 演示3：颜色值探秘
1. 输入一些常见的颜色值
2. 十进制255 -> 十六进制FF
3. 解释：RGB颜色中，#FF0000=红色，#00FF00=绿色，#0000FF=蓝色

---

### 第四段：实操练习（15分钟）——"进制转换小能手"

#### 练习1：二进制与八进制互转（5分钟）

**任务卡：**

```
把下列二进制转八进制：
1. 110(2)  =  ?(8)
2. 1010(2) =  ?(8)
3. 11011(2) = ?(8)
4. 101010(2) = ?(8)
5. 111111(2) = ?(8)

把下列八进制转二进制：
6. 25(8)  =  ?(2)
7. 71(8)  =  ?(2)
8. 136(8) =  ?(2)
9. 777(8) =  ?(2)
10. 1234(8) = ?(2)
```

**答案：**
1. 6(8)   2. 12(8)   3. 33(8)   4. 52(8)   5. 77(8)
6. 10101(2)   7. 111001(2)   8. 1011110(2)   9. 111111111(2)   10. 1010011100(2)

#### 练习2：二进制与十六进制互转（5分钟）

**任务卡：**

```
把下列二进制转十六进制（提示：4位一组）：
1. 1111(2)    = ?(16)
2. 10101(2)   = ?(16)
3. 110110(2)  = ?(16)
4. 10101010(2) = ?(16)
5. 11111111(2) = ?(16)

把下列十六进制转二进制：
6. A(16)  =  ?(2)
7. 2F(16) =  ?(2)
8. 100(16) = ?(2)
9. FF(16) = ?(2)
10. ABC(16) = ?(2)
```

**答案：**
1. F(16)   2. 15(16)   3. 36(16)   4. AA(16)   5. FF(16)
6. 1010(2)   7. 101111(2)   8. 100000000(2)   9. 11111111(2)   10. 101010111100(2)

#### 练习3：Python进制函数实操（5分钟）

**任务：**
1. 打开Python交互环境（IDLE或终端输入 python）
2. 依次输入以下命令，观察输出：

```python
# 十进制到其他进制
print("十进制5的二进制:", bin(5))
print("十进制10的八进制:", oct(10))
print("十进制255的十六进制:", hex(255))

# 其他进制到十进制
print("二进制101转十进制:", int("101", 2))
print("八进制77转十进制:", int("77", 8))
print("十六进制FF转十进制:", int("FF", 16))

# 利用进制换算自己的生日！
birth_month = 6    # 改成你的生日月份
birth_day = 15     # 改成你的生日日期
print("我生日的月份 (10):", birth_month, "-> (2):", bin(birth_month))
print("我生日的日期 (10):", birth_day, "-> (16):", hex(birth_day))
```

**拓展任务：**
- 打印数字 1-20 所有数字的二进制（用循环）
- 打印数字 1-50 中所有"回文二进制"（正着读反着读一样的，比如101）

---

### 第五段：小测（5分钟）——"进制星球大闯关"

#### 第1关（选择题）

```
1. 十六进制用到了哪些字母？
  A. A到Z  B. A到F  C. A到G  D. A到E

2. oct(9) 的输出是什么？
  A. 0o9  B. 0o11  C. 0o10  D. 0o12

3. 二进制 1111 等于十六进制的几？
  A. E  B. F  C. 15  D. 1111

4. 十六进制 B 等于十进制几？
  A. 10  B. 11  C. 12  D. 13
```

**答案：** 1.B  2.B  3.B  4.B

#### 第2关（连线题）

```
把进制和它的数字范围连起来：

  二进制    ────    0-9, A-F
  八进制    ────    0-9
  十进制    ────    0-1
  十六进制  ────    0-7
```

**答案：** 二进制-0-1, 八进制-0-7, 十进制-0-9, 十六进制-0-9,A-F

#### 第3关（填空题）

```
1. hex(100) 返回________。
2. int("1010", 2) 返回________。
3. 二进制的一位（bit）只能表示____种状态。
4. 十进制 100 的十六进制是________。
5. 十六进制 FF 等于十进制________。
```

**答案：** 1. 0x64  2. 10  3. 2  4. 64  5. 255

---

## 板书设计

```
+-----------------------------------------------------------------+
|                   第15节：进制大转盘                              |
+-----------------------------------------------------------------+
|                                                                   |
|  进制  |  基数  |  数字范围  |  Python函数  |  前缀             |
|  ------+--------+-----------+-------------+------              |
|  二进制 |   2    |   0-1     |  bin(x)     |  0b               |
|  八进制 |   8    |   0-7     |  oct(x)     |  0o               |
|  十进制 |  10    |   0-9     |  int()      |  无               |
|  十六进 |  16    |  0-9,A-F  |  hex(x)     |  0x               |
|                                                                   |
|  A=10  B=11  C=12  D=13  E=14  F=15                             |
|                                                                   |
|  3位二进制=1位八进制     口诀：                                  |
|  4位二进制=1位十六进制   "一二四八十六，二进制位2的幂"         |
|                         "十六进制A-F，数字不够字母凑"           |
+-----------------------------------------------------------------+
```

---

## 教学准备

### 教师准备
- PPT课件（含星球故事图片、进制对比表）
- Python环境
- 代码文件 02_进制大转盘.py
- 随堂练习纸（打印，每人1份）
- 课后练习纸（打印，每人1份）
- 四种颜色的彩笔（画转盘用）

### 学生准备
- 笔+草稿纸
- Python环境（实操环节用）

---

## 教学反思（课后填写）

| 项目 | 评价 | 改进建议 |
|------|------|----------|
| 导入环节趣味性 | 5星 | |
| 知识点讲解清晰度 | 5星 | |
| 演示环节直观性 | 5星 | |
| 实操环节完成度 | 5星 | |
| 小测环节反馈 | 5星 | |

---

## 延伸阅读与拓展

### 给学有余力的学生

1. **其他进制：** 还有三进制（苏联曾研究过）、十二进制（时钟、英制单位）、六十进制（时间、角度）
2. **Unicode编码：** 电脑中所有文字都是用二进制编码的
3. **RGB颜色：** 网页颜色 #RRGGBB 中，每种颜色用2位十六进制（0-255）
4. **MAC地址：** 网络设备的MAC地址是用十六进制表示的，如 00:1A:2B:3C:4D:5E

### 生活中的其他进制

- **时间：** 60秒=1分（六十进制），60分=1小时
- **时钟：** 12小时制（十二进制）
- **角度：** 360度=1圈
- **英制：** 1英尺=12英寸（十二进制）
- **一打：** 12个（十二进制）

### 补充：Python进制前缀

| 进制 | 前缀 | 示例 | 十进制值 |
|------|------|------|---------|
| 二进制 | 0b或0B | 0b1010 | 10 |
| 八进制 | 0o或0O | 0o12 | 10 |
| 十进制 | 无前缀 | 10 | 10 |
| 十六进制 | 0x或0X | 0xA | 10 |

---

## 附录：进制转换口诀全集

### 二进制<->八进制
```
三位二进制并一组，每组转成八进制
从右往左来分组，不够前面补个零
八进制转二进制，每位展开三位数
3位对1位，牢牢记住不忘记
```

### 二进制<->十六进制
```
四位二进制并一组，每组转成十六进制
从右往左来分组，不够前面补个零
十六进制转二进制，每位展开四位数
4位对1位，A-F要背会
```

### Python函数口诀
```
转二进制用bin，转八进制用oct
转十六进制用hex，前面都有0前缀
任意进制转十进制，int函数加base
记住这些函数名，编程转换不再难
```
