八周Python强化计划(八)

实战项目(下)------ 项目优化、调试与未来学习路径

本周将对第7周的词频统计工具进行工程化升级 ,引入 日志记录、单元测试理念、代码规范 ,并教会学生如何调试规划下一步学习方向


🗓 第8周 教学主题:项目优化 + 调试 + 学习路线规划

🎯 学习目标

  1. 能使用 logging 模块替代 print 进行日志记录
  2. 理解单元测试的基本思想(使用 assert
  3. 掌握基础调试技巧(print、日志、断点)
  4. 理解 PEP8 代码风格并能使用工具检查
  5. 明确后续学习路径(Web / 数据 / 自动化等方向)

🕒 第15课:项目优化 ------ 日志、测试与健壮性(60分钟)

⏱ 时间分配建议

  • 项目回顾(5分钟)
  • 日志系统改造(20分钟)
  • 添加简单测试(20分钟)
  • 代码健壮性增强(10分钟)
  • Q&A(5分钟)

📚 1. 用 logging 替代 print(更专业的输出控制)

✅ 优势:可分级(DEBUG/INFO/WARNING/ERROR)、可输出到文件、可开关

python 复制代码
# text_utils.py(更新)
import logging

# 配置日志(通常在 main.py 中配置一次)
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(levelname)s - %(message)s'
)

def read_text_file(filepath):
    try:
        with open(filepath, 'r', encoding='utf-8') as f:
            logging.info(f"成功读取文件: {filepath}")
            return f.read()
    except FileNotFoundError:
        logging.error(f"文件未找到: {filepath}")
        return ""
    except Exception as e:
        logging.error(f"读取文件出错: {e}")
        return ""

💡 在 main.py 开头配置一次即可,所有模块共享日志器


