第 7 章:综合实战——写一个记账程序

恭喜你走到最后一章!这一章没有新知识,而是把前六章全部串起来, 从零写一个真实能用的小程序:个人记账本。

做完这个项目,你就完成了从"学语法"到"写程序"的跨越。

7.1 需求分析

我们要做的记账程序能:

  1. 记一笔:记录日期、项目、金额
  2. 看统计:总共花了多少、一共几笔
  3. 找重点:哪一笔最贵
  4. 看全部:打印完整账单
  5. 数据保存在 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. 菜单循环:用 当 真: 加 输入() 做一个"1 记账 / 2 查统计 / 3 退出"的菜单。
  2. 按月份统计:用 时间.今天() 截取年月(文本切片 日期文本[0:7]),把当月的账单独汇总。
  3. 预算提醒:设定每月预算,超过就打印"⚠️ 超支了"。
  4. 分类统计:给每笔记一个类别(餐饮/交通/学习),用字典按类别累加金额。

第 2 条的提示:基石的文本支持切片,"2026-09-01"[0:7] 得 "2026-09"。

7.6 你已经学会什么了

章节你掌握的能力
第 1 章打印、变量、注释
第 2 章数字运算、文本处理、输入、列表
第 3 章判断、循环、逻辑组合
第 4 章函数、作用域、递归
第 5 章字典、嵌套数据
第 6 章文件读写、标准库、CSV 表格
第 7 章综合运用:需求→设计→实现

接下来还有三章进阶内容:

下一步可以做的方向:

写程序最大的秘密是:多写。遇到不会的,先试、再查、再试。 祝你在基石的世界里玩得开心!