# 2.5-2.7 培训内容：数字类型、运算符与实训

## 课程定位

- 对象：已学变量、基本类型与输入输出的 Python 初学者。
- 建议时长：90 分钟；重点时间留给常用算术、比较和逻辑。
- 先修要求：会运行 Notebook，理解 `int/float/str/bool` 的基本含义。
- 参考教材：`../2.5-2.7.pdf`，对应《Python 快速编程入门（第 3 版）》第 2.5-2.7 节。
- 课堂材料：`../第02讲_Python数值类型与运算符.ipynb`、`课堂Slides.tex`/`课堂Slides.pdf`、`课后练习.py`。

课程沟通目标：课程结束时，学生应能把数字文本转换为正确数值，选择合适的运算符写出清楚公式，并用边界样例检查结果。

## 学习目标与验收

| 目标 | 学生可观察行为 | 验收方式 |
|---|---|---|
| 识别数字类型 | 区分 `int/float/bool` | 类型快问快答 |
| 区分常用数值类型 | 解释 `10`、`10.0` 与 `"10"` 的差异 | 类型快问快答 |
| 安全完成转换 | 能捕获或解释 `ValueError` | 三个文本转换实验 |
| 选择算术运算 | 正确使用 `/ // % **` | 分钟换算 |
| 表达业务条件 | 使用比较、逻辑、成员运算 | 商品筛选微案例 |
| 写清多步公式 | 主动使用括号、检查分母和边界 | 净销售额计算 |
| 完成综合实训 | 时间间隔与 BMI 计算可复跑 | 输入样例验收 |

## 90 分钟流程

| 时间 | 教学环节 | 教师动作 | 学生活动 | 形成性评价 |
|---:|---|---|---|---|
| 0-10 分钟 | 类型热身 | 展示 `10`、`10.0`、`"10"` | 预测相等比较 | 能否区分数值与文本 |
| 10-20 分钟 | 整数与浮点数 | 用计数、库存和金额变量举例 | 判断变量类型与结果类型 | 是否能为数量选择 `int` |
| 20-32 分钟 | 浮点与布尔 | 演示 `0.1+0.2`、真值 | 解释 `bool("False")` | 是否理解非空文本真值 |
| 32-45 分钟 | 类型转换 | 用成功和失败文本演示 `try/except` | 判断哪些文本可转为数值 | 是否理解 `int(3.9)` 为截断 |
| 45-60 分钟 | 算术与赋值 | 对比 `/ // % **` 和复合赋值 | 将 125 分钟拆分 | 商和余数是否匹配 |
| 60-72 分钟 | 比较、逻辑、成员 | 用 99/100/101 测边界，组合商品条件 | 写出重点商品条件 | 括号与边界是否清楚 |
| 72-81 分钟 | 时间间隔实训 | 带读“统一分钟—求差—拆分” | 验证普通与跨午夜样例 | 17:10→18:15 得 1:05 |
| 83-88 分钟 | BMI 实训 | 强调公式、单位、身高正数校验 | 修改两个输入样例 | 公式括号是否正确 |
| 88-90 分钟 | 离场检验 | 提问 `125 // 60` 与 `125 % 60` | 口述并提交表达式 | 能否解释计算含义 |

## 核心讲解

### 1. 外观、值和类型是三个层面

`10` 是整数，`10.0` 是浮点数，`"10"` 是字符串。前两个可以进行数值计算，文本则需要先确认格式正确再转换。计数、页码、库存等不带小数的业务量优先使用 `int`。

### 2. 浮点误差不是 Python 算错

许多常见小数在计算机中只能近似存储。课堂只要求学生掌握三种处理思路：展示时格式化、近似比较用 `isclose`、精确金额考虑整数分或 `Decimal`。不要让学生把每次差异都靠随意 `round` 掩盖。

### 3. 转换需要说明失败路径

演示 `float("42")`、`float("3.14")`、`float("abc")`。使用 `try/except ValueError` 给出清楚反馈。强调 `int(3.9)` 截去小数部分，不是四舍五入。

### 4. 三种除法对应不同问题

- `/` 回答“精确商是多少”。
- `//` 回答“完整装下几组”。
- `%` 回答“还剩多少”。

用 125 分钟转换为 2 小时 5 分钟，将整除与取余组成一个完整语义。

### 5. 条件的难点是边界和分组

让学生用 99、100、101 测试阈值，不能只凭自然语言猜 `>` 还是 `>=`。多条件中每一项先保存为清楚的布尔变量，再用 `and/or/not` 组合。成员判断使用集合能直接表达允许值清单。

### 6. 公式用括号声明业务口径

`(sales_quantity - return_quantity) * unit_price` 明确表示先扣退单再乘单价。检查分母为零、输入单位一致、边界是否包含等号，是竞赛代码的基础质量要求。

## 实训组织

### 实训一：时间间隔计算器

分解步骤：

1. 起始时刻转为总分钟；
2. 结束时刻转为总分钟；
3. 求差；若允许跨午夜，对 `24 * 60` 取模；
4. 用 `// 60` 和 `% 60` 拆回小时、分钟。

验收样例：`17:10 → 18:15` 得 1 小时 5 分；进阶样例 `23:50 → 00:20` 得 0 小时 30 分。

### 实训二：BMI 计算

公式为 `weight_kg / (height_m ** 2)`。检查身高大于 0，明确单位为千克和米，结果只做数值练习，不给出医疗诊断或个体健康结论。

## 常见误区与纠偏话术

| 误区 | 纠偏 |
|---|---|
| `10.0` 与 `10` 外观相近，类型就完全相同 | 前者是浮点数，后者是整数；要按业务语义选择类型 |
| `int(3.9)` 会四舍五入 | 它直接截去小数部分 |
| `bool("False")` 是假 | 非空字符串的真值为真 |
| `//` 等于普通除法后随意取整 | 它是向下取整，负数时尤其要注意 |
| 背熟优先级就不用括号 | 业务公式仍要用括号声明口径 |
| 只测一个正常样例 | 至少加入边界、零值或跨日样例 |

## 课后练习使用方式

1. 学生只修改 `课后练习.py` 中的 `TODO`。
2. 每个结果先预测，再运行并用一句话解释。
3. 时间间隔至少测试普通和跨午夜两个样例。
4. BMI 只验算公式、单位和零值校验，不做健康诊断。

评分建议：数字类型与转换 20%，算术与赋值 25%，条件表达 20%，公式与边界 20%，代码可读性与解释 15%。