📚 2. 添加简单"测试"(使用 assert

虽然不是正式单元测试(如 pytest),但 assert 是快速验证逻辑的好方法

python 复制代码
# test_utils.py(新增测试文件)
from text_utils import clean_text, count_words

def test_clean_text():
    assert clean_text("Hello, World!") == "hello world"
    assert clean_text("123!@#") == "123"
    print("✅ clean_text 测试通过")

def test_count_words():
    counter = count_words("apple banana apple")
    assert counter["apple"] == 2
    assert counter["banana"] == 1
    print("✅ count_words 测试通过")

if __name__ == '__main__':
    test_clean_text()
    test_count_words()

📌 运行测试:python test_utils.py


📚 3. 增强健壮性:处理空文件、全标点等情况

python 复制代码
# text_utils.py
def count_words(text):
    words = [word for word in text.split() if word.isalpha()]  # 只保留纯字母词
    if not words:
        logging.warning("文本中未找到有效单词")
        return Counter()
    return Counter(words)

word.isalpha() 过滤掉 "123", "can't" 等(可按需调整)


📚 4. 支持输出到文件(扩展功能)

python 复制代码
# main.py(新增参数)
parser.add_argument("--output", help="将结果保存到文件")

# 在输出处增加
output_str = format_output(top_words)
if args.output:
    with open(args.output, 'w', encoding='utf-8') as f:
        f.write(f"词频统计结果 - Top {args.top}\n")
        f.write("-" * 40 + "\n")
        f.write(output_str)
    logging.info(f"结果已保存到 {args.output}")
else:
    print(output_str)

✍️ 课堂练习(25分钟)

任务

  1. 在项目中集成 logging
  2. 编写 test_utils.py,至少测试2个函数
  3. 添加 --output 参数支持
  4. 运行测试并生成带输出的日志

✅ 预期效果:

bash 复制代码
python main.py sample.txt --top 3 --output result.txt
# 日志显示:INFO - 成功读取文件...
# INFO - 结果已保存到 result.txt

🕒 第16课:调试、代码规范与未来路线(60分钟)

⏱ 时间分配

  • 调试技巧演示(15分钟)
  • 代码风格与 PEP8(15分钟)
  • 学习路线规划(20分钟)
  • 课程总结 + 作品展示(10分钟)

📚 1. 调试(Debugging)三板斧

方法1:print 调试(快速但临时)
python 复制代码
def clean_text(text):
    print(f"[DEBUG] 原始文本: {repr(text)}")  # repr 显示换行/空格
    clean = text.lower().replace(",", "")
    print(f"[DEBUG] 清洗后: {repr(clean)}")
    return clean
方法2:logging.debug()
python 复制代码
logging.basicConfig(level=logging.DEBUG)  # 开启 DEBUG 级别

def clean_text(text):
    logging.debug(f"输入文本长度: {len(text)}")
    ...
方法3:使用 IDE 断点(推荐 VS Code)
  • 在代码行号左侧点击设置断点
  • F5 启动调试
  • 查看变量值、单步执行(Step Over / Into)

💡 演示:在 count_words 中设断点,观察 words 列表


📚 2. 代码风格:PEP8 与自动检查

PEP8 是 Python 官方代码风格指南

常见规则:
  • 缩进:4 个空格(不是 Tab)
  • 行长 ≤ 79 字符
  • 函数名:snake_case
  • 类名:PascalCase
  • 导入:标准库 → 第三方 → 本地模块,各组空一行
自动检查工具:pycodestyle(原 pep8
bash 复制代码
# 安装
pip install pycodestyle

# 检查
pycodestyle main.py

✅ 更强工具:flake8(集成了 pycodestyle + pyflakes)


📚 3. 学习路线建议(根据兴趣选择)

方向 推荐下一步 典型项目
自动化脚本 os, shutil, subprocess 批量重命名、日志分析
数据分析 pandas, matplotlib Excel 处理、数据可视化
Web 开发 Flask(轻量) 个人博客、API 服务
爬虫 requests, BeautifulSoup 新闻聚合、价格监控
桌面应用 tkinter(内置)或 PyQt 记事本、计算器

🌟 建议:先做一个小项目,再学新库!


📚 4. 课程总结:8周成长回顾

核心能力
1 函数进阶 + 异常处理
2 数据结构 + 推导式 + 生成器
3 文件操作 + 模块化
4-5 面向对象编程(OOP)
6 标准库 + 虚拟环境
7-8 项目开发 + 工程实践

✅ 你现在能:

  • 编写结构清晰的 200+ 行 Python 脚本
  • 使用虚拟环境管理依赖
  • 开发命令行工具
  • 调试和优化代码

🎁 课后彩蛋:初始化 GitHub 仓库

bash 复制代码
git init
git add .
git commit -m "feat: 完成词频统计工具 v1.0"
# 上传到 GitHub(可选)

📌 作品 = 未来面试的敲门砖!


🧠 本周核心实践清单

技能 工具/方法
日志记录 logging 模块
简单测试 assert + 测试函数
调试 print / logging.debug / IDE 断点
代码规范 PEP8 + pycodestyle
项目管理 虚拟环境 + requirements.txt + Git

📝 最终任务(毕业项目)

完善你的词频统计器,并提交到 GitHub:

  • 包含 README.md(说明如何使用)
  • 包含 requirements.txt
  • 代码符合基本 PEP8
  • 至少有一个测试函数
    示例 README 内容:
markdown 复制代码
# Word Counter
一个命令行词频统计工具。

## 使用
```bash
python main.py article.txt --top 10 --output result.txt
复制代码

🎯 恭喜完成8周 Python 强化训练!

你现在已具备 独立开发小型 Python 项目 的能力。下一步:动手做,持续写代码!

相关推荐
我想吃烤肉肉16 小时前
Python 中 asyncio 是什么?
爬虫·python·自动化
2201_7578308716 小时前
Bean原理篇
java·开发语言
咕噜签名-铁蛋16 小时前
英伟达旗下
python
草原上唱山歌16 小时前
推荐学习的C++书籍
开发语言·c++·学习
皮肤科大白16 小时前
图像处理的 Python库
图像处理·人工智能·python
asdfg125896317 小时前
小程序开发中的JS和Go的对比及用途
开发语言·javascript·golang
FL162386312917 小时前
基于yolo11实现的车辆实时交通流量进出统计与速度测量系统python源码+演示视频
开发语言·python·音视频
华如锦17 小时前
四:从零搭建一个RAG
java·开发语言·人工智能·python·机器学习·spring cloud·计算机视觉
向阳蒲公英17 小时前
Pycharm2025版本配置Anaconda步骤
python
每天吃饭的羊17 小时前
媒体查询
开发语言·前端·javascript