跳转至

网站是只读的

打卡和学习日志请在本地 checklist.md 里填写,改完重新 build 网站即可同步。

打卡与三档自评

用法:每完成一个块就打勾;每天结束填学习日志;三天结业(9/7)填第二、三部分的三档自评;一个月进阶从第五部分开始(每周日填),10/7 结业填第六、七部分。诚实比好看重要——"看提示能写"就是复习清单。


一、每日打卡

Day 1(周六 09-05)

  • 准备:读完 README 第 0 节与 ai-guide 七条规则,目标抄在纸上
  • Block 0 环境:00_env_check.py 输出 [OK];REPL 进出过;打过断点、F10 走过一行
  • Block 1 01_types_and_fstrings.py 全部 [OK]
  • Block 2 02_strings.py 全部 [OK]
  • Block 3a/3b 03_lists_tuples.py 全部 [OK];Python Tutor 看过列表别名动画
  • Block 4 04_dicts_sets.py 全部 [OK]
  • Block 5a/5b 05_functions.py 全部 [OK];Python Tutor 看过可变默认参数
  • Block 6 06_debugging_bughunt.py 7 个 bug 全修好,每个都写下了"现象 → 原因"
  • Block 7 07_mini_project_grades.py 打印出报表;ruff check exercises/day1 零警告
  • 复盘:学习日志已写;纸上默写了 4 个语法点;22:30 前睡

Day 1 学习日志(模板见 ai-guide.md 第三节):

1. 今天最核心的一个概念(一句话讲给不会编程的同学):
2. 今天踩到的最深的坑(现象 → 原因 → 正确写法):
3. 今天独立写出的最满意的一段代码(≤10 行,凭记忆默写):
4. 明早晨测我最怕被问到的 3 个点:
5. 精力自评(1–5)与明天要调整的一件事:

Day 2(周日 09-06)

  • 晨测:Day 1 闭卷 10 题,得分 ____ / 10
  • Block 1 01_exceptions.py 全部 [OK]
  • Block 2a 亲手复现并修复了一次 UnicodeDecodeError
  • Block 2a/2b 02_files_paths.py 全部 [OK]
  • Block 3 shapes.py 写完并被 03_modules_stdlib.py 成功导入;03 全部 [OK];试过 uv add richuv remove rich
  • Block 4a/4b 04_oop_dataclass.py 全部 [OK]
  • Block 5 05_pythonic.py 全部 [OK]
  • Block 6 uv run pytest exercises/day2/06_testing -q 全绿,补写了 2 个 TODO 测试;看过一次失败输出
  • Block 7 uv run pytest exercises/day2/07_grades_v2 -q 全绿;grades_v2.py 生成了 report.txt
  • uv run ruff check exercises 零警告
  • 复盘:AI 评审(模板 4)后改了 ≤3 条并重跑测试;学习日志已写;已选定周一项目并写下函数清单;22:30 前睡

Day 2 学习日志

1.
2.
3.
4.
5.

Day 3(周一 09-07)

  • 联合晨测:得分 ____ / 10
  • 项目 Block A:3 个纯函数 + 3 个测试(先红后绿)
  • 项目 Block B:持久化 + 损坏恢复 + 主循环跑通"添加→查看→退出→重启还在"
  • 项目 Block C:测试 ≥5(含 raises + parametrize)、1 个扩展、README 八项、ruff format
  • project/README.md 验收清单 9 条全勾
  • AI 评审:改了 ≤3 条,测试仍全绿
  • 结业测验笔答:____ / 8;限时编码 summarize_orders 在 15 分钟内 [OK]:是 / 否
  • 三档自评表(下方)已填
  • 后续 4 周计划已写;D+1 / D+3 / D+7 / D+30 提醒已设

Day 3 学习日志

1.
2.
3.
4.
5.

二、A 档(必须掌握)自评表——周一结业时闭卷填写

在每行选一个: = 能不看资料默写并调通; = 看一眼提示/文档能写出来; = 不会。所有"提"和"否"进入 D+3 复习清单。

