第 2–4 课小工具阶梯

第一课通关之后,三个周五、三件小工具。每件沿用同一套教法:先跑通 → 只改 3 处 → 自己炸一次 → 提交上屏。全文代码与「改处」设计都在这页,照发即可。

覆盖 · 第 2–4 周 节奏 · 每课 45 分钟 产出 · 3 个能跑的小工具
00 / RHYTHM三周的固定节拍

和第一课同一个鼓点

工具在换,节拍不变——学生第二周起就知道每节课会发生什么,安全感就是效率。

0–10 分钟
复盘 + 发枪。投上周大屏,表扬两个提交;发本周工具,只讲「它是干嘛的」,不讲语法。
10–25 分钟
跑通 + 改 3 处。先原样跑一遍,再按改处表动手。通关者去帮同桌。
25–35 分钟
炸一次。教师按「炸点预告」现场炸,全班走三步口诀;然后学生自己炸自己修。
35–45 分钟
提交上屏。提交到 class_answers;大屏滚动本周通关名单。
TOOL 1 · 第 2 周文件与循环

批量重命名

目标一句话:一键给文件夹里所有 .jpg 加前缀「旅行_」。第一次操作真实文件——用文件夹不用系统盘。

rename.py 只改 3 处
import os

folder = "photos"                       # ① 改文件夹名
for name in os.listdir(folder):
    if name.endswith(".jpg"):            # ③ 改扩展名
        new = "旅行_" + name              # ② 改前缀
        os.rename(os.path.join(folder, name),
                  os.path.join(folder, new))
        print("已改名:", name, "→", new)
print("完成,共处理", len(os.listdir(folder)), "个文件")
处原值学生改成这一处考什么
①"photos"自己的文件夹名字符串字面量 + 相对路径
②"旅行_"任意前缀字符串拼接
③".jpg"".png" 等条件判断 endswith
✓通关标准:5 张图片全部带新前缀,且原文件名保留在新名里。
⚠炸点预告:文件夹名写错 → FileNotFoundError(练习集 E7 同款);先 print 再 rename 是这个工具教的职业习惯。
TOOL 2 · 第 3 周字符串与字典

字频统计

目标:统计一句话里出现最多的 5 个字。字典的 get 套路第一次出场——它是 pandas value_counts 的手写版,第 7 周会再见。

wordfreq.py 只改 3 处
text = "数据不会说谎,但会被说谎。"          # ① 改文本

counts = {}
for ch in text:
    if ch in ",。!?;:、 ":              # ② 改要跳过的字符
        continue
    counts[ch] = counts.get(ch, 0) + 1

top = sorted(counts.items(), key=lambda x: -x[1])
for ch, n in top[:5]:                        # ③ 改前几名
    print(ch, n)
处原值学生改成这一处考什么
①"数据不会说谎…"任意一句中文字符串即序列,可逐字遍历
②",。!?…"要跳过的标点集合in 判断 + continue
③top[:5]top[:3] 等切片——顺带看到负数排序技巧
✓通关标准:打印出现最多的 5 个字并附次数;把文本换成自己的签名档再跑一次。
⚠炸点预告:top[:0] → 什么都不输出也不报错——逻辑病的初见(练习集 E8 同族)。
TOOL 3 · 第 4 周random 与嵌套循环

密码生成器

目标:一次生成 5 个 8 位密码。嵌套循环第一次出现——外层管「几个」,内层管「多长」。

passwd.py 只改 3 处
import random

chars = "abcdefghjkmnpqrstuvwxyz23456789"   # ① 改字符池
length = 8                                   # ② 改长度

for i in range(5):                           # ③ 改生成几个
    pwd = ""
    for j in range(length):
        pwd += random.choice(chars)
    print("密码", i + 1, ":", pwd)
处原值学生改成这一处考什么
①"abcdefghjkmnpq…"自己的字符池为什么池里没有 l / 1 / o / 0(易混淆)
②86–16 任选长度与安全性的直觉
③5任意个数外层循环管「几个」
✓通关标准:生成 5 个密码,目测无易混淆字符;给同桌的账号生成一个。
⚠炸点预告:length 改成 0 → 输出空密码也不报错——又是一颗逻辑雷。彩蛋:教学用 random 可以,真密码要用 secrets 模块,先埋伏笔不讲透。
NEXT第 5 周 · 交棒

工具线毕业,数据线接棒

三件小工具攒下的手感,第 5 周全部用到爬虫与 pandas 上:文件读写来自 TOOL 1,统计套路来自 TOOL 2,批量生成来自 TOOL 3。

01不变的规矩:每课一个能跑的产物、通关者帮扶、全部提交 class_answers——与 PAPER 02 完全同构。
02交接仪式:第 5 周第一件事,全班用 TOOL 2 统计自己爬回的第一段网页文本——两条线当场汇合。
「小工具不是玩具,是给第 5 周的爬虫练的手感。」 —— 学生在第 2–4 周攒下的每一行改过的代码,都会在数据线里再见到一次。