# G3-05 课后练习 —— 集合set
> **GESP等级：三级 | 考级考点：GESP Python 三级**

**姓名：__________  日期：__________**

---

> 面向7-10岁少儿 | G3 算法入门

---

## 一、填空题（回顾概念）

**题目1：** 集合中的元素是____序的（有/无），且元素不能____。创建一个空集合要用____()，而不是{}（{}创建的是空字典）。

**题目2：** 集合 `s = {1, 2, 3}`，执行 `s.add(4)` 后，`s` 变为____。再执行 `s.remove(2)` 后，`s` 变为____。

---

## 二、代码补全（补写代码）

**题目3：** 有两个班级的学生名单，请用集合运算找出：两个班都有的学生、只在一个班的学生。补全代码。

```python
class_a = {"小明", "小红", "小刚", "小丽", "小华"}
class_b = {"小刚", "小丽", "小强", "小美", "小华"}

# 两个班都有的学生（交集）
both = class_a.____(class_b)
print("两个班都有：", both)

# 只在class_a的学生（差集）
only_a = class_a.____(class_b)
print("只在A班：", only_a)

# 两个班合并后去重（并集）
all_students = class_a.____(class_b)
print("所有学生（去重）：", all_students)
```

**题目4：** 编写程序，去掉列表中重复的数字。补全代码。

```python
numbers = [1, 3, 5, 3, 7, 9, 1, 5, 7, 9, 9]

# 用集合去重
unique_set = ____(numbers)
print("去重后的集合：", unique_set)

# 再转回列表
unique_list = ____(unique_set)
print("去重后的列表：", unique_list)

# 排序后输出
unique_list.sort()
print("排序后的列表：", unique_list)
```

---

## 三、创作题（动手编程）

**题目5：** 编写一个"幸运抽奖"程序。
- 有一个奖池集合 `prize_pool = {"玩具车", "布娃娃", "积木", "绘本", "水彩笔", "拼图", "魔方"}`
- 有三位获奖者，每人抽走一个奖品（从奖池中随机选一个并移除）
- 每抽走一个，打印"xxx 抽走了：xxxx"，并显示剩余奖池
- 用集合的 `pop()` 或 `random.choice` 实现
- 最后打印所有被抽走的奖品集合

请写出完整代码。

<details>
<summary>参考答案</summary>

**题目1：** 无，重复，set

**题目2：** {1, 2, 3, 4}，{1, 3, 4}

**题目3：**
```python
class_a = {"小明", "小红", "小刚", "小丽", "小华"}
class_b = {"小刚", "小丽", "小强", "小美", "小华"}

both = class_a.intersection(class_b)
print("两个班都有：", both)

only_a = class_a.difference(class_b)
print("只在A班：", only_a)

all_students = class_a.union(class_b)
print("所有学生（去重）：", all_students)
```

**题目4：**
```python
numbers = [1, 3, 5, 3, 7, 9, 1, 5, 7, 9, 9]

unique_set = set(numbers)
print("去重后的集合：", unique_set)

unique_list = list(unique_set)
print("去重后的列表：", unique_list)

unique_list.sort()
print("排序后的列表：", unique_list)
```

**题目5：**
```python
import random

prize_pool = {"玩具车", "布娃娃", "积木", "绘本", "水彩笔", "拼图", "魔方"}
winners = ["小明", "小红", "小刚"]
drawn = set()

print("===== 幸运抽奖开始！=====")

for winner in winners:
    prize = random.choice(list(prize_pool))
    prize_pool.remove(prize)
    drawn.add(prize)
    print(f"🎉 {winner} 抽走了：{prize}")
    print(f"   剩余奖池：{prize_pool}\n")

print("===== 抽奖结束 =====")
print(f"共抽出奖品：{drawn}")
```
</details>


---

**自我评价：** □ 全都会了  □ 大部分会了  □ 还要再练练