知识点
uv run python 文件 运行脚本;进出 REPL;Ctrl+C 中断
VS Code 打断点、F10 单步、看变量面板
/ // % ** 的区别;input() 返回字符串;int()/float()/str()
f-string:{x:.2f}{x:>8}{x:02d}{x=}
真值判断;and/or/not 短路;链式比较
字符串索引/切片/[::-1];不可变
strip/split/join/replace/upper/lower/startswith/find/count/isdigit
转义与 r"...";三引号
列表 append/extend/insert/pop/remove/indexsort() vs sorted()
for / enumerate / zip / range(a, b, c)
列表别名 vs copy();遍历时不修改列表
元组、解包、a, b = b, a、多返回值
字典增删改查、getitems() 遍历
计数模式 d[k] = d.get(k, 0) + 1;分组模式 setdefault
键必须可哈希;列表里装字典的嵌套结构
列表推导式(含条件)
def/参数/默认值/return/docstring
可变默认参数陷阱及 None 写法
局部 vs 全局作用域;为什么不用 global
把 50 行程序拆成 4–6 个函数
读 Traceback;9 种常见异常的含义
try/except 具体异常/else/finally;输入校验循环;raise
不写裸 except:
with open(path, encoding="utf-8")r/w/a;逐行读
为什么必须写 encoding="utf-8"(GBK / 3.15)
pathlib.Path/existsread_textwrite_text
json.load/dump(ensure_ascii=False, indent=2)FileNotFoundError 恢复
import 三种写法;if __name__ == "__main__":;自己写模块
random.randint/choice/shufflemath.sqrt/floor/ceil/pi
不用 from x import *;不把文件命名为标准库名
class/__init__/self/方法/创建对象
sorted(key=lambda ...)any/allsum(生成器表达式)
算与打印分离(纯函数可测试)
PEP 8:snake_case、4 空格、有意义的名字

统计:默 ____ / 34 提 ____ 否 ____

