第 7 章:综合实战——写一个记账程序
恭喜你走到最后一章!这一章没有新知识,而是把前六章全部串起来, 从零写一个真实能用的小程序:个人记账本。
做完这个项目,你就完成了从"学语法"到"写程序"的跨越。
7.1 需求分析
我们要做的记账程序能:
- 记一笔:记录日期、项目、金额
- 看统计:总共花了多少、一共几笔
- 找重点:哪一笔最贵
- 看全部:打印完整账单
- 数据保存在 CSV 文件里,下次运行还在
7.2 设计数据格式
账本是 账本.csv,三列:
日期,项目,金额
2026-09-01,早餐,8
第一行表头只在第一次运行时写入——这就需要 文件.文件存在 判断。
7.3 完整代码
python# 记账程序:综合运用函数、字典、文件、表格、时间、判断、循环
导入 表格
导入 时间
导入 文件
令 账本 = "账本.csv"
# 第一次运行时建立账本(表头)
如果 非 文件.文件存在(账本):
表格.写表格(账本, [["日期", "项目", "金额"]])
# 记一笔:一行代码完成录入
函数 记一笔(项目, 金额):
表格.追加(账本, [时间.今天(), 项目, 文本(金额)])
记一笔("早餐", 8)
记一笔("地铁", 4)
记一笔("买书", 45)
记一笔("午餐", 15)
# 读取账本并统计
令 t = 表格.读表格(账本)
令 s = 表格.汇总(t, "金额")
打印("共", s["个数"], "笔,合计", s["总和"], "元")
# 找出最贵的一笔
令 从贵到便宜 = 表格.排序按(t, "金额", 真)
打印("最贵的一笔:", 表格.挑选(从贵到便宜, "项目")[0])
# 全部账目
打印("---- 全部账目 ----")
遍历 行 在 表格.数据行(t):
打印(行[0], 行[1], 行[2], "元")
7.4 逐段拆解
持久化判断——非 文件.文件存在(账本): 只有文件不存在时才写表头,避免每次运行都把旧账覆盖掉。
函数封装——记一笔: 把"追加一行"的三步细节(取日期、拼行、写文件)打包成一个动作, 主程序读起来就是 记一笔("早餐", 8),像一句人话。
统计——表格.汇总(t, "金额"): 一个调用拿回 个数/总和/平均/最大/最小,不用自己写循环。
排序取第一——排序按(t, "金额", 真) 降序后,挑选(...)[0] 就是第一名。 [0] 是列表下标——排序后的第一个就是最贵的。
遍历展示——表格.数据行(t) 拿到所有行,逐行打印。
7.5 继续升级(课后挑战)
这个程序还可以越来越强,试试加上:
- 菜单循环:用
当 真:加输入()做一个"1 记账 / 2 查统计 / 3 退出"的菜单。 - 按月份统计:用
时间.今天()截取年月(文本切片日期文本[0:7]),把当月的账单独汇总。 - 预算提醒:设定每月预算,超过就打印"⚠️ 超支了"。
- 分类统计:给每笔记一个类别(餐饮/交通/学习),用字典按类别累加金额。
第 2 条的提示:基石的文本支持切片,"2026-09-01"[0:7] 得 "2026-09"。
7.6 你已经学会什么了
| 章节 | 你掌握的能力 |
|---|---|
| 第 1 章 | 打印、变量、注释 |
| 第 2 章 | 数字运算、文本处理、输入、列表 |
| 第 3 章 | 判断、循环、逻辑组合 |
| 第 4 章 | 函数、作用域、递归 |
| 第 5 章 | 字典、嵌套数据 |
| 第 6 章 | 文件读写、标准库、CSV 表格 |
| 第 7 章 | 综合运用:需求→设计→实现 |
接下来还有三章进阶内容:
- 第 8 章:语法糖(多赋值/默认参数/推导式/文本插值)
- 第 9 章:安全执行(沙箱与 MCP)
- 第 10 章:包管理(代码复用与分享)
下一步可以做的方向:
- 做题:回头把每章的"试试看"做完做熟
- 改造:把记账程序升级成你自己的版本
- 探索:翻开《语言规格》(
docs/语言规格.md)了解全部语法 - 阅读:读
examples/里的示例源码,看别人的代码怎么写
写程序最大的秘密是:多写。遇到不会的,先试、再查、再试。 祝你在基石的世界里玩得开心!