# 学习打卡与统计

前置：第 00—13 章

写一个命令行学习记录本：添加日期、学习分钟和主题；下次打开仍可读取；汇总次数、总分钟和平均分钟。分钟必须为非负整数，主题不能为空。文件损坏时报告问题，不把坏文件当空记录覆盖。

### 1 先写核心函数
先对内存中的记录列表写 summarize(records)，输入 30、60 分钟时总量为 90、平均 45.0。空列表返回平均 None。此时完全不需要文件或命令行。

### 2 加入文件持久化
用 JSON 保存记录列表。文件不存在视作首次使用，返回空列表；文件存在但内容错误则抛出清楚异常。分清这两种情况，避免误覆盖用户数据。

### 3 检查输入再修改
将日期用 date.fromisoformat 验证；分钟用整数且非负检查；主题 strip 后检查非空。所有检查通过后才 append。

### 4 加入命令行入口
argparse 是标准库命令行参数解析器。add 子命令收 minutes 与 topic；summary 子命令显示统计；--store 指定记录位置。看不懂时先运行 --help，再按已给命令练习。

### 5 独立扩展
增加按主题汇总，不直接改现有统计函数；给新函数写 3 个例子。进一步可做删除记录，但先为每条记录设计稳定 ID，并明确删除规则。

### 运行命令

从学习包根目录执行。Windows 用 py，Mac 用 python3，激活环境后可用 python。

```terminal
python projects/01_study_log/app.py add 30 "变量与类型" --date 2026-10-07
python projects/01_study_log/app.py add 60 "循环练习" --date 2026-10-08
python projects/01_study_log/app.py summary
```

### 预期结果

初始无记录时执行两次 add，分别显示已保存 1 条和 2 条；summary 显示记录数 2、总分钟 90、平均分钟 45.0。反复 add 会继续追加，所以重复练习前可使用 --store 指向另一个新的练习文件。

### 验收

运行学习包的 python tools/check_projects.py 核验参考实现；自己的实现按上面手算结果和边界逐项验证。


## 独立实现记录

- 输入约定：
- 输出约定：
- 最小样例手算：
- 空数据测试：
- 边界测试：
- 错误输入测试：
- 我的新增功能：
