# 2.1-2.4 培训内容：代码格式、变量与输入输出

## 课程定位

- 对象：Python 零基础、准备参加商务数据分析竞赛的学生。
- 建议时长：90 分钟；若学生第一次接触 Jupyter，可扩展到 110 分钟。
- 先修要求：能启动 Notebook 或运行 `.py` 文件。
- 参考教材：`../2.1-2.4.pdf`，对应《Python 快速编程入门（第 3 版）》第 2.1-2.4 节。
- 课堂材料：`../第01讲_Python代码规范、变量与输入输出.ipynb` 用于现场运行；`课堂Slides.tex`/`课堂Slides.pdf` 用于投影；`课后练习.py` 用于学生独立练习。

课程沟通目标：课程结束时，学生应能把一条来自键盘的数字文本转换成可计算的变量，并用规范、可读、可检查的代码输出一个完整结果。

## 学习目标与验收

| 目标 | 学生可观察行为 | 验收方式 |
|---|---|---|
| 解释格式规则 | 能指出注释、缩进、换行各自作用 | 诊断一段错误代码 |
| 写合法变量名 | 能说明非法原因并改为 `snake_case` | 变量名投票与口述 |
| 辨认常见类型 | 能区分 `125` 与 `"125"` | `repr()`、`type()` 输出 |
| 完成输入转换 | 能把模拟输入转为 `int/float` | 销售额微任务 |
| 组织清楚输出 | 能使用标签、分隔和两位小数 | 购物小票实训 |
| 迁移到模板输出 | 能把变化字段设计为参数 | 植树证书实训 |

## 90 分钟流程

| 时间 | 教学环节 | 教师动作 | 学生活动 | 形成性评价 |
|---:|---|---|---|---|
| 0-8 分钟 | 错误引入 | 展示 `"19.9" * 3`，先不解释 | 预测结果并说明理由 | 是否意识到“外观不等于类型” |
| 8-22 分钟 | 代码格式 | 对比注释、正确/错误缩进、括号换行 | 判断每行属于哪个代码块 | 能否定位缩进错误 |
| 22-35 分钟 | 标识符与关键字 | 用 `isidentifier()`、`keyword.iskeyword()` 现场验证 | 将不清楚名称改为业务名称 | 合法、含义、风格三关 |
| 35-50 分钟 | 变量与类型 | 演示重新赋值、`type()`、六类值 | 填写“值—类型—业务含义”表 | 能否区分数字与数字文本 |
| 50-63 分钟 | 输入与输出 | 模拟 `input()`，转换后计算；比较 `print` 写法 | 完成单条销售额计算 | 输出中是否有标签和单位 |
| 63-76 分钟 | 购物小票实训 | 带读函数的输入、计算、输出、返回值 | 修改商品、数量、单价并复跑 | 金额是否正确且保留两位小数 |
| 76-84 分钟 | 植树证书实训 | 强调固定结构与变化字段 | 增加一个证书字段 | 是否通过参数传入变化数据 |
| 84-90 分钟 | 离场检验 | 给出四项独立任务 | 口述 `=` 与 `==`，提交代码截图 | 是否走完输入—转换—计算—输出 |

## 核心讲解

### 1. 格式是语法的一部分

先让学生判断“这一行属于谁”，再讲四空格规则。不要把缩进只讲成排版美观：同一段代码的缩进层级直接决定执行逻辑。对于长条件，优先使用括号换行，使每个条件对齐。

课堂追问：

1. 注释会不会执行？
2. 为什么相邻两行 `print` 需要相同缩进？
3. 为什么括号换行比反斜杠更稳妥？

### 2. 名称先合法，再表达业务含义

合法规则只回答“解释器是否接受”，不回答“人是否看得懂”。使用 `sales_quantity`、`unit_price`、`return_quantity`，让后面的业务公式近似自然语言。提醒学生不要覆盖 `str`、`list`、`sum`、`type`、`input` 等内置名称。

课堂追问：`x` 合法，为什么仍不适合作为贯穿整份竞赛代码的字段名？

### 3. 变量不是永远固定类型的盒子

初学阶段可将变量理解为“贴在当前值上的名称”。Python 允许名称重新指向不同类型，但业务代码中应保持同一变量含义稳定。将输入阶段命名为 `price_text`，转换后命名为 `price`，能显式表达阶段变化。

### 4. `input()` 的第一原则：返回字符串

不使用真实键盘输入执行 Notebook，而使用 `price_text = "19.9"` 模拟，保证整本 Notebook 可以自动运行。现场需要互动时，可临时换为 `input()`。强调转换失败是输入验证问题，不应靠猜测修复。

### 5. 输出承担展示和诊断两种任务

- 面向结果：标签、单位、小数位、稳定顺序。
- 面向排错：`repr(value)` 显示引号和转义，`type(value)` 显示类型。

先展示“孤立的 59.7”，再展示“销售额：59.70 元”，让学生比较哪一个更可检查。

## 实训组织

### 实训一：购物小票

最低完成标准：

1. 商品、数量、单价由变量或参数提供；
2. 总额由程序计算，不手填；
3. 金额显示两位小数和单位；
4. 函数返回数值总额，便于后续汇总。

进阶要求：增加折扣前金额、折扣额和实付金额，但每个口径都要先写成变量再输出。

### 实训二：植树证书

最低完成标准：昵称、植物名称、证书编号由参数传入；输出顺序稳定。进阶要求：增加申请日期或种植地点，并保持字段对齐。

## 常见误区与纠偏话术

| 误区 | 纠偏 |
|---|---|
| “运行了就说明正确” | 同时检查值、类型和业务口径 |
| 三引号全部等于注释 | 它创建字符串；位于函数开头时常作为说明文档 |
| 变量名合法就足够 | 竞赛代码还要让评分者快速读懂 |
| `input()` 输入数字就得到数字 | 键盘输入仍是字符串，需要显式转换 |
| f-string 把原值变成两位小数 | 格式化只影响展示，不修改变量本身 |
| 报错从头乱改 | 先看错误类型、行号、当前行和上一行 |

## 课后练习使用方式

1. 学生复制 `课后练习.py`，只修改 `TODO` 标记位置。
2. 每一部分先写预测，再运行。
3. 运行结束不应出现异常；输出需包含可识别标签。
4. 教师抽查重点：变量命名、输入转换、金额类型、函数参数、输出格式。

评分建议：格式与命名 20%，类型与转换 25%，计算正确 25%，输出清楚 20%，解释与自检 10%。
