# G3-07 课后练习 —— 字典dict
> **GESP等级：三级 | 考级考点：GESP Python 三级**

**姓名：__________  日期：__________**

---

> 今天学了字典的增删改查！
>
> 记忆钩子：
> - **"字典 = 查字典，key 查 value，键不可变值可以变"**
> - **"有则改、无则增"**
> - **"pop 弹出来还给你，del 直接扔，clear 全倒掉"**

---

## 一、填空题（每空 2 分，共 24 分）

1. 字典用 _____ 括号创建，列表用 _____ 括号创建。

2. 字典里的每一对数据叫做"_____"，用冒号连接，左边是 _____，右边是 _____。

3. `d[key]` 当 key 不存在时会报 _____ 错误；`get(key)` 当 key 不存在时返回 _____。

4. `d["red"] = "红色"`，如果 `"red"` 原本不在字典中，这个操作是 _____；如果 `"red"` 已经存在，这个操作是 _____。

5. `d.pop("red")` 会 _____ 键值对，并且 _____ 被删除的值。

6. `del d["red"]` 会 _____ 键值对，但 _____ 返回值。

7. 清空字典应该用 _____ 方法。

8. 字典的键必须是 _____ 类型（如字符串、数字、元组），不能是 _____ 类型（如列表）。

---

## 二、选择题（每题 3 分，共 24 分）

**第1题** 下面哪个是创建字典的正确写法？

A. `d = ["red", "blue"]`
B. `d = {"red": "红", "blue": "蓝"}`
C. `d = ("red", "blue")`
D. `d = {red, blue}`

**第2题** `d = {"a": 1, "b": 2}`，执行 `d["c"] = 3` 后，字典变成什么？

A. `{"a": 1, "b": 2}`
B. `{"c": 3}`
C. `{"a": 1, "b": 2, "c": 3}`
D. 报错

**第3题** `d = {"x": 10, "y": 20}`，执行 `d["x"] = 99` 后，`d["x"]` 的值是？

A. 10
B. 20
C. 99
D. 报错

**第4题** `d = {"r": "red", "g": "green"}`，执行 `val = d.pop("r")` 后，`val` 的值是？

A. `"r"`
B. `"red"`
C. `"green"`
D. 没有返回值

**第5题** `d = {"a": 1, "b": 2}`，下面哪行代码会报错？

A. `print(d["a"])`
B. `print(d.get("a"))`
C. `print(d["c"])`
D. `print(d.get("c"))`

**第6题** `d = {"a": 1, "b": 2}`，执行 `d.clear()` 后，字典变成什么？

A. `{"a": 1, "b": 2}`
B. `{}`
C. `None`
D. `0`

**第7题** 下面哪个可以做字典的键？

A. `["a", "b"]`
B. `(1, 2)`
C. `{1, 2}`
D. 以上都可以

**第8题** `d.get("name", "未知")` 如果字典里没有 `"name"` 这个键，返回什么？

A. 报错
B. `None`
C. `"未知"`
D. `0`

---

## 三、代码阅读题（每题 4 分，共 24 分）

**第9题** 写出下面代码的输出结果：

```python
d = {"语文": 90, "数学": 85}
print(d["语文"])
```

输出：__________________

**第10题** 写出下面代码的输出结果：

```python
d = {"语文": 90, "数学": 85}
d["英语"] = 88
d["数学"] = 95
print(d)
```

输出：__________________

**第11题** 写出下面代码的输出结果：

```python
d = {"a": 1, "b": 2, "c": 3}
val = d.pop("b")
print(val)
print(d)
```

输出：
① __________________
② __________________

**第12题** 写出下面代码的输出结果：

```python
d = {"x": 10, "y": 20}
del d["x"]
print(d)
```

输出：__________________

**第13题** 写出下面代码的输出结果：

```python
d = {"red": "#FF0000", "blue": "#0000FF"}
print(d.get("red"))
print(d.get("green"))
print(d.get("green", "没有这个颜色"))
```

输出：
① __________________
② __________________
③ __________________

**第14题** 写出下面代码的输出结果：

```python
d = {}
d["name"] = "小明"
d["age"] = 9
d["name"] = "小红"
print(len(d))
print(d["name"])
```

输出：
① __________________
② __________________

---

## 四、编程题（共 28 分）

**第15题：创建并访问字典（6分）**

创建一个字典 `student`，包含以下信息：
- 键 `"姓名"` → 你的名字
- 键 `"年龄"` → 你的年龄
- 键 `"爱好"` → 你喜欢的爱好

然后用 `print()` 分别输出你的姓名和爱好。

```python
# 请在此处写代码

```

**第16题：字典增删改查（10分）**

已知以下字典，请按要求完成操作：

```python
scores = {"小明": 85, "小红": 92, "小刚": 78}
```

请写代码依次完成：
1. 查询并输出 "小红" 的成绩
2. 修改 "小明" 的成绩为 90
3. 新增一个同学 "小丽" 的成绩 88
4. 删除 "小刚" 的成绩（用 pop 或 del 都可以）
5. 用 `get()` 安全查询 "小李" 的成绩，如果找不到返回 0

```python
scores = {"小明": 85, "小红": 92, "小刚": 78}

# 1. 查询小红成绩

# 2. 修改小明成绩为90

# 3. 添加小丽成绩88

# 4. 删除小刚成绩

# 5. 用 get 查询小李成绩，找不到返回0

```

**第17题：颜色查询程序（12分）**

使用字典创建一个"中文颜色名 → 英文颜色名"的映射表，包含至少 5 种颜色（如红色→red、蓝色→blue、绿色→green、黄色→yellow、紫色→purple）。

然后写一个程序：
1. 用 `input()` 让用户输入一个中文颜色名
2. 用 `get()` 在字典中查找对应的英文名
3. 如果找到了，用 turtle 设置画笔为该颜色，画一个圆并写出中文名
4. 如果没找到，打印"字典中没有这个颜色"

提示代码框架：

```python
import turtle
t = turtle.Turtle()
t.speed(3)
t.pensize(3)

# 颜色映射字典：中文 → 英文
color_map = {
    # 请补全至少 5 种颜色
}

# 用户输入中文颜色名
chn = input("请输入颜色中文名：")

# 用 get() 查找英文名，找不到时返回 None
eng = color_map.get(chn)

if eng:
    # 找到了——用 turtle 画圆
    # 请补全代码

else:
    print("字典中没有这个颜色")

t.hideturtle()
turtle.done()
```

**请写出完整代码：**

```python

```

---

## 五、挑战题（附加 10 分）

**第18题：字母统计器**

写一个程序，让用户输入一个英文单词，然后用字典统计每个字母出现了几次。

示例：
```
请输入一个单词：hello
h → 1 次
e → 1 次
l → 2 次
o → 1 次
```

提示：用空字典 `{}` 开始，遍历每个字母，如果字母已经在字典中就加 1，否则设为 1。

```python
# 请在此处写代码

```

---

## 提交说明

- 提交方式：下节课前交给老师
- 编程题需在电脑上运行通过
- 选择题和填空题直接写在题目旁

---

## 教师批阅栏

| 题型 | 满分 | 得分 |
|:----:|:----:|:----:|
| 填空题（1-8） | 24 | |
| 选择题（1-8） | 24 | |
| 代码阅读（9-14） | 24 | |
| 编程题（15-17） | 28 | |
| 挑战题（18） | 10 | |
| **总分** | **110** | |

**评语：** ____________________________________________________________


---

**自我评价：** □ 全都会了  □ 大部分会了  □ 还要再练练
