# G3-19 课后练习 —— 枚举法
> **GESP等级：三级 | 考级考点：GESP Python 三级**

**姓名：__________  日期：__________**

---

**复习口诀（先背一遍）：**
> "枚举枚举，一个一个来"
> "范围→遍历→判断，三步搞定枚举法"
> "for循环里加if，符合条件的就出来"

---

## 第一关：基础闯关（必做）

### 第1题 找奇数之和（15分）

用枚举法计算 **1~100之间所有奇数的和**。

```python
# 你的代码：










```

**预期输出：** 1~100之间奇数的和 = 2500

### 第2题 统计7的倍数（15分）

统计1~200之间有多少个7的倍数，并打印出来。

```python
# 你的代码：










```

### 第3题 找出因数（20分）

输入一个正整数，用枚举法找出它的所有因数。

**示例运行：**
```
请输入一个数：12
12的因数有：1 2 3 4 6 12
```

```python
# 你的代码：










```

---

## 第二关：进阶挑战（选做）

### 第4题 质数判断器（20分）

用枚举法判断一个数是不是质数（只能被1和自身整除）。

**提示：** 枚举2到num-1，看有没有能整除的。如果有，就不是质数。

```python
# 你的代码：










```

### 第5题 完数查找（20分）

在1~10000之间查找所有完数（完美数），并打印每个完数的因子。

**示例：**
```
6 = 1 + 2 + 3
28 = 1 + 2 + 4 + 7 + 14
...
```

**提示：** 用两层循环，外层遍历数字，内层找因子。

```python
# 你的代码：










```

---

## 第三关：创意挑战（选做）

### 第6题 密码破解模拟（+30分）

一个三位数的密码锁，密码是100~999之间的一个数。
用枚举法破解它！

**要求：**
1. 程序先设定一个密码（用 random 生成）
2. 用枚举法从100试到999
3. 记录试了多少次找到密码
4. 打印破解过程（每隔50次打印一次进度）

```python
import random

# 设定密码（三位数）
password = random.randint(100, 999)
print(f"密码已设定（不告诉你）")

# 用枚举法破解
for guess in range(100, 1000):
    # 你的代码
    pass
```

```python
# 你的代码：










```

### 第7题 数字黑洞（Kaprekar常数）（+30分）

任选一个三位数，按以下规则操作，最终会得到6174（Kaprekar常数）：
1. 把数字的各位从大到小排列 → 得到大数
2. 把数字的各位从小到大排列 → 得到小数
3. 大数 - 小数 = 新数
4. 重复，最终会得到6174

用枚举法验证：**所有不同的三位数**（各位不全相同）最终都会到6174。

**提示：**
- 枚举100~999
- 跳过各位相同的数（如111、222...）
- 对每个数模拟规则，直到得到6174
- 统计步数

```python
# 你的代码：










```

---


\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_

**完成情况：**
- [ ] 第一关全部完成（共3题）
- [ ] 第二关完成（共2题）
- [ ] 第三关完成（共2题）

**本次作业用时：** \_\_\_\_\_ 分钟

---

**参考答案提示：**
- 奇数的判断：`i % 2 != 0`
- 因数的判断：`num % i == 0`
- 质数的判断：如果从2到num-1都没有整除的，就是质数
- 枚举优化：检查到 num//2 或 sqrt(num) 就够了


---

**自我评价：** □ 全都会了  □ 大部分会了  □ 还要再练练
