第三周学习计划 · 把数据玩转起来

字符串 · 列表 · 字典 · 文件,周末做出一个真正能用的学习记录器 · 第 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 分钟,别硬撑。还是老规矩:报错不是失败,按三步看——最后一行 → 行号 → 错误名;每跑通一个发截图存档。这周依旧只用文字教程,看懂例子就动手,动手题全是为你的课表原创的,网上没有现成答案。

D1 周一 · 把文字玩熟:字符串切片与方法

今天学什么:字符串不止是"一段文字"

涨知识 · 文字也能切开、改写、数个数 字符串就是一串可以编号的文字。第二周你往引号里放过文字,这周你会发现文字也能"切片"——像切火腿肠一样取下其中几段,还能变大写、做替换、按空格拆开。聊天、搜索、网络传输,电脑处理文字靠的全是它。
  • 资源:
  • 怎么做:
    1. 在 IDLE 里照跑这几个:len("hello")、"hi".upper()、"a-b-c".split("-")、"x".replace("x","y")、切片 "abcdef"[1:4],看结果
    2. 今天故意踩一次坑:写 s="ab" 再取 s[5] → 报 IndexError。记住:编号从 0 开始,最大只能取到"长度减 1"
    3. 再试一个:s="abc"; s[0]="z" → 报错。记住:字符串本身不能逐个字改,要改就用替换或重新拼一个新的
  • 动脑:s="abcdef",那么 s[1:4] 是哪几个字符?(提示:和 range 一样前闭后开,取到 4 之前)
  • 逆向思维:程序把 "2026-09-06" 拆成了 2026、09、06 三段,它大概调用了字符串的什么方法、用什么当分隔符?
  • 错误知识:取超过长度的位置 → IndexError;想直接改字符串里的一个字 → TypeError。想想看:如果要把 "cat" 变成 "car",除了 replace 还能怎么拼出新字符串?
  • 动手:写 text_tool.py(原创,自己写):让用户输入一句英文句子,程序依次输出——这句话有多少个字符、全大写的版本、把所有空格替换成横线的版本、按空格拆开后一共有几个词。
  • 今天完成标准:程序跑通 + 能说清 s[1:4] 为什么是 bcd。
连到你的大学课 · 周一的操作系统与 Linux 你周一上午上的操作系统和 Linux,整天都在跟"文件、命令、一行行文字"打交道。Linux 里敲的每条命令、每个文件名,对程序来说都是字符串;命令跑出来的结果也是一行行文字。你今天练的拆分、替换,就是这些工具最底层在做的事。课后花两分钟,随便看一个文件名,告诉自己:它在程序眼里就是一串文字。

D2 周二 · 一排数据玩转:列表增删改查

今天学什么:把列表真正用起来

涨知识 · 一排带编号的格子 第二周你用列表记过"对/错"。这周把它玩透:能往里加(append)、能在中间插(insert)、能删(remove / pop)、能排序(sorted)、能一个个走一遍(for 遍历)。这是"数据结构"的第一块砖,以后存任何成批的东西都靠它。
  • 资源:
  • 怎么做:
    1. 照跑:a=[3,1,2],然后依次试 a.append(4)、a.insert(0,9)、a.remove(9)、a.pop()、len(a)、3 in a、sorted(a),每步打印 a 看变化
    2. 重点对比:先 b=sorted(a) 打印 a 和 b;再 a.sort() 打印 a。发现区别了吗(动脑题要用到)
    3. 踩个坑:a=[1,2]; a.append(3,4) 一次塞两个 → 报错。记住 append 一次只加一个
  • 动脑:a=[3,1,2],执行 b=sorted(a) 之后,a 本身变了吗?那要真的把 a 排成有序,该调用什么?
  • 逆向思维:一个课程列表最后多出了一门"数据库",程序大概率调用了列表的哪个方法?如果是插到最前面呢?
  • 错误知识:越界取值是 IndexError;append 一次给多个参数是 TypeError。再想:remove 一个列表里根本没有的东西,会发生什么?(可以故意试一次看报错名)
  • 动手:写 course_list.py(原创,用你自己的课):用一个列表存这学期 6 门课的名字;程序依次做到——打印一共几门课、排序后打印一遍、让用户输入一门课名字并判断它在不在列表里(用 in)、用编号取出最后一门课(注意编号从 0)。
  • 今天完成标准:程序跑通 + 能说清 sorted 不改变原列表、而 sort 会。
