用 `with open()` 打开文本文件、`read()` 读取全内容、`for line in file` 逐行遍历、处理换行符 `\n`——Python 文件 I/O 的四大基础操作
读取文件中的整数,用辅助变量模式找出最大值——文件 I/O 与算法模式的首次结合
CSV 是用分隔符组织数据的文本文件;`split()` 将一行字符串按分隔符切分为字段列表——连接文件读取与结构化数据的关键桥梁
CSV 文件 → split() 拆字段 → 键值填入字典 → 返回结构化数据
三函数共享同一文件读取——抽取辅助函数避免重复 open() 与解析,代码复用的首次实践
文件句柄读完即止、strip() 清洗脏数据、多文件按共同键合并——三个独立但互补的数据处理技能
input() + 读两 CSV + 按 id 关联 + print —— 完整数据处理管道的首次实践
读三 CSV + 练习百分比换算 + 等级评定 —— 在 course-grading-1 基础上扩展
同(二)的数据处理 + f-string 格式化表格输出 —— 列对齐与表头
读单词表 + 大小写不敏感比对 + 错误词加星号标注 —— 首个实用工具型程序
解析多食谱文件(空行分隔)+ 三个独立搜索函数 —— 首次非 CSV 结构化文件处理
CSV 坐标读取 + math.sqrt 距离计算 + 嵌套循环找最远站点对 —— 首次使用标准库数学函数
文件读取章节回顾——with open/CSV 解析/字典关联/大小写搜索
用 `open(..., "w")` 创建并写入文件、`write()` 方法与手动 `\n` 换行、追加模式 `open(..., "a")`——文件写入的两大核心操作
input() 两次 + open(..., "w") + write() —— 创建文件并把一行文本写入新文件,写文件能力的第一次实践
读已有日记 + 追加新条目 + 菜单循环(1 添加 / 2 查看 / 0 退出)——文件内容跨运行持久化的第一次完整实践
CSV 用 write() 逐行写入;从列表用 f-string 或 for 循环拼成一行(line[:-1] 去掉末尾分隔符);写模式打开即清空文件内容——把内存数据落成 CSV 文件
读 solutions.csv 判断算式对错,把正确/错误的行分流写入 correct.csv/incorrect.csv——写模式覆盖保证幂等
解包 (姓名, 年龄, 身高) 元组并追加写入 people.csv——追加模式 a 保留已有数据,与上一关 w 覆盖形成对照
单一职责原则:把 CSV 处理拆成 read_weekly_points(读+解析)/grade(算等级)/save_results(写文件)三函数,main 传文件名——易验证、易修改、易扩展
复用(三)的统计表格 + 读课程信息文件(冒号分隔)——把结果写成 results.txt 与 results.csv 两个文件,屏幕只留确认消息
读 words.txt,find_words 用三种模式匹配单词:. 匹配任一字符、* 前缀/后缀匹配、无通配符精确匹配
菜单循环(添加/搜索/退出)+ 词条追加写入 dictionary.txt + 读回子串搜索——文件持久化的完整闭环
文件写入章节回顾——写模式覆盖/追加模式累积/写两文件/删除 vs 清空
识别非法输入 + 理解异常(运行时错误)+ try/except 捕获 ValueError——输入验证与异常处理入门
while True + try/except 搭建输入验证循环:非法/越界输入打印错误消息并重试,直到拿到开区间内的整数才返回
认识 ValueError/TypeError/IndexError/ZeroDivisionError 与文件相关异常,学会一个 try 挂多个 except,理解裸 except 掩盖错误的风险
理解异常沿调用链向上传递,学会用 raise 主动抛异常做参数校验——比 print 更利于调试
校验姓名(非空/至少两词/≤40 字符)与年龄(0~150),非法参数抛 ValueError——raise 的参数校验实战
读彩票号码文件,按 5 条规则过滤(周数/数字合法、7 个、范围 1~39、无重复),把正确行写入 correct_numbers.csv——文件读写的综合练习
错误处理章节回顾——异常类型/多重 except/裸 except 风险/异常传递/raise 参数校验
理解变量的作用域、局部变量与全局变量:局部变量只在函数内可用(函数外抛 NameError),全局变量可被任何函数读取——变量作用域入门
函数内赋值创建新的局部变量遮蔽全局变量(不影响全局值),先读后赋抛 UnboundLocalError;要真正修改全局变量需用 global 关键字
全局变量不该绕过参数/返回值(有副作用难测试);但共享的'更高层'信息(如调用计数器)是合理用途——区分反模式与正当场景
函数需要数据用参数传入、产生结果用 return 返回;用 global 直接共享变量会让状态难以追踪;显式 main 让数据局部化
变量作用域章节回顾——局部变量/NameError/遮蔽/UnboundLocalError/global/传数据方式