# G3-06 课后练习 —— 集合运算
> **GESP等级：三级 | 考级考点：GESP Python 三级**

**姓名：__________  日期：__________**

---

> 今天学了集合三大运算——交集 `&`、并集 `|`、差集 `-`！
>
> 记忆钩子：
> - **"交集 & 取共同，并集 | 合所有，差集 - 有方向"**
> - **"& 像筛子滤共同，两杯水倒一起就是 |，- 是减法减重叠"**

---

## 一、填空题（每空 2 分，共 20 分）

1. `s1 & s2` 表示的是 _____ 运算，取两个集合中 _____ 的元素。

2. `s1 | s2` 表示的是 _____ 运算，取两个集合中 _____ 的元素（自动去重）。

3. `s1 - s2` 表示的是 _____ 运算，取 _____ 有但 _____ 没有的元素。

4. `A = {1, 2, 3}`，`B = {2, 3, 4}`，则 `A & B` 的结果是 _____。

5. `{10, 20} | {30, 40}` 的结果是 _____。

6. 差集运算中，`A - B` 和 `B - A` 的结果一般 _____（相同/不同）。

7. 两个集合没有共同元素时，交集的结果是 _____（用 Python 代码表示）。

---

## 二、选择题（每题 3 分，共 24 分）

**第1题** `s1 = {"a", "b", "c"}`，`s2 = {"b", "c", "d"}`，`s1 & s2` 的结果是？

A. `{"a", "b", "c", "d"}`
B. `{"b", "c"}`
C. `{"a", "d"}`
D. `{"a", "b", "c"}`

**第2题** `s1 = {1, 2, 3}`，`s2 = {4, 5, 6}`，`s1 | s2` 的结果是？

A. `{1, 2, 3}`
B. `{4, 5, 6}`
C. `{1, 2, 3, 4, 5, 6}`
D. `set()`

**第3题** `s1 = {10, 20, 30, 40}`，`s2 = {30, 40, 50}`，`s1 - s2` 的结果是？

A. `{10, 20}`
B. `{30, 40}`
C. `{50}`
D. `{10, 20, 30, 40, 50}`

**第4题** `s1 = {"x", "y"}`，`s2 = {"y", "z"}`，`s2 - s1` 的结果是？

A. `{"x"}`
B. `{"y"}`
C. `{"z"}`
D. `{"x", "y", "z"}`

**第5题** 下面哪个运算符能找出「我有你没有」的元素？

A. `&`
B. `|`
C. `-`
D. `+`

**第6题** `A = {"苹果", "香蕉"}`，`B = {"香蕉", "西瓜"}`，下面哪个结果等于 `{"苹果"}`？

A. `A & B`
B. `A | B`
C. `A - B`
D. `B - A`

**第7题** 下面说法正确的是？

A. `A & B` 会改变 A 的内容
B. `A | B` 的结果中可能包含重复元素
C. `A - B` 和 `B - A` 的结果一定相同
D. `A & B` 的结果小于等于 A 和 B 中更小的那个

**第8题** `{1, 2} & {3, 4}` 的结果是？

A. `{1, 2, 3, 4}`
B. `{1, 2}`
C. `{3, 4}`
D. `set()`

---

## 三、代码阅读题（每题 4 分，共 24 分）

**第9题** 写出下面代码的输出结果：

```python
s1 = {"red", "blue", "green"}
s2 = {"blue", "yellow", "green"}
print(s1 & s2)
```

输出：__________________

**第10题** 写出下面代码的输出结果：

```python
s1 = {1, 2, 3, 4}
s2 = {3, 4, 5, 6}
print(s1 | s2)
```

输出：__________________

**第11题** 写出下面代码的输出结果：

```python
s1 = {"cat", "dog", "fish"}
s2 = {"dog", "bird", "cat"}
print(s1 - s2)
```

输出：__________________

**第12题** 写出下面代码的输出结果：

```python
s1 = {5, 10, 15}
s2 = {10, 20, 25}
print(s2 - s1)
```

输出：__________________

**第13题** 写出下面代码的输出结果：

```python
a = {"零", "一", "二", "三"}
b = {"二", "三", "四", "五"}
print(len(a & b))
```

输出：__________________

**第14题** 写出下面代码的输出结果：

```python
a = {"零", "一", "二", "三"}
b = {"二", "三", "四", "五"}
print(len(a | b))
```

输出：__________________

---

## 四、编程题（共 32 分）

**第15题：完成交集运算代码（8分）**

```python
# 两个水果篮子的水果
basket1 = {"苹果", "香蕉", "橘子", "葡萄"}
basket2 = {"香蕉", "橘子", "西瓜", "草莓"}

# 请用交集运算找出两个篮子都有的水果
common = __________________
print(f"两个篮子都有的水果：{common}")
```

**第16题：完成并集运算代码（8分）**

```python
# 两个小组的成员
group1 = {"小明", "小红", "小刚"}
group2 = {"小红", "小丽", "小华"}

# 请用并集运算合并两个小组的所有成员（不重复）
all_members = __________________
print(f"合并后的所有成员：{all_members}")
```

**第17题：集合运算综合应用——图书馆书籍统计（16分）**

某小学图书馆有两个书架，用集合记录书籍编号：

```python
shelf_a = {101, 102, 103, 104, 105, 106, 107, 108}
shelf_b = {105, 106, 107, 108, 109, 110, 111, 112}
```

请完成以下任务：

1. 找出两个书架都有的书籍编号（交集）
2. 找出两个书架所有书籍编号（并集，不重复）
3. 找出书架A有但书架B没有的书籍编号（差集）
4. 找出书架B有但书架A没有的书籍编号（差集）
5. 分别输出以上四个结果并打印数量

```python
shelf_a = {101, 102, 103, 104, 105, 106, 107, 108}
shelf_b = {105, 106, 107, 108, 109, 110, 111, 112}

# 请在此处写代码

```

---

## 五、挑战题（附加 10 分）

**第18题：三个集合的综合运算**

已知三个班级的兴趣爱好集合：

```python
class_a = {"跳绳", "画画", "唱歌", "编程", "阅读"}
class_b = {"画画", "唱歌", "跳舞", "篮球", "阅读"}
class_c = {"唱歌", "编程", "阅读", "跳绳", "围棋"}
```

请完成以下要求：
1. 找出三个班都有的兴趣爱好（三个集合的交集）
2. 找出至少有一个班有的所有兴趣爱好（三个集合的并集）
3. 找出A班有但B班和C班都没有的兴趣爱好（A减去B和C的并集）
4. 统计三个班总的兴趣爱好种类数（三个集合并集的元素个数）
5. 找出只在两个班中出现的兴趣爱好（提示：可以用交集和差集组合判断）

```python
class_a = {"跳绳", "画画", "唱歌", "编程", "阅读"}
class_b = {"画画", "唱歌", "跳舞", "篮球", "阅读"}
class_c = {"唱歌", "编程", "阅读", "跳绳", "围棋"}

# 请在此处写代码

```

---

## 提交说明

- 提交方式：下节课前交给老师
- 编程题需在电脑上运行通过
- 选择题和填空题直接写在题目旁

---

## 教师批阅栏

| 题型 | 满分 | 得分 |
|:----:|:----:|:----:|
| 填空题（1-8） | 20 | |
| 选择题（1-8） | 24 | |
| 代码阅读（9-14） | 24 | |
| 编程题（15-17） | 32 | |
| 挑战题（18） | 10 | |
| **总分** | **110** | |

**评语：** ____________________________________________________________


---

**自我评价：** □ 全都会了  □ 大部分会了  □ 还要再练练