连到你的大学课 · 周二的计算机程序设计 你周二上的"计算机程序设计"一定会讲到一个词叫数组——数组几乎就是你今天写的列表,只是在别的编程语言里规矩更多一些。等老师讲到数组,你会发现增、删、取长度、一个个遍历,你昨天已经亲手全做过一遍了。

D3 周三 · 给数据贴名字:字典 dict

今天学什么:不靠编号,靠"名字"找东西

涨知识 · 一把钥匙开一个格子 列表靠编号(0、1、2)找东西,可现实里我们更习惯靠名字找——查"姓名"、查"成绩"。字典就是"名字 → 内容"的配对:用一把钥匙(key)取出对应的内容(value)。一本通讯录、一张课程表、一条记录,本质都是字典。
  • 资源:
  • 怎么做:
    1. 照跑:d={"name":"数据库","teacher":"宋老师"},试 d["name"]、d.get("name")、d["weekday"]="周三"(加新键)、改一个已有键的值、用 d.items() 配合 for 把每对"名字:内容"打印出来
    2. 踩个坑:取一个根本不存在的键 d["xxx"] → KeyError。记住两条路:先 "xxx" in d 判断,或用 d.get("xxx")(找不到给 None,不崩)
  • 动脑:字典里能有两个一模一样的钥匙(key)吗?如果给同一个 key 赋两次值会怎样?(提示:想想同一个名字为什么不能贴两个盒子)
  • 逆向思维:要存一门课的"课名、老师、周几、用时",用列表还是字典更合适?为什么?
  • 错误知识:取不存在的键 → KeyError。再想:字典是靠名字找的,那它有没有"第 0 个、第 1 个"这种编号?(现阶段按"没有固定编号"理解即可)
  • 动手:写 one_course.py(原创):用一个字典存你今天上的一门课,键分别是 name(课名)、teacher(老师)、weekday(周几)、minutes(今天学了多少分钟);程序先拼出一句完整的话打印——"周X 的 XX 课,老师是 XX,我投入了 XX 分钟";再把"教室"这个新键加进字典,打印整个字典看看变化。
  • 今天完成标准:程序跑通 + 能说出"字典靠名字找、列表靠编号找"。
连到你的大学课 · 周三的数据库原理与应用 你周三下午上的数据库课里,一张表由很多行组成,每一行是一条记录,每一列都有名字(学号、姓名、成绩)。今天的字典,就是数据库里"一行记录"的雏形:钥匙 = 列名,内容 = 这一格填的东西。你已经提前用 Python 摸到数据库最核心的结构了。

D4 周四 · 减负日:让程序会"读文件"

今天课最满,只学一件事:读

涨知识 · 让程序看到硬盘上的东西 以前程序一关,里面的数据就全没了。文件让程序能看见"自己之外的世界"——把存在硬盘上的文字读进来。open 打开、read 读、用完关上;今天学最省心的 with 写法,它会帮你自动关门。
  • 资源:
  • 怎么做(今天控制在 20-30 分钟):
    1. 先用记事本新建一个 note.txt,随手写三行字,保存到和程序同一个文件夹
    2. 用 with 读进来:with open("note.txt", encoding="utf-8") as f: txt=f.read(),然后 print(txt)
    3. 再把 read 换成 f.readlines(),看它是不是变成了"一行一个元素"的列表
    4. 踩个坑:故意 open 一个根本没建过的文件 → FileNotFoundError。记住:读之前文件得先存在,并且文件名、所在文件夹要写对
  • 动脑:read() 和 readlines() 拿回来的东西有什么不一样?(一个是整段文字,一个是按行装好的列表)
  • 逆向思维:程序把 note.txt 一行行打印、还编了号,它用的是 read 还是 readlines?为什么?
  • 错误知识:文件找不到 → FileNotFoundError;读中文乱码 → open 里加上 encoding="utf-8"(Windows 上尤其要记得)。
  • 动手(轻量):写 read_note.py:读取你自己建的 note.txt,先输出一共有多少字符,再按行输出"第1行:…、第2行:…"。
  • 今天完成标准:能读出自己写的文件就行。今天课多,跑通就去休息,不追加。
