# G2-18 课后练习 —— 简单数学函数
> **GESP等级：二级 | 考级考点：GESP Python 二级**

**姓名：__________  日期：__________**

---

> 预计用时：30分钟
> 家长陪伴建议：和孩子一起用手势比划 ceil（向上）和 floor（向下）！

---

## 📖 知识点回顾

在开始练习前，先读一读下面的"函数口诀"：

```
abs abs 吃负号，出来都是正数宝！
max max 选最高，数字堆里它最傲！
min min 选最矮，数字堆里它最小！
round round 摇啊摇，小于5舍大于5入！
ceil ceil 往上飘，不管多少都向高！
floor floor 往下掉，不管多少都向小！
sum sum 收收收，列表里的数全加走！
```

📌 **身体锚点热身**：每读一句口诀，同时做一个对应的身体动作！
- abs → 双手做"吃掉"动作 🫓
- max → 踮脚尖手往上够 ⬆️
- min → 蹲下身子手压低 ⬇️
- round → 双手平推摇晃 ↔️
- ceil → 手指向上指 ⬆️
- floor → 手指向下指 ⬇️
- sum → 双手做收拢动作 🤲

---

## ⭐ 第一关：基础知识巩固（填空题）

### 1.1 abs 绝对值

```python
# 算一算下面这些 abs 的结果
print(abs(-10))    # 输出 ______
print(abs(7))      # 输出 ______
print(abs(0))      # 输出 ______
print(abs(-3.5))   # 输出 ______
print(abs(100 - 230))  # 输出 ______
```

### 1.2 max 最大值

```python
# 找出每组中最大的数
print(max(8, 3, 12, 5))      # 输出 ______
print(max(-5, -2, -8, -1))   # 输出 ______
print(max(100, 50, 200, 75)) # 输出 ______
print(max(3.14, 2.5, 3.2))   # 输出 ______
```

### 1.3 min 最小值

```python
# 找出每组中最小的数
print(min(8, 3, 12, 5))      # 输出 ______
print(min(-5, -2, -8, -1))   # 输出 ______
print(min(100, 50, 200, 75)) # 输出 ______
print(min(3.14, 2.5, 3.2))   # 输出 ______
```

### 1.4 round 四舍五入

```python
# 把下面的小数四舍五入取整
print(round(3.2))     # 输出 ______  （3.2 离 3 更近）
print(round(3.8))     # 输出 ______  （3.8 离 4 更近）
print(round(3.5))     # 输出 ______  （正好中间，往大的走）
print(round(7.49))    # 输出 ______  （7.49 的 .49 < .5，舍掉）
print(round(7.5))     # 输出 ______  （.5 >= .5，入上去）
```

### 1.5 ceil 向上取整

```python
import math

# 不管小数是多少，都往大的整数走
print(math.ceil(2.1))     # 输出 ______
print(math.ceil(2.9))     # 输出 ______
print(math.ceil(-2.1))    # 输出 ______  （⚠️ 负数要小心！往大的方向）
print(math.ceil(8.0))     # 输出 ______  （本来就是整数）
```

### 1.6 floor 向下取整

```python
import math

# 不管小数是多少，都往小的整数走
print(math.floor(2.1))    # 输出 ______
print(math.floor(2.9))    # 输出 ______
print(math.floor(-2.1))   # 输出 ______  （⚠️ 负数要小心！往小的方向）
print(math.floor(8.0))    # 输出 ______  （本来就是整数）
```

### 1.7 sum 求和

```python
# 计算列表中所有数的和
print(sum([10, 20, 30]))        # 输出 ______
print(sum([5, 15, 25, 35]))     # 输出 ______
print(sum([100, 200, 300]))     # 输出 ______
print(sum([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]))  # 输出 ______
```

---

## ⭐⭐ 第二关：代码纠错（改错题）

下面的代码都有"小毛病"，请找出错误并改正！

### 纠错1：abs 写错了

```python
# 小明想算 -15 的绝对值，可是他写错了：
print(abz(-15))  # 错误！
```

❌ 错误原因：_________________________________

✅ 改正后的代码：_________________________________


### 纠错2：忘记 import math

```python
# 小红想用 ceil，可是运行报错了：
print(ceil(4.2))  # 错误！
```

