← 返回

info-1110-advance-assessment

Advance_Assessment 2


目录


Structure


模块依赖关系

load_raw_records.py 不依赖任何项目内模块,纯文本处理;其他文件都围绕 post.py 的类展开。


类继承体系

三种类的核心区别

是否有 children角色在树中的位置
Post抽象基类不直接使用
TextPost普通文本帖叶子节点
StoryPost故事帖(可包含其他帖)分支节点

完整数据流水线


模块 1:load_raw_records

职责:把 posts.txt 文件每一行原始字符串解析为 dict,并修复 text 字段。

fix_text 字符修复算法

示例'b'(ord=98,偶数)→ 'a''a'(ord=97,奇数)→ 'b'。这是个对称变换:fix_text(fix_text(x)) == x

load_raw_records 主流程

文件中的两个版本对比

版本实现方式特点
第 1 个(被覆盖)f.readlines() 一次读完 → return list占内存
第 2 个(生效)for line in f + yield record生成器,省内存

注意:Python 中后定义的函数会覆盖前面的同名函数,所以实际生效的是第二个 yield 版本!


模块 2:build_posts

职责:把 dict 列表转换为 Post 对象字典,处理重复 ID 时合并。


模块 3:post.py

Python 技术文档#第 7 章 面向对象编程Computer science foundation note#第 18 章 面向对象核心概念

Post.__init__ 参数校验流程


StoryPost 额外校验流程


Post.merge_in 合并方法流程

💡 设计哲学:合并时点赞累加(数据汇总),但文本保留较长版本(信息更全)。


模块4:count_embedded_likes — 统计点赞总数

Python 技术文档#**第 15 章:递归函数(Recursive Functions)**Computer science foundation note#13.7 递归 vs 迭代(互相转换)

职责:递归统计某个帖子自己 + 所有后代的总点赞数。

函数主流程


递归调用栈示意(树形展开)


模块5:descendants_of — 后代查询

Python 技术文档#**第 15 章:递归函数(Recursive Functions)**Computer science foundation note#13.7 递归 vs 迭代(互相转换)

职责:递归收集某个帖子的所有后代帖子(去重 + 过滤无点赞 + 排除 solution)。

函数主流程


关键设计要点


模块6: solution_remover — 装饰器过滤

Python 技术文档#**14.2 装饰器(Decorators)**

职责:作为装饰器,自动过滤掉返回列表中任何 text 包含 “solution”(不区分大小写)的 StoryPost

装饰器


装饰器结构(洋葱模型)

最后更新 · 2026-05-19 23:52