连到你的大学课 · 周四课多,只点两句 计算机网络:你文件里这一行行文字,将来在网络上就是这样一段段传出去的——机器之间传来传去,本质也是文本,你今天读到的就是"数据本来的样子"。智能 Java 编程:今天累,只记一句——Java 里靠名字找东西的结构叫 Map,它就是你周三学的字典,换了个名字而已。

D5 周五 · 让程序会"存盘",再埋一颗 AI 的种子

今天学什么:写文件(w 覆盖 / a 追加)

涨知识 · "保存"到底在做什么 会读还要会写。open 用 "w" 是覆盖写(一打开就清空重写),用 "a" 是往后追加(保留旧内容、接着写)。写进文件后,哪怕关掉程序、重启电脑,下次数据都还在——所有软件的"保存"按钮,原理都是这个。
  • 资源:
  • 怎么做:
    1. 用 with open("out.txt","w",encoding="utf-8") as f: f.write("第一行\n") 写一次,打开文件看;再跑一遍同样的代码,看是不是被覆盖成最新内容
    2. 把 "w" 换成 "a" 连跑三次,打开文件看三行是不是都还在——这就是 w 和 a 的区别
    3. 踩个坑:用只读的 "r" 模式去 write → 报错;写进去的如果是数字,要先用 str() 转成文字
  • 动脑:想在已有内容后面接着写、又不想冲掉旧的,该用 w 还是 a?
  • 逆向思维:一个程序运行了三次,文件里留下了三行而不是只剩最后一行,它打开文件用的是什么模式?
  • 错误知识:读模式 r 不能写;write 只接受字符串,数字要 str()。再想:w 模式打开一个本来有内容的文件会发生什么?(所以重要内容别误用 w)
  • 动手:写 save_log.py:让用户输入今天一门课的名字和学了多少分钟,程序把"课名,分钟"这样一行用追加模式(a)存进 study.txt;连续运行 3 次,最后打开 study.txt,能看到整整齐齐三行记录。
一颗 AI 种子 · 计算机怎么知道"谁和谁像"(本周唯一,约 10 分钟) 大模型、推荐系统看着神奇,可它们理解世界的第一步特别朴素:先把任何东西变成一列数字(这列数字叫"向量"),再比较两列数字有多接近。而"一列数字",正是你 D2 学过的列表。
亲手试一下(不用查任何资料):假设三个人各用 3 个数字表示对三件事的喜好——a=[1,1,0]、b=[1,0,1]、c=[1,1,1]。用你会的列表和循环,数一数 a 和 b 有几位相同、a 和 c 有几位相同。相同的位置越多,就代表越"像"。这就是"相似度"最原始的算法,也是 AI 把文字变成坐标、再判断两句话意思近不近的地基。
想练就写个 ai_seed.py(5-10 行);写不出也不影响本周达标。到这儿就够了:不用去查神经网络、Transformer 这些词,它们是后面很多周才慢慢长出来的。今天只记住一句话——AI 的起点,就是你手里这张列表。
  • 今天完成标准:save_log 运行 3 次后文件里有 3 行;能口头说出"向量就是一列数字、也就是列表,两列越接近越像"。
连到你的大学课 · 周五的计算机网络与 Java 你刚写进 study.txt 的那一行行"课名,分钟"(周末还会再加上「成就感」),其实就是一种叫 CSV 的标准数据格式——计算机网络上传来传去、数据库里导进导出,用的都是这种一行行、用逗号分隔的纯文本。你亲手写出来的,就是真实系统里到处在用的格式。

D6 周六 · 综合项目 v1:学习记录器(录入与存盘)

今天学什么:把前五天拼成一个真能用的工具

先说清楚 · 学习记录器长什么样 程序一启动,会先试着把以前存的记录读出来、显示历史已有几条(第一次没有就提示新建);然后循环让你录入多条新记录,每条记录是一个字典(课名、分钟、成就感 1-5 分),所有记录装进一个列表;你说停之后,程序把它们一行行写进 study.txt 存盘,最后显示本次存了几条。列表里装着字典,再把字典写进文件,真实软件里的数据大多就是这样一层层装起来的。黑框里跑,不用界面。第一次运行(用一张干净的 study.txt)大致这样:
(启动,先找以前的记录)
还没有历史,本次新建
录入学习记录(输入 q 结束)
课名:数据库
学了多少分钟:45
成就感(1-5):4
课名:操作系统
学了多少分钟:30
成就感(1-5):3
课名:计算机网络
学了多少分钟:25
成就感(1-5):4
课名:q
本次存盘 3 条

