# G3-08 课后练习 —— 字典遍历
> **GESP等级：三级 | 考级考点：GESP Python 三级**

**姓名：__________  日期：__________**

---

> 今天学了字典遍历——用 `keys()` 取所有键，`values()` 取所有值，`items()` 取全部成对输出！
>
> 记忆钩子：
> - **"keys() 取所有键，values() 取所有值，items() 取全部成对输出"**
> - **"for k, v in d.items() —— 两个变量同时拿，键值对全不怕"**

---

## 一、填空题（每空 2 分，共 20 分）

1. `d.keys()` 返回的是所有 _____，`d.values()` 返回的是所有 _____。

2. `d.items()` 返回的是所有 _____，每个元素是一个 _____ （数据类型）。

3. 遍历字典时，`for k ____ d.keys():` 可以取出每一个键。

4. 同时遍历键和值，应该写：`for k, v ____ d.____():`。

5. `colors = {"r": "red", "b": "blue", "g": "green"}`，直接 `for x in colors:` 遍历，`x` 取到的是 _____。

6. `d.items()` 返回的对象类型是 _____（填完整名称）。

7. 如果只关心字典的值而不关心键，应该用 _____ 方法。

8. 在 `for k, v in d.items():` 中，`k` 代表 _____，`v` 代表 _____。

---

## 二、选择题（每题 3 分，共 24 分）

**第1题** `d = {"a": 1, "b": 2, "c": 3}`，下面哪个能遍历所有值？

A. `for k in d.keys():`
B. `for v in d.values():`
C. `for item in d.items():`
D. `for k, v in d.items():`

**第2题** `d = {"a": 1, "b": 2}`，下面代码的输出是什么？

```python
for k in d:
    print(k)
```

A. 1、2
B. "a"、"b"
C. ("a", 1)、("b", 2)
D. 报错

**第3题** `d = {"x": 10, "y": 20}`，`list(d.items())` 的结果是？

A. `["x", "y"]`
B. `[10, 20]`
C. `[("x", 10), ("y", 20)]`
D. `["x": 10, "y": 20]`

**第4题** 下面哪段代码能输出 `"键=a, 值=1"` 这样的格式？

A. 
```python
for k in d.keys():
    print(f"键={k}, 值={k}")
```
B. 
```python
for v in d.values():
    print(f"键={v}, 值={v}")
```
C. 
```python
for k, v in d.items():
    print(f"键={k}, 值={v}")
```
D. 
```python
for item in d.items():
    print(f"键={item}, 值={item}")
```

**第5题** 执行以下代码后，输出结果是什么？

```python
fruit_colors = {"apple": "red", "banana": "yellow", "grape": "purple"}
for f, c in fruit_colors.items():
    if c == "yellow":
        print(f)
```

A. apple
B. banana
C. grape
D. 没有输出

**第6题** `d = {"a": 1, "b": 2, "c": 3}`，执行 `for k in d.keys(): d[k] = d[k] * 2` 后，`d["b"]` 的值是？

A. 1
B. 2
C. 4
D. 报错

**第7题** 下面代码中，`k` 的数据类型是什么？

```python
d = {"a": 1, "b": 2}
for k in d.items():
    print(type(k))
```

A. `str`
B. `int`
C. `tuple`
D. `dict`

**第8题** 下面说法正确的是？

A. `d.keys()` 返回一个列表
B. `d.values()` 返回一个元组
C. `d.items()` 返回的视图会随原字典变化而变化
D. `for k in d:` 遍历的是值

---

## 三、代码阅读题（每题 4 分，共 24 分）

**第9题** 写出下面代码的输出结果：

```python
scores = {"语文": 88, "数学": 95, "英语": 90}
for subject in scores.keys():
    print(subject)
```

输出：
① __________________
② __________________
③ __________________

**第10题** 写出下面代码的输出结果：

```python
scores = {"语文": 88, "数学": 95, "英语": 90}
for score in scores.values():
    print(score)
```

输出：
① __________________
② __________________
③ __________________

**第11题** 写出下面代码的输出结果：

```python
scores = {"语文": 88, "数学": 95, "英语": 90}
for s, v in scores.items():
    print(f"{s}: {v}分")
```

输出：
① __________________
② __________________
③ __________________

**第12题** 写出下面代码的输出结果：

```python
fruits = {"apple": 5, "banana": 3, "orange": 7}
total = 0
for qty in fruits.values():
    total += qty
print(total)
```

输出：__________________

**第13题** 写出下面代码的输出结果：

```python
capitals = {"中国": "北京", "日本": "东京", "韩国": "首尔"}
for country, city in capitals.items():
    if city == "北京":
        print(country)
```

输出：__________________

**第14题** 写出下面代码的输出结果：

```python
d = {"a": 1, "b": 2, "c": 3}
result = ""
for k in d.keys():
    result += k
print(result)
```

输出：__________________

---

## 四、编程题（共 32 分）

**第15题：用 keys() 遍历字典（8分）**

有一个字典 `pet = {"种类": "猫", "名字": "咪咪", "年龄": 2}`，请用 `keys()` 遍历，输出字典中所有键。

```python
pet = {"种类": "猫", "名字": "咪咪", "年龄": 2}

# 请在此处写代码

```

**第16题：用 values() 统计总分（8分）**

已知 `scores = {"语文": 92, "数学": 88, "英语": 95}`，请用 `values()` 遍历所有分数，计算总分并输出。

```python
scores = {"语文": 92, "数学": 88, "英语": 95}

# 请在此处写代码

```

**第17题：用 items() 画彩色圆（16分）**

使用颜色字典 `colors = {"red": "红色", "orange": "橙色", "yellow": "黄色", "green": "绿色", "blue": "蓝色", "purple": "紫色"}`，用 `items()` 遍历，用 turtle 画出6个不同颜色的圆。

要求：
- 每个圆半径 20
- 每个圆之间间隔 50
- 打印每个圆的颜色信息，格式：`画了一个红色的圆`
- 用英文键设置画笔颜色

提示代码框架：
```python
import turtle
t = turtle.Turtle()
t.speed(3)
t.pensize(3)

colors = {
    "red": "红色",
    "orange": "橙色",
    "yellow": "黄色",
    "green": "绿色",
    "blue": "蓝色",
    "purple": "紫色",
}

t.penup()
t.goto(-150, 0)
t.pendown()

# 请补全 items() 遍历代码

```

**请写出完整代码：**

```python

```

---

## 五、挑战题（附加 10 分）

**第18题：字典遍历综合应用**

已知 `students = {"小明": 85, "小红": 92, "小刚": 78, "小丽": 95, "小华": 60}`，请用 `items()` 遍历字典，完成以下要求：

1. 输出每个学生的名字和成绩，格式：`小明: 85分`
2. 找出最高分的学生，输出：`最高分是小丽: 95分`
3. 计算全班平均分并输出：`平均分: XX分`

```python
students = {"小明": 85, "小红": 92, "小刚": 78, "小丽": 95, "小华": 60}

# 请在此处写代码

```

---

## 提交说明

- 提交方式：下节课前交给老师
- 编程题需在电脑上运行通过
- 选择题和填空题直接写在题目旁

---

## 教师批阅栏

| 题型 | 满分 | 得分 |
|:----:|:----:|:----:|
| 填空题（1-8） | 20 | |
| 选择题（1-8） | 24 | |
| 代码阅读（9-14） | 24 | |
| 编程题（15-17） | 32 | |
| 挑战题（18） | 10 | |
| **总分** | **110** | |

**评语：** ____________________________________________________________


---

**自我评价：** □ 全都会了  □ 大部分会了  □ 还要再练练
