资讯详情

Python入门教程23周讲义:12周学习路线与项目验收

📅 2026/11/6 7:10:09 | 华诺云谱 👁 阅读
Python入门教程23周讲义:12周学习路线与项目验收
简介这份《千锋教育Python入门教程》PDF面向K12阶段学生和零基础自学者用一份文档梳理Python入门阶段的学习路线缓解知识点零散、不知从何学起的问题也可作为编程兴趣培养与课堂拓展的参考。包内仅有1个PDF文件大小约663KB轻量便于在电脑或平板上查阅适合快速浏览与按章节检索。文档从基础语法、变量与数据类型、条件循环、函数与模块讲起并延伸到第三方库、图形界面开发、Linux指令与Shell、数据库开发、网页前端基础、爬虫、网站后台框架、机器学习与数据分析、树莓派物联网等方向帮助读者建立较完整的Python技能地图。文档还整理了配套视频课程入口便于按图索骥。目前已有992人学习适合想用较短时间了解Python能做什么、并据此规划后续专项学习的人。1. 先别从第一页看起一份 23 周讲义的正确打开顺序多数人拿到这份 Python 入门教程 PDF 的第一反应是从第一页读到最后一页然后卡在第三章就停了。这是一套按 23 周、10 个阶段排布的课程讲义配着按知识点切开的视频索引内容从 Python 语言基础一直铺到 Linux 指令、Web 后台、爬虫、数据分析、树莓派硬件交互。作为一份 k12 python 文档资料来看它够全但结构更像课程大纲不像阅读材料。它适合三类人零基础想系统过一遍语法的学生、需要给课堂找现成案例的老师、以及转行前想把基础补齐的从业者。不适合指望三天速成的人。下面按我拆这套资料的实际顺序写先拆目录再搭环境然后把静态例子改成能跑的练习最后给出压缩到 12 周的进度安排和验收标准。2. 把目录拆成表格10 个阶段里哪 4 条线必须先走完2.1 十个阶段其实是四条技术主线讲义目录乍看很散语言基础、进阶与第三方库、PyQt、Linux 指令、Shell、运维自动化、安全方向、MySQL/Oracle、HTML5 与 CSS、JS/JQuery、爬虫、Django/Flask、机器学习与数据挖掘、数据分析、树莓派一共十来个板块。把它们按依赖关系重新归类只剩四条主线每条线内部的顺序不能乱线之间可以并行。主线覆盖阶段前置依赖建议顺序是否必学A 语言主线基础语法、进阶语法、第三方库、异常与文件操作无第 1 顺位必学B 系统主线Linux 指令、Shell、运维自动化、MySQL/OracleA 的第三阶段第 2 顺位建议学C 应用主线HTML5/CSS、JS/JQuery、Django 或 Flask、爬虫A 全部 B 的数据库部分第 3 顺位选一条深挖D 拓展主线数据分析、机器学习、PyQt、树莓派A 全部任意时间插看目标选这么拆的理由很实际语言主线是其他三条线的前置条件你看不懂列表推导和字典遍历打开 Django 视图函数也只是抄代码系统主线解决的是「代码在哪个环境里跑」讲义里 Linux 指令和 Shell 那几节看起来跟 Python 无关但后面运维自动化、部署后台全靠它应用主线是产出物最集中的地方简历上能写的东西基本出在这条线上拓展主线属于加分项学不完不影响主线闭环。我一般建议先花二十分钟把 PDF 目录页复制到一个表格里加两列「对应视频编号」和「是否已跑通示例」。这份表格后面会一直用比任何笔记软件都直接。别小看这个动作讲义的最大问题就是目录层级深、页码和视频编号对不上没有这张表你会反复翻回目录确认自己在哪。语言主线内部的四个台阶要特别说清楚。第一个台阶是变量、数据类型、控制流讲义里篇幅不长但例子密度高第二个台阶是函数、模块、文件读写这里开始出现跨文件调用是很多人第一次翻车的地方第三个台阶是异常处理和面向对象讲义写得偏理论需要自己补例子第四个台阶是第三方库的安装与使用讲义里给的库名有些年头了需要按现在的包名替换。四个台阶走完才算具备看后面内容的能力。2.2 视频索引和 PDF 目录对齐先做一张自己的映射表讲义是压缩版视频是完整课两者的颗粒度不一样PDF 一个二级标题可能对应视频里三四个文件而视频文件名往往带「第几章第几节」的数字前缀格式还不统一。手工对数很痛苦写个脚本扫一遍本地目录更省事。# scan_course.py扫描解压后的视频目录生成可排序的章节索引 from pathlib import Path import csv import re ROOT Path(./python_course) # 视频解压后的根目录按需修改 OUT Path(./course_index.csv) # 输出索引Excel 可直接打开 # 匹配形如 03-05_函数定义与调用.mp4 的命名捕获章、节、标题 pat re.compile(r(\d)[-_](\d)[-_](.)) rows [] for p in sorted(ROOT.rglob(*.mp4)): m pat.search(p.stem) if m: rows.append([p.parent.name, int(m.group(1)), int(m.group(2)), m.group(3), str(p)]) else: # 命名不规范的单独留空后面人工补 rows.append([p.parent.name, 999, 999, p.stem, str(p)]) rows.sort(keylambda r: (r[0], r[1], r[2])) with OUT.open(w, newline, encodingutf-8-sig) as f: w csv.writer(f) w.writerow([模块目录, 章, 节, 标题, 完整路径]) w.writerows(rows) print(f共索引 {len(rows)} 个视频输出到 {OUT})逻辑上分三步用rglob递归拿到所有视频文件用正则从文件名里抽章号和节号抽不到的给一个很大的默认值排到最后。encodingutf-8-sig是为了让 Excel 直接双击打开不乱码这个参数在生成给非技术同事看的表格时几乎是标配。ROOT改成你解压后的实际路径就行脚本对目录层级没有要求。生成的 CSV 按「模块目录 章 节」排序正好能跟 PDF 的目录结构对上。接下来拿讲义目录页逐行核把 PDF 的小节标题填到 CSV 的备注列里一份映射表就成型了。往后每次看视频前先在这里找到对应 PDF 页码先读讲义再看视频效率比反过来高——视频节奏慢讲义能让你提前知道这节的重点在哪。提示命名不规范的视频不要急着改名先让它排在最后等整张表核对完再统一处理。批量改名一旦搞错顺序重新对齐的成本比手工核对高得多。2.3 K12 场景挑文档资料哪些章节能直接进课堂如果拿这套东西给 K12 阶段的学生用整份资料直接用是不合适的。Linux 运维、数据库、安全方向那几个板块对中学生来说是负担学完也用不上。挑 k12 python 文档资料的核心原则是只保留能在两节课内看到运行结果的内容凡是需要配服务器、装数据库、搭环境的章节一律延后。可以保留的部分语言基础全部、进阶语法里的异常与文件操作、第三方库中的绘图与数据处理、以及 PyQt 里最简单的窗口示例如果机房能装图形界面环境。数据分析段落可以留下读取 CSV 和做分组统计的部分机器学习那一章对中学生偏难最多讲到用现成库跑一次分类、看到准确率数字为止不必深究原理。建议跳过的部分Linux 指令与 Shell、运维自动化、数据库、安全方向、Django/Flask 完整后台、树莓派硬件交互。树莓派那块如果没有板子看视频也只能看别人接线收益很低除非学校有现成设备。裁剪完之后课时会从 23 周压到 10 周以内正好匹配一个学期的社团课节奏。剩下那些被砍掉的板块不是没用是等你把语言主线走完、确定方向之后再回头按需挑着看。资料本身是全的缺的是取舍。3. 让讲义里的代码真正跑起来解释器、虚拟环境与批量语法自检3.1 2.7 与 3.x 并存先说清楚这个历史包袱怎么处理这套讲义横跨的时间比较长里面同时提到 Python 2.7.3 和 Python 3.x。这意味着你会看到两种写法的示例代码混在一起最常见的是print hello这种 2.x 语句。现在的机器上装的基本都是 Python 3直接抄讲义里的代码第一行就可能 SyntaxError。处理思路只有一条统一用 Python 3 跑遇到 2.x 写法就改。别为了迁就讲义去装 Python 2.7那条路走不通——主流第三方库早就停止支持装包时会遇到一堆找不到版本的问题最后你把时间全花在配环境上一行业务代码都没写。具体的改法不复杂。print语句加括号raw_input换成inputdict.has_key(k)换成k in dxrange换成range字符串统一按 unicode 处理读文件时显式写encodingutf-8/的整除行为在 2 和 3 里不同涉及整数除法的例子要确认一遍是不是需要//。这几条覆盖了讲义里九成以上的兼容问题。3.2 用 venv 建隔离环境跑通第一个脚本不要在系统解释器里直接pip install。讲义后半段涉及第三方库装多了迟早跟系统依赖打架而且出问题很难回滚。用标准库自带的 venv 建一个独立环境删掉重来只需一条命令。# 进入讲义配套代码目录建一个只属于这套资料的虚拟环境 cd ~/study/python-basic python3 -m venv .venv # 激活环境Linux/macOS 用下面这行Windows 用 .venv\Scripts\activate source .venv/bin/activate # 确认解释器指向的是虚拟环境里的副本而不是系统全局的 python3 python -V which python # 升级 pip老版本 pip 在装新包时经常报解析失败 python -m pip install --upgrade pippython3 -m venv .venv里的.venv是目录名习惯上叫这个也可以改成别的。激活之后which python应该输出当前目录下的路径如果还是/usr/bin/python3说明激活没生效检查一下 shell 类型。Windows 上的激活脚本在.venv\Scripts\下PowerShell 可能还需要改执行策略这个坑后面第 5 章会提。环境好了先跑一个最小脚本确认从「写代码」到「看到输出」这条链路是通的。# hello.py第一步先验证输入、处理、输出三段式 name input(请输入你的名字).strip() # strip 去掉首尾空格防止误输入 if not name: name 同学 # 空输入给个默认值避免后面拼接出怪结果 print(f你好{name}这是你的第一个 Python 脚本) print(当前解释器版本, __import__(sys).version.split()[0])这里用 f-string 而不是讲义里的%格式化或str.format原因是 f-string 在 3.6 之后是主流写法可读性最好后面看别人的代码也基本是这个风格。__import__(sys)是偷懒写法正式项目里应该在文件顶部import sys这里只是为了让例子保持单文件。3.3 批量语法自检把讲义里跑不通的例子一次性找出来讲义配套的示例代码通常是一个目录几十上百个.py文件逐个双击运行不现实。先用编译检查扫一遍把所有语法层面的问题一次性暴露出来剩下的再按运行期错误处理。这个动作能省掉大量「跑一个报一个错」的反复。# check_syntax.py批量编译检查只报语法错误不执行代码 import sys import py_compile from pathlib import Path root Path(sys.argv[1] if len(sys.argv) 1 else .) files list(root.rglob(*.py)) bad [] for f in files: try: py_compile.compile(str(f), doraiseTrue) # doraiseTrue 才会抛异常而不是打印 except py_compile.PyCompileError as e: first_line str(e).splitlines()[0] # 只取第一行输出别太吵 bad.append((str(f), first_line)) print(f扫描 {len(files)} 个文件语法失败 {len(bad)} 个) for f, msg in bad: print(f{f} - {msg})py_compile.compile只做编译不做执行所以不用担心示例代码里有删文件、连数据库之类的副作用。doraiseTrue是关键参数默认行为是捕获异常后打印堆栈不好统一处理。跑完之后你会得到一份失败清单基本都是 2.x 语法残留按 3.1 的对照表逐条改。如果文件量大可以用标准库里的lib2to3先做一轮自动转换再人工复核。# 先复制一份到临时目录再改避免自动转换把原始文件改坏 cp -r ./examples ./examples_bak python -m lib2to3 -w -n ./examples # 转完再跑一次语法自检确认剩余失败项 python check_syntax.py ./examples-w表示直接写回文件-n表示不生成备份文件因为我们已经手动备份过了。要注意lib2to3在新版本 Python 里已经标记弃用某些发行版可能装不上装不上就跳过这一步人工改反而更可控——它处理不了运行期行为差异比如整除和字典遍历顺序这些还是得逐条看。4. 把 PDF 的静态例子改成可执行练习语法、数据分析、Web 三条线复现4.1 基础语法把讲义里的例子改成带断言的自测脚本讲义里的语法示例大多是「给出代码 给出输出」读完感觉自己会了合上书就写不出来。有效的做法是把每个例子改造成带assert的自测脚本函数写完立刻用断言验证行为跑通就是真会了跑不通说明边界没想清楚。以排序和切片为例讲义里通常给一个sorted的简单用法就过去了。实际工作中真正会踩的是排序稳定性、同分怎么排、空输入返回什么。# practice_01.py把讲义里的排序例子改造成带边界的自测 def top_n(scores, n3): 返回分数最高的 n 项同分按名称升序保证结果可复现 # key 返回元组先按分数降序负号再按名字升序 return sorted(scores.items(), keylambda kv: (-kv[1], kv[0]))[:n] if __name__ __main__: data {A同学: 88, B同学: 95, C同学: 95, D同学: 70} assert top_n(data, 2) [(B同学, 95), (C同学, 95)] # 同分时的顺序 assert top_n(data, 10) top_n(data, len(data)) # n 超长不报错 assert top_n({}, 3) [] # 空输入 assert top_n(data, 0) [] # n 为 0 print(全部断言通过)keylambda kv: (-kv[1], kv[0])这个写法是重点负号把降序问题转成升序问题元组第二项处理同分时的稳定顺序。如果不写第二项同分项的相对顺序依赖字典插入顺序换一个 Python 版本或者换一份数据结果就可能变这种不确定性在批改作业或者做报表时会非常难受。每个语法点都按这个模式来一遍写函数、加三到五个断言、覆盖正常值和边界值。讲义里一节内容大概能改造出五六个这样的脚本写完这一轮语法部分基本就扎实了。这个习惯我从带第一批新人时就开始推比让他们抄十遍示例有效得多。4.2 数据分析段落用一页 CSV 跑通读取、清洗、聚合讲义的数据分析部分列了 NumPy、Pandas、Matplotlib 这几个库但例子多半是零散的函数调用跑完不知道自己在干什么。找一个真实一点的小数据集把「读进来、洗干净、算指标、出结果」这四步走完比看十页 API 文档管用。数据集不用去找自己写一个就行。新建scores.csv三列姓名、班级、语文、数学、英语随便填十几行包含一两个空值和一个重复姓名故意制造一点脏数据。# analysis_01.py从 CSV 到分组统计的最小闭环 import pandas as pd # dtype 指定学号类字段为字符串避免前导零被吃掉 df pd.read_csv(scores.csv, encodingutf-8) # 先看结构列名、类型、非空数量脏数据在这里就能发现 print(df.dtypes) print(df.isna().sum()) # 数值列缺失用该列均值填充非数值列直接删行 num_cols [语文, 数学, 英语] df[num_cols] df[num_cols].fillna(df[num_cols].mean().round(1)) df df.dropna(subset[姓名, 班级]) # 总分与班内排名methodmin 让同分并列 df[总分] df[num_cols].sum(axis1) df[班内排名] df.groupby(班级)[总分].rank(ascendingFalse, methodmin).astype(int) summary df.groupby(班级)[总分].agg([count, mean, max]).round(1) print(summary) # utf-8-sig 保证 Excel 打开不乱码 df.to_csv(scores_out.csv, indexFalse, encodingutf-8-sig)几个参数值得单独说。fillna用均值填充只适合数值列而且要在分组之前做还是之后做结论不一样——按班级均值填充更合理但代码会复杂一截讲义阶段先用全局均值理解流程即可。rank的methodmin表示同分取最小名次比如两人并列第一下一个是第三名这个规则在成绩场景下比默认的average更符合直觉。astype(int)是因为rank返回浮点排名出现1.0看着别扭。跑完之后对着scores_out.csv检查三件事空值是不是都被处理了、总分是不是等于三科之和、每个班的人数对不对。这三条对上了说明读取、清洗、聚合三段都没问题。Pandas 的坑大多不在语法在「你以为数据是干净的」这个假设上。4.3 Web 与爬虫段落先在本机造一个接口再抓讲义里爬虫章节的例子多半直接对着外部网站抓这在学习阶段风险很高目标站点改版、反爬策略变化、请求频率控制不好被封任何一条都能让你卡住半天而且问题不在你的代码上排查起来非常打击信心。我的做法是先在本机起一个最小接口用它当靶子把 requests 的各种参数练熟再换成真实站点。# demo_api.py本机最小接口返回固定的书目列表 from flask import Flask, jsonify, request app Flask(__name__) BOOKS [{id: i, title: f示例书{i}} for i in range(1, 6)] app.get(/api/books) def list_books(): page int(request.args.get(page, 1)) # 分页参数默认第 1 页 size int(request.args.get(size, 2)) # 每页条数默认 2 start (page - 1) * size return jsonify({total: len(BOOKS), items: BOOKS[start:start size]}) if __name__ __main__: app.run(host127.0.0.1, port5000, debugTrue)启动之后另开一个终端写抓取端。这里把超时、重试、分页、状态码检查都带上这些正是讲义里讲得最薄、实际最常用的部分。# fetch_books.py对着本机接口练习分页抓取 import time import requests BASE http://127.0.0.1:5000/api/books all_items, page [], 1 while True: # timeout 必须写否则服务端卡住时客户端会一直挂着 resp requests.get(BASE, params{page: page, size: 2}, timeout5) resp.raise_for_status() # 4xx/5xx 直接抛别让错误数据流下去 data resp.json() all_items.extend(data[items]) if len(all_items) data[total]: break page 1 time.sleep(0.5) # 主动限速真实站点更要留间隔 print(f共抓取 {len(all_items)} 条) for it in all_items: print(it[id], it[title])raise_for_status()是新手最容易漏的一行。不写它接口返回 500 的时候resp.json()会抛一个看起来毫不相关的 JSON 解析错误你顺着报错去找解析逻辑实际根因在服务端。timeout5同理缺省值是不限时遇到慢接口整个程序就停在那里。本机这一套跑顺了把BASE换成真实地址改一下分页参数名和返回结构解析就是完整的爬虫骨架。真实的坑在反爬和页面结构变化上那些属于另一个话题但至少请求层的代码你已经验证过了。5. 踩坑排查这份老资料的 5 个典型翻车现场5.1 抄讲义代码第一行就 SyntaxError现象照着 PDF 敲print hello解释器直接报SyntaxError: Missing parentheses in call to print后面的代码一行都没跑。原因这批示例代码写在 Python 2 时代print是语句不是函数。讲义同时提到 2.7.3 和 3.x读者容易误以为两种写法都能用。解决统一用 Python 3按 3.1 的对照表逐条改。文件多的话先用check_syntax.py扫一遍拿到完整清单再批量处理别边跑边改那样来回切换太碎。5.2 装库时报找不到匹配版本现象pip install某个讲义里提到的库报Could not find a version that satisfies the requirement换镜像源也没用。原因两种可能。一是讲义里写的包名已经变了比如早期连 MySQL 用的是某个旧驱动现在主流做法是换用仍在维护的驱动包二是讲义指定的版本号太老跟当前 Python 版本不兼容编译不过。解决先去包索引页面确认包名和当前维护状态再从讲义里的名字换成现在的名字。版本号别照抄先装最新稳定版跑一遍跑不通再往回退一两个大版本。实在装不上就找替代库功能重合度高的库通常不止一个。5.3 视频和 PDF 对不上找不到自己在哪现象看到视频第 12 个文件想翻讲义对应章节翻来翻去发现内容对不上怀疑自己下错了资料。原因PDF 是压缩过的课程讲义视频是完整授课录像两者的切分粒度不同。再加上视频文件命名不统一有的带章节号有的不带按文件名排序根本代表不了讲课顺序。解决按 2.2 的脚本生成索引表用「模块目录 章 节」排序再手工把 PDF 小节标题填进去。以 PDF 为骨架、视频为补充别反过来。视频里超出讲义的部分当拓展听不必强求一一对应。5.4 PyQt 或图形界面示例起不来现象装完 GUI 相关的库运行示例报错提示找不到显示相关的组件或者平台插件加载失败。原因图形界面需要显示环境。如果你在纯命令行的服务器、容器或者远程终端里跑根本没有可用的显示后端库初始化就会失败。这不是代码问题。解决图形界面的例子放到本地有桌面的机器上跑。确实要在服务器上验证逻辑就把界面部分拆掉只测业务函数界面留到本地再补。学习阶段遇到这类环境限制直接跳过整章也不影响后面的内容。5.5 学到第六周就断了现象前两周热情很高第三周开始进度落后第六周彻底停摆过两个月想起来又从头开始。原因23 周的排期是按脱产培训的节奏设计的每天有整块时间。业余学习按这个节奏排必然越拖越远。而且讲义没有给阶段性的验收标准学没学会自己也不知道没有正反馈就很难坚持。解决按第 6 章的压缩表重新排期每个阶段末尾设一个可运行的验收物跑通才算过。验收物不用复杂一个能读文件做统计的脚本、一个能返回 JSON 的本机接口都算。注意进度落后时不要回头重看前面的章节。往前推进遇到不懂的再回来查比反复从第一页开始有效得多。6. 把 23 周压成 12 周进度表、验收闸门与打卡脚本业余时间学这套资料按原排期走大概率半途而废我一般压到 12 周左右每周投入 8 到 10 小时。压缩的关键不是加快播放速度而是砍掉拓展内容、给每个阶段设一个必须跑通的验收物。周次内容范围验收物通过标准1–2变量、数据类型、控制流一个命令行小工具能读输入、做分支、输出格式化结果3–4函数、模块、文件读写一个文件批处理脚本能遍历目录、读写文件、异常不崩5异常处理与面向对象一个带自定义异常的类错误路径有明确提示6第三方库与虚拟环境一个独立环境的项目依赖清单可复现7–8数据分析段落一份分组统计报表空值处理正确、结果可导出9–10Web 或爬虫二选一一个本机接口加抓取端分页、超时、状态码都处理了11数据库基础一张表的增删改查能连上、能提交、能回滚12综合小项目一个能演示的完整脚本别人按说明能跑起来每周结束记一条日志内容不用多但要能看出这周到底做了什么。写个小脚本比自己拿本子记可靠也方便回头看节奏。# log_week.py每周一条记录用于回看节奏 # 用法python log_week.py 3 函数与模块 540 1 import csv import datetime import sys from pathlib import Path LOG Path(study_log.csv) if not LOG.exists(): LOG.write_text(日期,周次,内容,耗时分钟,是否通过验收\n, encodingutf-8) if len(sys.argv) 5: print(用法python log_week.py 周次 内容 耗时分钟 0或1) sys.exit(1) week, content, minutes, passed sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4] with LOG.open(a, newline, encodingutf-8) as f: csv.writer(f).writerow([datetime.date.today(), week, content, minutes, passed]) print(f第 {week} 周已记录)四个参数分别是周次、本周内容、投入分钟数、验收是否通过。攒到中段的时候跑一段统计能立刻看出哪几周在摸鱼、哪个模块反复卡住。这个反馈比任何感觉都准我见过太多人以为自己每天都在学一统计发现三周加起来不到十小时。# stats.py统计累计投入与验收通过率 import csv from collections import defaultdict weeks defaultdict(lambda: [0, 0]) with open(study_log.csv, encodingutf-8) as f: for r in csv.DictReader(f): weeks[r[周次]][0] int(r[耗时分钟]) weeks[r[周次]][1] max(weeks[r[周次]][1], int(r[是否通过验收])) total sum(v[0] for v in weeks.values()) passed sum(1 for v in weeks.values() if v[1]) print(f累计投入 {total / 60:.1f} 小时覆盖 {len(weeks)} 周验收通过 {passed} 周)血泪经验是验收物必须能跑不能是「看完了视频」。看完视频产生的是熟悉感不是能力这两者在两周后差距会非常明显。我判断一个阶段有没有过的唯一标准是关掉讲义从空文件开始能不能把那个验收物重新写出来。写不出来就是没过回去重做。从那以后我每次拿到这种成体系的课程资料都先花半小时把目录拆成表格、把验收标准写到每一行后面再开始学。有没有这张表最终完成率差得非常远。资源本身是全的缺的从来都是取舍和节奏。希望帮到你。本文还有配套的精品资源点击获取
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