黑框里的输出文字不用逐字模仿:下次再启动时,开头会先显示「历史累计 3 条」。你的程序只要能录入 3 条、存进 study.txt、关掉重开还能把这 3 条读出来,就算完成。

  • 资源:本周前五天的菜鸟页面都可以回翻,不另加新教程。
  • 怎么拆(先自己想,想不出再按这个顺序一步步来):
    1. 一条记录用什么装?——字典(复用 D3)
    2. 很多条放哪、怎么数条数?——列表 + append(复用 D2)
    3. 怎么一直录、直到用户输入 q 才停?——while 循环 + if 判断(复用第二周)
    4. 怎么存盘?——遍历列表,把每条拼成一行行文字,用 a 模式写进文件(复用 D5)
    5. 怎么显示历史?——readlines 读出来(复用 D4)
  • 动脑:为什么"一条记录"用字典、而"一堆记录"用列表?
  • 逆向思维:如果想让每条记录再多记一个"教室",要改哪个地方?(体会:字典加一个键,整套结构照样转)
  • 错误知识:字典不能直接 write(要先拼成字符串);从文件读回来的都是文字,想算分钟得用 int() 转回来。
  • 动手:独立完成 study_log_v1.py(原创,网上没有现成的)。先用一张干净的 study.txt 开始(把 D5 的练习文件删掉,或用 w 模式打开写个空,正好复习周五的「覆盖」);最低要求:能录 3 条、能存盘、关掉重开还能读到这 3 条。卡住可以问,只给提示不给完整代码。
  • 今天完成标准:录 3 条 → 关程序 → 重新打开还能看到这 3 条。
连到你的大学课 · 数据库的"内核" 你手写的 study.txt 就是一张最原始的表:每一行是一条记录,逗号分隔的每一段是一个字段。数据库软件(你周三的课)做的就是这件事的"加强版"——能存几十万行、能秒查。你今天写的,就是一个最小的数据库。

D7 周日 · v2 统计升级 + 本周验收

今天:加统计,然后我来验收

先把 v1 升级成 v2:用一个字典累计每门课的总分钟(课名当钥匙、分钟往上加),全部录完后输出"这周哪门课投入最多、一共多少分钟",再算一下全部学习总时长、成就感平均分。

大白话:v1 负责"记下来、存得住",v2 多做一步"算给你看"——用字典当计数器,遇到一门课就把它的分钟加到对应名字下面,最后比一比谁最大。

  • 验收流程(远程连线,15-20 分钟,轻松当聊天):
    1. 跑程序:打开 study_log_v2.py,现场录几条、看它存盘、看它统计
    2. 现场改需求(二选一,当场告诉你):① 再加一个维度,统计每门课"录了几次";② 把统计结果也写进一个 summary.txt 文件
    3. 讲给我听:这个程序由哪几部分拼起来——录入循环 / 字典记录 / 列表汇总 / 文件存盘与读取 / 字典统计,各用一句话说
    4. 三周回看:说说从第二周到现在,你手里的程序多了哪些本事
  • 考核标准:v2 跑通 + 现场改需求成功 + 能讲出这几部分 = 本周满分。会多少说多少,不紧张。
连到你的大学课 · 用自己写的工具回看一周 验收时你会看到:自己写的统计,把这一周在 6 门课上各花了多少分钟列得清清楚楚。学了多少、花在哪,一拉就有,比凭感觉靠谱。

写在最后

三周前你还在怕报错,这一周结束时,你的程序已经能存盘、能读回、能做统计,你还亲手碰到了数据库表的雏形,和人工智能"判断像不像"的第一步。

之后上大学的课,你会越来越多地冒出一个念头:"这个,我自己写过。"那不是巧合,是一周一个能用的小东西攒出来的。不用急,咱们接着往下走。

提前剧透一点点下周:你手里的数据结构会再"长一级"——一种能装下别的列表的列表,还有一种靠名字找东西、但名字绝不会重复的新格子。咱们下周见。