❌ 错误原因：_________________________________

✅ 改正后的代码：_________________________________


### 纠错3：sum 忘记加方括号

```python
# 小刚想算 1+2+3+4+5 的总和：
print(sum(1, 2, 3, 4, 5))  # 错误！
```

❌ 错误原因：_________________________________

✅ 改正后的代码：_________________________________


### 纠错4：导入方式混用了

```python
# 小美写了 import math，但直接写 ceil：
import math
print(ceil(3.7))  # 错误！
```

❌ 错误原因：_________________________________

✅ 改正后的代码：_________________________________


### 纠错5：负数 ceil / floor 搞混了

```python
# 小华算来算去觉得不对：
import math
print(math.ceil(-3.7))   # 他以为结果是 -4，但实际上？______
print(math.floor(-3.7))  # 他以为结果是 -3，但实际上？______
```

❌ 小华错在哪里：_________________________________

✅ 正确答案：`math.ceil(-3.7)` = ______，`math.floor(-3.7)` = ______

---

## ⭐⭐⭐ 第三关：生活应用题

把数学函数用在真实的生活场景中！

### 题目1：温度差

> 北京今天最高温度 12℃，最低温度 -3℃。
> 请问今天的温度差是多少度？

```python
# 用 abs 来计算
温差 = abs(____ - ____)
print(f"今天的温差是 {温差} 度")
```

我的答案：温差 = ______ 度


### 题目2：身高比拼

> 四个好朋友的身高分别是：128cm, 135cm, 142cm, 119cm。
> 谁最高？谁最矮？最高和最矮相差多少？

```python
# 用 max 和 min 来找
身高列表 = [128, 135, 142, 119]
最高 = max(________)
最矮 = min(________)
相差 = abs(最高 - 最矮)

print(f"最高的是 {最高}cm")
print(f"最矮的是 {最矮}cm")
print(f"相差 {相差}cm")
```

我的答案：
- 最高：______ cm
- 最矮：______ cm
- 相差：______ cm


### 题目3：零花钱统计

> 小派一周的零花钱：周一5元，周二3元，周三8元，周四10元，周五6元。
> 一周总共多少零花钱？

```python
零花钱 = [____, ____, ____, ____, ____]
总共 = sum(________)
print(f"一周零花钱共 {总共} 元")
```

我的答案：一周共 ______ 元


### 题目4：平均分配

> 有 19 块饼干要分给 4 个小朋友。
> 每人能分到几块？（用 floor 向下取整——不能把饼干掰碎！）
> 还剩下几块？

```python
import math
饼干总数 = 19
小朋友数 = 4
每人分到 = math.floor(________ / ________)
剩下 = 饼干总数 - 每人分到 * 小朋友数

print(f"每个小朋友分到 {每人分到} 块")
print(f"还剩下 {剩下} 块")
```

我的答案：
- 每人分到：______ 块
- 剩下：______ 块


### 题目5：GESP真题模拟

> `abs(round(-7.8)) + math.ceil(3.2)` 的结果是多少？
> （一步一步算！）

```python
第一步：round(-7.8) = ______
第二步：abs(______) = ______
第三步：math.ceil(3.2) = ______
第四步：______ + ______ = ______
```

最终答案：______

---

## ⭐⭐⭐⭐ 第四关：创作挑战（编程题）

### 挑战1：画一个"函数彩虹"

用 turtle 画出 7 条不同颜色的线，每条线旁边标注一个函数的计算结果。

**要求**：
1. 7 种不同颜色（红橙黄绿青蓝紫）
2. 每条线旁边用 write() 写出一个函数的计算结果
3. 函数和结果要从 abs / max / min / round / ceil / floor / sum 中各选一个

**参考思路**：
```python
import turtle
import math

t = turtle.Turtle()
t.speed(5)
t.pensize(5)

# 7 种颜色
colors = ["red", "orange", "yellow", "green", "cyan", "blue", "purple"]

# 7 个函数的结果
results = [
    ("abs(-8)", abs(-8)),
    ("max(3,7,5)", max(3, 7, 5)),
    # 继续补充……
]

# 画彩虹
for i, (name, value) in enumerate(results):
    t.pencolor(colors[i])
    t.penup()
    t.goto(-200, 200 - i * 50)
    t.pendown()
    t.forward(150)
    t.penup()
    t.goto(-40, 200 - i * 50)
    t.write(f"{name} = {value}", font=("Arial", 14, "normal"))

turtle.done()
```