三、B 档(了解会用)自评——只勾"用过并能看文档再用"的

  • @dataclass + field(default_factory=list) - [ ] __str__/__repr__/__eq__ - [ ] 继承与 super() - [ ] @property
  • 自定义异常类 - [ ] csv.DictReader/DictWriter - [ ] glob.name/.suffix/.stem - [ ] datetime/timedelta
  • Counter/defaultdict - [ ] statistics - [ ] sys.argv - [ ] uv add 第三方库
  • 生成器 yield - [ ] 字典/集合推导式 - [ ] match 语句 - [ ] 类型注解 list[int]X | None
  • *args/**kwargs、仅关键字参数 - [ ] lambda、函数作参数 - [ ] 集合运算 - [ ] 深拷贝
  • pytest:test_*.pyraisesparametrize - [ ] ruff check/format - [ ] VS Code Watch 表达式

四、C 档(知道存在)——能说出"它解决什么问题、该搜什么"即可

asyncio / 多线程与 free-threading / JIT / 子解释器 / t-strings / 注解延迟求值 / Python 3.15 的 UTF-8 默认与 lazy import / 装饰器与闭包 / 递归 / 正则 re / 打包发布 / Git / numpy·pandas·pygame·FastAPI·rich 各自是什么


第二阶段:一个月进阶(9/8 – 10/7)

计划见 plan/month-overview.mdplan/week1.mdweek4.mdplan/capstone.md。每周日晚做周测 + 填本表;10/7 结业时填"五、进阶 A 档三档复评"。

五、每周打卡

第 1 周(9/8 – 9/13)语言进阶

  • 周一 M1 生成器/迭代器 - [ ] 周二 M2 闭包/装饰器 - [ ] 周三 M3 上下文管理器与函数式 - [ ] 周四 M4a 数据模型
  • 周六 M4b OOP/dataclass/Protocol + M5 异常与新语法 - [ ] 周日 小项目 exercises/week1/project_pipeline 测试全绿
  • uv run pytest exercises/week1 -q 全绿 - [ ] 周测 quiz_week1 ____ / 20 - [ ] 周日志(学到 / 卡住 / 下周先做)
  • 本周提交 ≥5 次 git commit

第 2 周(9/14 – 9/20)工程化

  • 周一 M6a src 布局/pyproject/uv(uv run kb hello 可用) - [ ] 周二 Git + cnb.cool 推送成功 + M7a typing
  • 周三 M7b typing 进阶/类型检查器/ruff 规则 - [ ] 周四 M8a Pydantic 模型与校验 - [ ] 周五 M8b 序列化/JSON Schema/Settings
  • 周六 M9 logging + M10 正则 + M11 文件与 SQLite - [ ] 周日 projects/kb 测试全绿、覆盖率 ≥80%、ruff 零警告、已推送
  • uv run pytest exercises/week2 -q 全绿 - [ ] 周测 quiz_week2 ____ / 20 - [ ] 周日志

第 3 周(9/21 – 9/27)并发与网络

  • 周一 M12 pytest 进阶(w3_01 覆盖率 ≥95%) - [ ] 周二 M13 线程/进程/subprocess - [ ] 周三 M14a asyncio 基础
  • 周四 M16 性能测量 - [ ] 周五 M14b asyncio 进阶 - [ ] 周六 M15 httpx + 聚合器启动 - [ ] 周日 projects/aggregator 全绿、bench 达标、已推送
  • uv run pytest exercises/week3 -q 全绿 - [ ] 周测 quiz_week3 ____ / 20 - [ ] 周日志(含 bench 三组数字)

第 4 周(9/28 – 10/4)Web、架构与综合项目

  • 周一 M17a FastAPI 入门 - [ ] 周二 M17b 依赖注入/路由/lifespan - [ ] 周三 M17c 异步端点/SSE/中间件/鉴权
  • 10/1 M18 架构与封装(重构 kata 全绿)+ M19 安全审查(≥5 项发现、修 3 项)+ 服务器实操
  • 10/2 Notebook M1 - [ ] 10/3 M2 - [ ] 10/4 M3 - [ ] 周测 quiz_week4 ____ / 20 - [ ] 周日志

收官(10/5 – 10/7)

  • 10/5 Notebook M4:覆盖率 ≥80%、ruff/Pylance 零错误、README、.env.example
  • 10/6 Notebook M5:AI 评审 → 重构 ≤5 条 → 回归;uv build;tag v1.0.0;复盘
  • 10/7 结业测验 exercises/final/quiz_final.md ____ / 30;填写下方"六";把"提/否"条目排进 D+3/D+7/D+30

六、进阶 A 档自评表——10/7 结业时闭卷填写(默 / 提 / 否)

知识点
生成器函数与生成器表达式;惰性、只能遍历一次;itertools 常用组合
闭包晚绑定与修法;nonlocal
装饰器(带参、functools.wrapsParamSpec 类型);inspect.signature
上下文管理器(类 + @contextmanager);ExitStack 知道
dataclass(frozenfield(default_factory)order);__eq__/__hash__ 关系
魔术方法:__repr____len__/__getitem__/__iter____enter__/__exit__、比较与运算
Protocol vs ABC;依赖注入(构造函数传接口)
异常层次设计;raise ... from eExceptionGroup/except*try/else/finally 语义
PEP 695 泛型、TypedDictLiteralAnnotatedTypeIs;Pylance 零错误
src 布局、pyproject.toml(PEP 621/735)、[project.scripts]、uv workspace
Git:分支/合并/撤销/stash;Conventional Commits;推送 cnb.cool
Pydantic:Field 约束、field_validator/model_validatorConfigDict(extra="forbid")model_dump(mode="json")TypeAdaptermodel_json_schema()
pydantic-settings + .env + .env.example;密钥不入库
logging:getLogger(__name__)、只在入口配置、exception vs error、文件 UTF-8 轮转、JSON 格式
正则:命名分组、贪婪/懒惰、VERBOSEfinditer/sub 传函数;何时不用正则
文件:pathlib 全家、原子写、utf-8-sigjson.dump(default=)tomllib、UTC 时间
sqlite3:参数化、with conn:Row、幂等建表、索引
pytest 进阶:fixture 作用域/yield/conftestmonkeypatch/tmp_path/caplogparametrize、mock 打到使用处、覆盖率
线程 vs 进程 vs asyncio 的选择;ThreadPoolExecutorLockProcessPoolExecutor + __main__ 守卫
subprocess.run 列表参数、超时、capture_output、UTF-8
asyncio:协程/Task、gather vs TaskGroupasyncio.timeout、取消、SemaphoreQueue、异步生成器、to_thread
httpx:Client/AsyncClient 复用、显式超时、raise_for_status、流式、MockTransport 测试、tenacity 重试原则
性能:perf_counter/timeit/cProfile/tracemalloc;先测量再优化
FastAPI:路径/查询/请求体、response_model、422 结构、Depends/AnnotatedAPIRouterlifespan、异常处理器、dependency_overrides
FastAPI:同步 vs 异步端点、BackgroundTasksfastapi.sse、中间件、X-API-Key 依赖、ASGITransport 测试
分层架构:routers/services/repositories/schemas/domain;领域异常 → HTTP 映射;纯核心 + 命令式外壳
安全清单:输入校验、路径穿越、shell=False、参数化 SQL、密钥、CORS、超时与重试
Linux 服务器:ssh/uv 安装/uv run uvicorn/tmux/ssh -L

统计:默 ____ / 28 提 ____ 否 ____

七、结业复盘(按 plan/capstone.md 第 5 节模板填写)

  1. 三个最有价值的知识点:
  2. 三个最难的 bug(现象 → 根因 → 工具):
  3. 重做一次会改的架构决定:
  4. 对照 learn-agent 计划,已就位的 Python 前置:
  5. 下一个 30 天的三件事: