80个Python实战项目,分阶段练成编程高手

发布时间:2026/9/5 21:40:16
80个Python实战项目,分阶段练成编程高手 经常会有读者在评论区问我Python 基础语法已经过了一遍循环、函数、列表、字典也都能看懂但一到自己动手就不知道从哪里入手。还有人干脆把“Python 安装好了”当成“已经学会 Python 了”然后刷了半个月视频代码却没写过几行。这个问题的根源往往不是智商也不是数学基础而是学习方式出了问题。只看语法不做项目就像只看菜谱不下厨房永远体会不到“盐放多了怎么救”“火开大了怎么关”的真实手感。本文整理了 80 个 Python 实战项目按“入门基础 — 办公自动化 — 爬虫 — Web 框架 — 工具自动化 — 数据分析与AI入门”六个阶段分类。每一个项目都标出了推荐练习的核心知识点。你不需要一次性做完 80 个而是可以在不同学习阶段按需选取真正把学过的语法变成能运行、能演示、能写进简历的成果。为了不让文章变成干巴巴的项目列表我还会从清单里挑出 3 个具有代表性的项目给出完整代码和运行过程并在最后补充高频报错、调试思路和工程规范。无论你是零基础入门还是想从脚本开发过渡到后端或者爬虫方向这篇内容都能帮你把学习路线重新捋顺一遍。1. 为什么“项目驱动”是 Python 进阶最快的方式1.1 只刷语法和做项目差距到底在哪里语法学习是“输入”项目练习是“输出”。只刷语法时你看到的是一个个孤立的知识点for循环怎么用、dict怎么取值、requests.get()怎么发请求。这些知识点本身不难但如果你从不把它们组合起来遇到真实问题仍然会卡住。举个例子。很多初学者学过文件读写知道open()和with但当需要写一个“通讯录管理系统”要同时处理添加、查找、删除、保存时才发现自己根本没有“把数据组织起来”的能力。项目练习逼着你去面对这种组合性问题它比背语法更能提升真实的编码能力。另外项目的最大价值在于可见的反馈。你写完一个猜数字程序运行后它能和你互动你写完一个爬虫脚本运行后能看到一条条真实数据被保存下来。这种正反馈会不断强化学习动力也会让你很快意识到代码哪里有问题、算法哪里需要改。1.2 80 个项目如何分阶段练习本文把 80 个项目分成 6 个阶段不代表你必须按顺序从第 1 个做到第 80 个。分成阶段的目的是为了让你根据当前水平选择最合适的目标第 1 阶段适合刚学完 Python 基础语法的读者重点巩固循环、函数、文件读写、面向对象等基础能力。第 2 阶段适合想做办公自动化的读者重点掌握os、Path、pandas、docx、openpyxl等常用库。第 3 阶段适合对爬虫方向感兴趣的读者前提是明确合规边界只接触公开数据和个人学习场景。第 4 阶段适合想往后端开发发展的读者建议至少完整做完一个 Web API 项目。第 5 阶段适合已经写了不少脚本、想提升工程效率的读者。第 6 阶段适合想进入数据分析或人工智能方向的读者从 pandas、matplotlib 再到 PyTorch 按难度递进。我更推荐的做法是在每个阶段选择 23 个项目完整做完比快速浏览 20 个不写代码的项目有效得多。1.3 面试官到底想从项目里看到什么“练完即可就业”这个说法容易让人误解。能保证就业的从来不是“做过项目的数量”而是你解决问题的能力和对代码的理解深度。面试官看一个 Python 岗位候选人的项目时通常会关注几个点项目是否是个人独立完成技术栈是否真实掌握。代码结构是否清晰有没有函数拆分、异常处理、日志输出。遇到没有预料到的输入时程序会不会崩溃。项目中是否包含数据库、文件存储、外部接口等真实工程场景。候选人能不能讲清楚“为什么用这个方案”而不只是“这段代码能跑”。所以本文最后会专门用一节讲工程最佳实践。你现在做的每一个小项目都可以按照这些标准去打磨让它们从“课堂练习”变成“作品集”。2. Python 开发环境准备在打开项目清单之前先把环境准备好。环境不顺手后面写每个项目都会难受。2.1 Python 版本选择与安装目前主流教程大多使用 Python 3.9 以上版本。建议安装 Python 3.10 或更高版本但不必追求最新的 3.13。很多第三方库要经过一段时间才会对最新版本做完整适配选择比最新版低一个大版本通常最稳定。在 Windows 上安装时务必勾选 “Add Python to PATH”否则后面在命令行执行python会提示找不到命令。安装完成后打开终端或命令行工具验证版本python --version pip --version如果使用的是 macOS 或 Linux可能需要使用python3和pip3python3 --version pip3 --version只要能看到类似Python 3.11.x的输出就说明解释器已经安装成功。2.2 开发工具推荐初学者建议选择 VSCode 或 PyCharm。VSCode 更轻量安装 Python 扩展后可以实现代码提示、断点调试、Jupyter Notebook 等能力。使用 VSCode 时有几个容易踩坑的地方后面第 7 节会专门说明。PyCharm 社区版是免费的对 Python 项目结构支持更完整适合习惯“打开即用”的人。它的缺点是启动较慢机器配置偏低时会有明显卡顿。工具本身不影响技术能力。关键是你要能完成三件事新建 Python 文件、运行脚本、看到报错信息并定位行号。2.3 使用虚拟环境隔离项目依赖Python 项目的依赖管理是最容易忽略的一环。今天装requests明天装scrapy如果把所有包都装到全局环境一段时间后项目之间就会互相影响。建议每个项目都创建独立虚拟环境python -m venv venv在 Windows 中激活虚拟环境venv\Scripts\activate在 macOS / Linux 中激活虚拟环境source venv/bin/activate激活成功后命令行前面会出现(venv)标识。之后执行pip install requests再生成依赖清单pip freeze requirements.txt别人拿到你的项目后只需要执行pip install -r requirements.txt就能复现环境这也是项目交付的基本规范。3. 80 个 Python 实战项目全景清单下面按 6 个阶段列出全部 80 个项目。每个表格里的项目顺序大致按照难度从低到高排列。你可以把本页加入收藏后续学完一个阶段再回头来选下一个项目。3.1 第一阶段Python 基础语法项目0115这一阶段的目标不是“炫技”而是把条件判断、循环、函数、字符串、列表、字典、文件读写、异常处理等基础能力练扎实。不建议直接跳到爬虫或 Web 框架。基础不牢后面前后端联调、数据清洗、框架报错会消耗你大量本来可以用于学习核心逻辑的时间。编号项目名称核心知识点01猜数字小游戏random、while、条件判断02九九乘法表打印双层循环、格式化输出03简易命令行计算器函数定义、异常处理、正则04石头剪刀布随机数、字典映射、逻辑判断05随机密码生成器random、字符串处理、参数设计06文字冒险游戏流程控制、函数拆分、事件状态07学生成绩管理系统列表与字典组合、排序、统计08通讯录管理系统函数模块化、文件读写、JSON 持久化09待办事项管理器增删改查、日期处理、数据保存10个人日记本文件操作、时间戳、文本加密入门11命令行 2048 游戏二维列表、游戏逻辑、终端渲染12生日提醒器datetime、列表筛选、定时概念13简单图书馆借阅系统类与对象、对象列表管理14Markdown 转 HTML 工具正则、文本解析、模块设计15命令行贪吃蛇可选 Pygame面向对象、队列思想、事件循环你可以从 0105 中任选一个作为“第一个完整运行的小程序”。之后建议把 08 号通讯录管理系统完整做完因为它是很多数据库项目和 Web 项目的雏形。3.2 第二阶段文件处理与办公自动化项目1630Python 被广泛应用于办公自动化的原因很简单它擅长处理大量重复、机械的文件操作。这个阶段的项目会让你在不知不觉中掌握pathlib、os、openpyxl、python-docx、PyPDF2、Pillow等高频库。编号项目名称核心知识点16Excel 多表数据合并openpyxl/pandas、表头匹配17CSV 数据筛选与统计csv、条件过滤、聚合18Word 通知单批量生成python-docx、模板替换19PDF 合并与拆分PyPDF2/pypdf、文件遍历20PDF 文本批量提取PDF 解析、批量导出21图片批量压缩与格式转换Pillow、目录遍历22图片文字识别小工具pytesseract、OCR 基础23Excel 报表自动生成pandas、数据透视、图表24文件监控与自动归类watchdog、事件监听25邮件定时提醒助手smtplib、schedule定时任务26日志文件关键字告警文本读取、正则匹配、通知推送27批量文件编码转换chardet、编码检测、批量写入28网页长文导出 Markdown解析 HTML、Markdown 转换29批量二维码生成器qrcode、GUI 或命令行参数30文件夹自动备份脚本shutil、压缩、增量备份思路办公自动化项目最大的特点是“能做实事”。做完之后你可以直接用它帮家人、同学或同事解决一个真实问题。这种“被需要感”也是坚持学习的重要动力。3.3 第三阶段Python 爬虫项目3145在本节开始前必须先说清楚合规底线。爬虫技术本身是中立工具但在练习时要注意几点只爬取公开信息并且遵守目标网站的robots.txt规则。明确区分“个人学习”和“商业用途”。不要将采集到的数据用于商业牟利。控制请求频率不要对目标服务器造成压力。不要追求破解验证码、绕登录、突破风控等灰色技能。这类内容与正规就业的核心能力关联不大反而容易让你走上错误的路。真正的爬虫岗位或数据采集能力看重的其实是请求设计、错误重试、数据清洗、去重入库、定时调度、任务监控等工程能力。下面这些项目都围绕这些能力展开。编号项目名称核心知识点31静态网页文章采集requests、BeautifulSoup、选择器32分页列表数据采集翻页 URL 规律、循环请求33天气接口 JSON 解析requests.get()、JSON 解析34RSS 订阅源聚合feedparser、多源聚合35网页表格数据转 ExcelHTML 表格解析、结构化存储36JSON 数据清洗与去重入库数据去重、集合、SQLite 存储37CSV 批量数据回填批量请求公开接口、更新本地文件38Scrapy 新闻采集框架项目Scrapy 项目结构、Spider 编写39Scrapy 管道数据存储Item Pipeline、MySQL 或 SQLite 存储40请求失败自动重试脚本超时处理、指数退避重试41数据定时增量更新schedule/ Cron 思路、增量判断42请求头与 Cookie 基础设置Headers、Session、免登录场景43请求频率控制与限速延时、随机等待、滑动窗口44并发采集公开接口数据concurrent.futures、线程池45采集结果可视化报表matplotlib或pyecharts、汇总展示如果把这个阶段的目标浓缩成一句话不是“能抓到”而是“抓得稳、存得好、不添乱”。3.4 第四阶段Web 开发与框架项目4660如果你想往后端开发方向走至少需要完成一个 Web API 项目和一个带数据库的完整 Web 项目。在这 15 个项目中Flask、FastAPI、Django 是三条主流路线。Django 内置功能全面适合传统业务系统、内容管理后台Flask 轻量灵活适合个人博客和小型服务FastAPI 性能好、自动生成接口文档适合前后端分离项目。编号项目名称核心知识点46Flask 待办事项 API路由、请求与响应、JSON47Flask 文章发布后台表单处理、模板渲染、数据库48Flask 登录注册与会话Session、密码哈希、用户校验49Flask MySQL 信息管理系统SQLAlchemy、ORM、CRUD50FastAPI 通讯录管理接口Pydantic 模型、路径参数、接口文档51FastAPI SQLite CRUD数据库连接、增删改查52FastAPI 文件上传下载服务文件流、异步 IO53FastAPI 定时统计任务后台任务、定时聚合54FastAPI 接口权限校验依赖注入、Token 校验55Django 投票应用MTV 模式、模型与视图56Django 个人博客后台Admin 管理、文章分类、评论57Django 用户与权限模块权限分组、装饰器、登录中间件58FastAPI Redis 热点缓存Redis 读写、缓存更新策略59Flask Vue 前后端分离项目CORS、接口联调、部署方式60在线备忘录 Web 应用完整前后端、部署实践其中 50 号“FastAPI 通讯录管理接口”很适合作为第一个后端接口项目。它的数据模型清晰、接口语义直观完整代码在本文第 5 节会给出。3.5 第五阶段自动化与效率工具项目6170这类项目不一定“高大上”但对提升工作流效率特别有用。把它们部署到自己的电脑上每天使用你才能真正理解一个工具从“能用”到“好用”需要经过哪些迭代。编号项目名称核心知识点61桌面定时弹窗提醒GUI 编程、定时任务62剪贴板历史增强工具剪贴板监听、数据存储63本地文件自动备份目录同步、执行日志64系统健康巡检报告psutil、CPU/内存/磁盘采集65钉钉 / 企业微信机器人告警Webhook、消息推送66RPA 办公自动填录GUI 自动化、表格识别67Git 提交日志统计工具系统命令调用、解析、报表68局域网文件互传工具Socket、HTTP 服务、UI 设计69定时截图与留存脚本Pillow、自动化任务70自定义命令行脚手架argparse、工程化目录生成这类项目做完后你会慢慢发现很多工具的本质都是“输入数据、处理逻辑、输出结果”。对工程师来说发现问题并能写脚本解决本身就是一项稀缺能力。3.6 第六阶段数据分析与人工智能入门项目7180这一阶段的技术栈覆盖了pandas、numpy、matplotlib、scikit-learn、PyTorch等。难度比前面明显提升不再建议零基础读者一上来就做应该先完成至少前两个阶段的 34 个项目再进入本节。编号项目名称核心知识点71Pandas 销售数据清洗与分析DataFrame 筛选、缺失值处理72电商订单明细分析多表关联、分组聚合73Matplotlib 多维度可视化报表折线图、柱状图、饼图布局74NumPy 数组与矩阵运算广播机制、性能对比75客户流失预测入门scikit-learn、逻辑回归、评估指标76垃圾短信分类文本向量化、朴素贝叶斯77房价回归预测项目特征处理、线性回归、误差评估78MNIST 手写数字识别PyTorch、torchvision、卷积神经网络入门79股票价格趋势分析与展示金融数据接口、时间序列、技术指标计算80大模型接口问答应用封装大模型开放 API、提示词工程、对话流封装第 80 个项目的关键是强调“官方 API 合法调用”不要涉及任何越权、破解或隐私数据。如今很多 Python 工程师都在做 AI 应用层开发核心能力是把大模型接口封装成稳定可用的业务服务。4. 实战案例一Python 基础项目——通讯录管理系统在 80 个项目中08 号“通讯录管理系统”非常适合作为第一个完整项目。它不大不小刚好能把“函数拆解、数据存储、异常处理”串联起来。4.1 需求分析这个系统最少需要完成添加联系人。查看所有联系人。根据姓名搜索联系人。删除联系人。数据保存到本地 JSON 文件。程序再次启动时自动加载数据。你也可以在此基础上扩展“编辑联系人”“导出 CSV”“支持分组”等功能但这里先实现核心部分。4.2 完整代码实现# 文件路径contacts_demo/contacts.py import json import os DATA_FILE contacts.json def load_contacts(): 从 JSON 文件加载联系人列表 if not os.path.exists(DATA_FILE): return [] try: with open(DATA_FILE, r, encodingutf-8) as f: return json.load(f) except json.JSONDecodeError: print(数据文件损坏已备份后重新初始化) os.rename(DATA_FILE, DATA_FILE .bak) return [] def save_contacts(contacts): 把联系人列表保存到 JSON 文件 with open(DATA_FILE, w, encodingutf-8) as f: json.dump(contacts, f, ensure_asciiFalse, indent2) def add_contact(contacts): 新增联系人 name input(请输入姓名).strip() phone input(请输入手机号).strip() if not name or not phone: print(姓名和手机号不能为空) return contacts # 简单检查手机号是否已存在 for c in contacts: if c[phone] phone: print(该手机号已存在添加失败) return contacts contacts.append({name: name, phone: phone}) save_contacts(contacts) print(添加成功) return contacts def show_all(contacts): 展示所有联系人 if not contacts: print(当前没有联系人) return print( 联系人列表 ) for index, c in enumerate(contacts, start1): print(f{index}. {c[name]} - {c[phone]}) def search_contact(contacts): 按姓名搜索联系人 keyword input(请输入要搜索的姓名).strip() result [c for c in contacts if keyword in c[name]] if result: for c in result: print(f姓名{c[name]}手机号{c[phone]}) else: print(没有找到匹配的联系人) def delete_contact(contacts): 删除联系人 show_all(contacts) if not contacts: return contacts try: number int(input(请输入要删除的序号)) if number 1 or number len(contacts): print(序号越界) return contacts contacts.pop(number - 1) save_contacts(contacts) print(删除成功) except ValueError: print(请输入有效数字) return contacts def main(): contacts load_contacts() while True: print(\n 通讯录管理系统 ) print(1. 添加联系人) print(2. 查看所有联系人) print(3. 搜索联系人) print(4. 删除联系人) print(5. 退出) choice input(请输入功能编号).strip() if choice 1: contacts add_contact(contacts) elif choice 2: show_all(contacts) elif choice 3: search_contact(contacts) elif choice 4: contacts delete_contact(contacts) elif choice 5: print(已退出系统) break else: print(无效编号请重新输入) if __name__ __main__: main()4.3 运行与验证在项目目录执行python contacts.py预期交互效果 通讯录管理系统 1. 添加联系人 2. 查看所有联系人 3. 搜索联系人 4. 删除联系人 5. 退出 请输入功能编号1 请输入姓名张三 请输入手机号13800001111 添加成功再次运行程序之前添加的联系人依然存在这是因为数据已经通过save_contacts()写入contacts.json。这个项目虽然简单却包含了一个真实软件的基础流程用户输入 → 业务处理 → 数据持久化 → 下次启动恢复。后续学习 FastAPI 或数据库时你会发现逻辑结构有很多相似之处。5. 实战案例二办公自动化——文件批量整理工具编号 24很多程序员电脑里的“下载”文件夹能有两三年没清理里面密密麻麻全是 PDF、图片、安装包、压缩包。这类问题非常适合用脚本解决。5.1 项目功能设计遍历一个指定目录按照文件后缀自动分类到不同子目录图片jpg、png、gif、webp文档doc、docx、pdf、txt、md表格xls、xlsx、csv压缩包zip、rar、7z、tar、gz代码py、java、js、html、css程序默认只输出移动预览避免误操作。当确认结果无误后再执行真正的移动。5.2 完整代码实现# 文件路径file_organizer/organize.py import argparse from pathlib import Path import shutil CATEGORY_RULES { 图片: {.jpg, .jpeg, .png, .gif, .webp, .bmp}, 文档: {.doc, .docx, .pdf, .txt, .md}, 表格: {.xls, .xlsx, .csv}, 压缩包: {.zip, .rar, .7z, .tar, .gz}, 代码: {.py, .java, .js, .ts, .html, .css, .go}, 安装包: {.exe, .msi, .dmg, .pkg}, } def classify(file_path: Path): 根据后缀返回所属分类 suffix file_path.suffix.lower() for category, suffix_set in CATEGORY_RULES.items(): if suffix in suffix_set: return category return 其他 def organize(directory: Path, dry_run: bool True): 整理目录中的文件 if not directory.exists(): print(f目录不存在{directory}) return for file_path in directory.iterdir(): # 跳过子目录只看文件 if not file_path.is_file(): continue category classify(file_path) target_dir directory / category target_path target_dir / file_path.name if dry_run: print(f[预览] {file_path.name} - {category}/) continue # 创建目标目录并移动文件 target_dir.mkdir(exist_okTrue) # 如果目标目录已有同名文件加前缀避免覆盖 if target_path.exists(): target_path target_dir / f{file_path.stem}_副本{file_path.suffix} shutil.move(str(file_path), str(target_path)) print(f[完成] {file_path.name} - {category}/) def main(): parser argparse.ArgumentParser(description按文件类型自动归类工具) parser.add_argument(directory, typestr, help需要整理的目录路径) parser.add_argument(--execute, actionstore_true, help真正执行移动默认只预览) args parser.parse_args() source_dir Path(args.directory) # 默认 dry_runTrue只有加 --execute 才会执行移动 organize(source_dir, dry_runnot args.execute) if __name__ __main__: main()5.3 运行与验证先预览效果不加--executepython organize.py D:\Downloads输出类似[预览] 项目文档.pdf - 文档/ [预览] 截图.png - 图片/ [预览] 学习笔记.md - 文档/ [预览] 源码.zip - 压缩包/确认结果合理后再执行正式移动python organize.py D:\Downloads --execute这个设计背后的思路非常重要凡是涉及文件、数据库、配置变更的操作都应该默认提供“预览模式”或“回滚计划”而不是直接执行破坏性操作。这也是生产环境里的安全习惯。6. 实战案例三FastAPI 通讯录管理接口编号 50如果你往后端开发方向发展FastAPI 是非常适合作为起点的一个框架。它代码量少、类型提示清晰、自动生成接口文档写完后浏览器直接打开就能测试。6.1 创建项目结构contact-api/ ├── main.py ├── requirements.txt └── venv/6.2 编写完整接口# 文件路径contact-api/main.py from fastapi import FastAPI, HTTPException from pydantic import BaseModel app FastAPI(title通讯录 API 项目示例) # 为便于演示这里使用内存列表 # 学习阶段可以换成 MySQL 或 Redis contacts [] id_counter 1 class ContactIn(BaseModel): 新增联系人时接收的请求体 name: str phone: str class Contact(ContactIn): id: int app.post(/contacts, response_modelContact) def create_contact(item: ContactIn): 新增联系人 global id_counter if not item.name or not item.phone: raise HTTPException(status_code400, detail姓名和手机号不能为空) # 演示项目不做手机号格式深度校验 new_contact { id: id_counter, name: item.name, phone: item.phone, } contacts.append(new_contact) id_counter 1 return new_contact app.get(/contacts) def list_contacts(): 查询联系人列表 return contacts app.get(/contacts/{contact_id}) def get_contact(contact_id: int): 根据 id 查询联系人 for c in contacts: if c[id] contact_id: return c raise HTTPException(status_code404, detail联系人不存在) app.delete(/contacts/{contact_id}) def delete_contact(contact_id: int): 根据 id 删除联系人 for idx, c in enumerate(contacts): if c[id] contact_id: contacts.pop(idx) return {message: 删除成功} raise HTTPException(status_code404, detail联系人不存在)6.3 运行与验证在虚拟环境中安装依赖pip install fastapi uvicorn启动服务uvicorn main:app --reload运行成功后终端会显示服务地址http://127.0.0.1:8000。打开浏览器访问http://127.0.0.1:8000/docs你会看到 FastAPI 自动生成的 Swagger 接口文档。可以在页面上直接测试新增联系人、查询列表、删除联系人等操作。也可以在命令行中测试curl -X POST http://127.0.0.1:8000/contacts -H Content-Type: application/json -d {\name\:\李四\,\phone\:\13900002222\}预期返回{ id: 1, name: 李四, phone: 13900002222 }做完这个项目后你可以继续加上 SQLite 存储、Token 鉴权、异常处理中间件等能力让它更接近一个真实的后端服务。7. 常见问题与排查思路项目写得越多遇到的报错也越多。很多报错不是你能力不行而是问题定位方法不对。下面是 Python 实战项目中最常见的一些问题。7.1 高频问题一览问题现象常见原因解决思路python不是内部或外部命令安装 Python 时未勾选 PATH重装 Python 并勾选 Add Python to PATHpip安装第三方库超时网络到默认源不稳定使用国内镜像源安装例如清华或阿里云镜像ModuleNotFoundError: No module named requests当前环境没有安装对应库先激活虚拟环境再执行pip install requests在 VSCode 里运行代码报找不到模块选择了错误的 Python 解释器按CtrlShiftP选择当前项目的venv解释器运行后只显示exit code 0但没有输出文件保存为空或代码路径未执行检查文件是否包含print调用主入口是否用main()包裹读取中文字符串乱码文件编码不是 UTF-8用encodingutf-8打开文件并确认源码首行保存为 UTF-8爬虫抓不到页面内容目标页面动态渲染或返回非预期页面结构先保存 HTML 到本地检查选择器是否匹配爬虫被目标服务器限制请求过于频繁或请求头不完整降低请求频率补充 User-Agent遵守网站规则7.2 一个万能排错顺序遇到任何问题不要急着改代码。先按下面顺序排查看报错第一行的异常类型例如NameError、TypeError、FileNotFoundError。看最后一行提示的具体文件和行号。在代码里临时加print()输出中间变量确认数据是否符合预期。把代码片段复制到搜索引擎时只复制报错的核心部分不要复制整个文件。解决后记录到自己的 bug 文档中避免下次重复踩坑。7.3 为什么“程序正常运行但没有输出”很多初学者在 VSCode 或 PyCharm 里新建了一个空文件随手写了几个函数然后点击运行看到终端提示exit code 0却没有输出就以为程序出问题了。其实这只说明程序执行成功但没有执行任何打印操作。Python 不会自动调用你定义的函数。如果你写了def add(a, b): return a b程序本身不会输出任何内容。你需要主动调用它print(add(2, 3))还有一种情况是代码缩进有问题。比如main()没有写在if __name__ __main__:下面导致入口代码没有执行。这个细节在初学者代码里很常见。8. Python 项目工程化最佳实践当你能写出一个可以运行的小项目时下一步要思考的是怎么写才能便于阅读、调试、扩展8.1 代码结构不要“一把梭”新手写项目经常把所有逻辑都堆在一个main.py文件里。项目到 200 行还能忍到 2000 行时根本无法维护。推荐至少按“输入、处理、存储”的思路拆分函数project/ ├── main.py # 启动入口 ├── utils.py # 公共函数 ├── data/ # 数据文件 ├── output/ # 输出目录 └── requirements.txt # 依赖清单函数命名也要见名知意。比如fetch_weather()、save_to_json()而不是func1()、get()。8.2 异常处理要区分“保护”与“吞错”很多初学者喜欢这样写try: result 1 / 0 except Exception: pass这样程序不会报错但同时也会把真正的问题掩盖掉。更好的做法是打印当前错误信息try: result 1 / 0 except ZeroDivisionError as e: print(f计算失败{e})生产项目里的原则是该抛出的异常要抛出该记录的日志要记录。只捕获你预期会出现的异常类型不要轻易捕获所有Exception后静默处理。8.3 日志比 print 更可靠临时调试可以用print()但服务型项目建议用标准库loggingimport logging logging.basicConfig( levellogging.INFO, format%(asctime)s - %(levelname)s - %(message)s, ) logging.info(服务启动成功) logging.error(请求失败重试第 3 次)这样可以用开关控制日志级别也方便后续收集到文件中。8.4 从第一个项目开始就使用 Git哪怕只是自己练习也建议从第一天就使用 Gitgit init git add . git commit -m 完成通讯录管理系统第一版每次改动一个小功能后就提交一次。当你把代码改坏时你就能通过提交历史找回之前的可用版本。这个习惯比任何教程都实用。8.5 项目做完后写一小段 README很多练习项目就一张代码文件别人根本不知道该怎么运行。建议在每个项目目录下创建一个README.md内容不需要长但必须包含项目功能简介。运行环境。安装依赖命令。启动命令。目录结构说明。一份清晰的 README会让你在面试翻项目时逻辑顺畅也能体现你的工程意识。8.6 合规意识要刻在习惯里爬虫项目里最容易出问题的是数据来源。在训练时优先选择官方提供的 Open API。不需要登录即可访问的静态公开页面。目标网站明确允许采集的开放数据。不要在项目中使用任何需要破解验证码、绕过登录、突破风控的方式也不要拿采集到的数据用于商业销售。数据安全是一个工程师的基本红线。9. 总结与下一步建议这份 80 个 Python 实战项目清单本质上不是“算法题库”而是一条帮你把知识点串成能力的学习路径。前台基础项目练语法办公自动化项目练文件处理爬虫项目练数据采集Web 框架项目练后端服务数据分析项目练业务分析AI 项目练模型应用。下一步建议你不要试图一口气做完 80 个。可以从今天开始先选一个最简单、最感兴趣的项目动手。比如还在犹豫的话就先完成 08 号通讯录管理系统把代码运行起来再尝试给它加上“分组管理”或“CSV 导出”功能。项目数量本身只是表真正值钱的是你在反复调试中形成的思维方式和代码手感。把第一个项目完整做出来、记录清楚、提交到 Git后面每一个新项目都会越来越快。如果这篇文章对你有帮助可以收藏备用。等你做完一个阶段的项目欢迎回来再对照清单选下一个适合你的实战目标。