字符串 · 列表 · 字典 · 文件,周末做出一个真正能用的学习记录器 · 第 15-21 天
第二周你已经能独立写出一个完整程序了。这一周咱们把电脑处理数据的四样基本功练熟:把文字玩熟(字符串)、把一排数据玩转(列表)、学会给数据贴名字(字典)、让程序能存盘和读盘(文件)。
周末你会做出一个真正用得上的小东西——学习记录器:每天记下你在大学各门课上花了多少时间、成就感几分,程序帮你存成文件,还能统计出"这周哪门课下的功夫最多"。
你现在已经是本科生了。这周开始,你写的 Python 会反过来帮你在大学的新课里提前见过、心里有底。每天都有一小块「连到你的大学课」,只要几分钟,让你上课时常有"这个我自己写过"的时刻。周中还会埋一颗 AI 的种子,亲手用列表算一次"像不像"。
| 天 | 星期 / 当天大学课 | Python 主题 | 当天产出 |
|---|---|---|---|
| D1 | 周一 · 操作系统、Linux | 字符串:切片与常用方法 | text_tool.py |
| D2 | 周二 · 操作系统、程序设计 | 列表:增删改查与遍历 | course_list.py |
| D3 | 周三 · 数据库 | 字典:靠名字找东西 | one_course.py |
| D4 | 周四 · 课最满(4 门) | 减负日 · 只读文件 | read_note.py |
| D5 | 周五 · Java、计算机网络 | 写文件 + 一颗 AI 种子 | save_log.py / ai_seed.py |
| D6 | 周六 · 没课 | 综合项目 v1:录入与存盘 | study_log_v1.py |
| D7 | 周日 · 没课 | v2 统计 + 验收 | study_log_v2.py |
每天 30-60 分钟,跑通就算完成。周四课最多,那天只安排 20-30 分钟,别硬撑。还是老规矩:报错不是失败,按三步看——最后一行 → 行号 → 错误名;每跑通一个发截图存档。这周依旧只用文字教程,看懂例子就动手,动手题全是为你的课表原创的,网上没有现成答案。
len("hello")、"hi".upper()、"a-b-c".split("-")、"x".replace("x","y")、切片 "abcdef"[1:4],看结果s="ab" 再取 s[5] → 报 IndexError。记住:编号从 0 开始,最大只能取到"长度减 1"s="abc"; s[0]="z" → 报错。记住:字符串本身不能逐个字改,要改就用替换或重新拼一个新的s="abcdef",那么 s[1:4] 是哪几个字符?(提示:和 range 一样前闭后开,取到 4 之前)"2026-09-06" 拆成了 2026、09、06 三段,它大概调用了字符串的什么方法、用什么当分隔符?"cat" 变成 "car",除了 replace 还能怎么拼出新字符串?text_tool.py(原创,自己写):让用户输入一句英文句子,程序依次输出——这句话有多少个字符、全大写的版本、把所有空格替换成横线的版本、按空格拆开后一共有几个词。s[1:4] 为什么是 bcd。a=[3,1,2],然后依次试 a.append(4)、a.insert(0,9)、a.remove(9)、a.pop()、len(a)、3 in a、sorted(a),每步打印 a 看变化b=sorted(a) 打印 a 和 b;再 a.sort() 打印 a。发现区别了吗(动脑题要用到)a=[1,2]; a.append(3,4) 一次塞两个 → 报错。记住 append 一次只加一个a=[3,1,2],执行 b=sorted(a) 之后,a 本身变了吗?那要真的把 a 排成有序,该调用什么?remove 一个列表里根本没有的东西,会发生什么?(可以故意试一次看报错名)course_list.py(原创,用你自己的课):用一个列表存这学期 6 门课的名字;程序依次做到——打印一共几门课、排序后打印一遍、让用户输入一门课名字并判断它在不在列表里(用 in)、用编号取出最后一门课(注意编号从 0)。d={"name":"数据库","teacher":"宋老师"},试 d["name"]、d.get("name")、d["weekday"]="周三"(加新键)、改一个已有键的值、用 d.items() 配合 for 把每对"名字:内容"打印出来d["xxx"] → KeyError。记住两条路:先 "xxx" in d 判断,或用 d.get("xxx")(找不到给 None,不崩)one_course.py(原创):用一个字典存你今天上的一门课,键分别是 name(课名)、teacher(老师)、weekday(周几)、minutes(今天学了多少分钟);程序先拼出一句完整的话打印——"周X 的 XX 课,老师是 XX,我投入了 XX 分钟";再把"教室"这个新键加进字典,打印整个字典看看变化。note.txt,随手写三行字,保存到和程序同一个文件夹with open("note.txt", encoding="utf-8") as f: txt=f.read(),然后 print(txt)f.readlines(),看它是不是变成了"一行一个元素"的列表encoding="utf-8"(Windows 上尤其要记得)。read_note.py:读取你自己建的 note.txt,先输出一共有多少字符,再按行输出"第1行:…、第2行:…"。"w" 是覆盖写(一打开就清空重写),用 "a" 是往后追加(保留旧内容、接着写)。写进文件后,哪怕关掉程序、重启电脑,下次数据都还在——所有软件的"保存"按钮,原理都是这个。with open("out.txt","w",encoding="utf-8") as f: f.write("第一行\n") 写一次,打开文件看;再跑一遍同样的代码,看是不是被覆盖成最新内容"w" 换成 "a" 连跑三次,打开文件看三行是不是都还在——这就是 w 和 a 的区别"r" 模式去 write → 报错;写进去的如果是数字,要先用 str() 转成文字save_log.py:让用户输入今天一门课的名字和学了多少分钟,程序把"课名,分钟"这样一行用追加模式(a)存进 study.txt;连续运行 3 次,最后打开 study.txt,能看到整整齐齐三行记录。a=[1,1,0]、b=[1,0,1]、c=[1,1,1]。用你会的列表和循环,数一数 a 和 b 有几位相同、a 和 c 有几位相同。相同的位置越多,就代表越"像"。这就是"相似度"最原始的算法,也是 AI 把文字变成坐标、再判断两句话意思近不近的地基。ai_seed.py(5-10 行);写不出也不影响本周达标。到这儿就够了:不用去查神经网络、Transformer 这些词,它们是后面很多周才慢慢长出来的。今天只记住一句话——AI 的起点,就是你手里这张列表。(启动,先找以前的记录) 还没有历史,本次新建 录入学习记录(输入 q 结束) 课名:数据库 学了多少分钟:45 成就感(1-5):4 课名:操作系统 学了多少分钟:30 成就感(1-5):3 课名:计算机网络 学了多少分钟:25 成就感(1-5):4 课名:q 本次存盘 3 条
黑框里的输出文字不用逐字模仿:下次再启动时,开头会先显示「历史累计 3 条」。你的程序只要能录入 3 条、存进 study.txt、关掉重开还能把这 3 条读出来,就算完成。
study_log_v1.py(原创,网上没有现成的)。先用一张干净的 study.txt 开始(把 D5 的练习文件删掉,或用 w 模式打开写个空,正好复习周五的「覆盖」);最低要求:能录 3 条、能存盘、关掉重开还能读到这 3 条。卡住可以问,只给提示不给完整代码。先把 v1 升级成 v2:用一个字典累计每门课的总分钟(课名当钥匙、分钟往上加),全部录完后输出"这周哪门课投入最多、一共多少分钟",再算一下全部学习总时长、成就感平均分。
大白话:v1 负责"记下来、存得住",v2 多做一步"算给你看"——用字典当计数器,遇到一门课就把它的分钟加到对应名字下面,最后比一比谁最大。
三周前你还在怕报错,这一周结束时,你的程序已经能存盘、能读回、能做统计,你还亲手碰到了数据库表的雏形,和人工智能"判断像不像"的第一步。
之后上大学的课,你会越来越多地冒出一个念头:"这个,我自己写过。"那不是巧合,是一周一个能用的小东西攒出来的。不用急,咱们接着往下走。
提前剧透一点点下周:你手里的数据结构会再"长一级"——一种能装下别的列表的列表,还有一种靠名字找东西、但名字绝不会重复的新格子。咱们下周见。