**我的彩虹代码写在这里**：

```python
import turtle
import math

# 请在这里写出你的代码

```

---

### 挑战2：函数猜猜看

自己编 3 道"函数谜题"，让同学或家长来猜答案！

**谜题格式**：
```
我的函数：______
输入数字：______
输出结果：______
```

| 题号 | 函数 | 输入 | 输出 |
|------|------|------|------|
| 谜题1 | | | |
| 谜题2 | | | |
| 谜题3 | | | |

**示例**：
> 我的函数：abs
> 输入数字：-20
> 输出结果：20

---

## 🧠 GESP 二级备考专项

### 考点1：判断返回值类型

写出下面每个表达式的**返回值**和**返回值类型**（int 或 float）：

| 表达式 | 返回值 | 类型（int/float） |
|--------|--------|-------------------|
| abs(-10) | | |
| abs(3.14) | | |
| max(5, 8, 3) | | |
| min(5, 8, 3) | | |
| round(4.7) | | |
| round(3.1415, 2) | | |
| math.ceil(2.1) | | |
| math.floor(2.9) | | |
| sum([1, 2, 3]) | | |
| sum([1.5, 2.5]) | | |

### 考点2：判断导入方式

下面哪些写法是正确的？在括号里打 ✅ 或 ❌

1. `import math` 然后写 `math.ceil(3.2)` （____）
2. `import math` 然后写 `ceil(3.2)` （____）
3. `from math import *` 然后写 `ceil(3.2)` （____）
4. `from math import *` 然后写 `math.ceil(3.2)` （____）
5. `import math as m` 然后写 `m.ceil(3.2)` （____）
6. `import math as m` 然后写 `math.ceil(3.2)` （____）

### 考点3：混合运算

计算下面表达式的值（一步一步写清楚）：

```
题目：abs(-5) + max(10, 3, 8) - round(3.7)
 
第1步：abs(-5) = ______
第2步：max(10, 3, 8) = ______
第3步：round(3.7) = ______
第4步：______ + ______ - ______ = ______

最终答案：______
```

---

## 📊 课后练习答案卡（家长用）

这部分由家长或老师保管，用于批改。

### 第一关答案

```
1.1: 10, 7, 0, 3.5, 130
1.2: 12, -1, 200, 3.2
1.3: 3, -8, 50, 2.5
1.4: 3, 4, 4, 7, 8
1.5: 3, 3, -2, 8
1.6: 2, 2, -3, 8
1.7: 60, 80, 600, 55
```

### 第二关答案

```
纠错1：函数名写错 abz -> abs
纠错2：缺少 import math
纠错3：sum 需要列表 sum([1,2,3,4,5])
纠错4：import math 后要用 math.ceil()
纠错5：ceil(-3.7)=-3, floor(-3.7)=-4
```

### 第三关答案

```
题目1：12 - (-3) = 15 度
题目2：最高142, 最矮119, 相差23
题目3：5+3+8+10+6 = 32 元
题目4：19//4=4块, 剩下3块
题目5：round(-7.8)=-8, abs(-8)=8, ceil(3.2)=4, 8+4=12
```

### 第四关

开放题，无标准答案。重点检查：
- 代码是否能运行
- turtle 是否正常画出图形
- 函数结果是否正确

---

## 🏆 完成情况统计

| 关卡 | 题目数 | 做对题数 | 完成日期 |
|------|--------|----------|----------|
| 第一关：基础巩固 | 7组 | ____/7 | |
| 第二关：代码纠错 | 5题 | ____/5 | |
| 第三关：生活应用 | 5题 | ____/5 | |
| 第四关：创作挑战 | 2题 | ____/2 | |
| GESP备考专项 | 3组 | ____/3 | |


---

## 💪 下节课预告

> **第5节：字符串魔法**
> 我们将学习字符串的"魔法操作"——拼接、切片、查找、替换……
> 下节课再见！👋


---

**自我评价：** □ 全都会了  □ 大部分会了  □ 还要再练练
