一、实验目的

  1. 构建一个基于 Streamlit 的交互式 Web 应用,用于展示和运行《Python大数据分析与挖掘实战(第2版)》教材中的代码示例。

  2. 提供多语言界面(中文、英文、越南语、老挝语),支持深色模式,增强用户体验。

  3. 实现代码查看、自动解析(提取文档字符串与注释)、在线运行测试、AI 智能问答等核心功能。

  4. 支持用户标记学习进度(已完成实验),并能自动跳转下一实验或下一章。

  5. 解决原始代码中存在的目录定位、编码兼容、进度条参数错误等问题,并进行全面优化。


二、实验环境

项目 说明
操作系统 Windows 11 / 10
Python 版本 3.8+
主要库 streamlit, subprocess, tempfile, pathlib, re, typing, openai(可选)
代码编辑器 VS Code / Spyder / PyCharm
运行命令 streamlit run app.py
数据目录 C:\Users\23769\.spyder-py3\...\程序与数据 (2) (可动态修改)

三、系统设计与架构

3.1 总体架构

系统采用前后端一体的 Streamlit 框架,整体分为以下几个模块:

  • 国际化模块:基于字典的翻译系统,支持动态语言切换。

  • 文件加载模块:递归扫描指定根目录,识别“第1章”~“第8章”文件夹,读取所有 .py 文件内容(支持多种编码)。

  • 代码解析模块:自动提取文档字符串(docstring)或前20行注释,展示章节学习要点。

  • 代码运行模块:将代码写入临时文件,调用子进程执行,捕获标准输出/错误,超时控制。

  • AI 助手模块:可选调用 OpenAI API 进行智能问答,无 API Key 时提供基于正则的模拟分析。

  • 进度管理模块:使用 st.session_state 存储用户完成的实验列表,支持章节进度重置。

  • UI 样式模块:自定义 CSS 背景图、卡片样式,适配深色模式。

3.2 核心函数与流程
函数名 功能描述
t(key, **kwargs) 根据当前语言返回翻译文本,支持命名参数格式化。
get_chapter_number() 从“第N章”中提取数字 N。
read_file_content() 多编码尝试读取文件内容(utf-8, gbk, gb2312, utf-8-sig)。
find_chapter_root() 智能路径穿透:如果当前目录无“第”字文件夹但只有一个子目录,则自动进入,最多穿透3层。
load_all_data() 缓存加载所有章节的代码内容,返回 {章节名: {文件名: 代码}}
get_ai_response() 调用 OpenAI API 或生成模拟回答。
apply_custom_css() 设置背景图片、渐变覆盖、卡片样式。
init_session_state() 初始化所有会话状态变量。
3.3 目录结构示例

text

程序与数据 (2)/
└── Python大数据分析与挖掘实战:微课版(第2版)程序与数据/
    ├── 第1章/
    │   ├── 1-1 基础语法.py
    │   └── ...
    ├── 第2章/
    │   ├── 2-1 NumPy数组.py
    │   └── ...
    ...
    └── 第8章/
        └── ...

应用支持自动穿透一层子目录,用户只需指定最外层文件夹即可。


四、主要功能实现

4.1 多语言国际化
  • 定义 TRANSLATIONS 字典,包含四种语言的所有界面文本。

  • 侧边栏提供下拉菜单,切换时自动刷新页面并播放气球动画。

  • 所有动态文本(如文件数、进度)均通过 t() 函数格式化输出。

4.2 代码查看与分析
  • 代码查看:语法高亮 + 行号显示,并提供下载按钮。

  • 代码解析

    • 优先提取文件开头的三引号文档字符串。

    • 若无文档字符串,则提取前20行中的单行注释。

    • 根据章节号显示预设的学习要点(如“NumPy 数组创建”、“Pandas 数据清洗”)。

4.3 在线运行测试
  • 使用 subprocess.run() 在独立进程中执行临时 Python 文件。

  • 超时时间设为 30 秒,防止死循环。

  • 自动检测代码中的 import / from 语句,列出依赖库提醒用户。

  • 分别显示标准输出和错误输出。

4.4 AI 智能助手
  • 真实模式:若环境变量 OPENAI_API_KEY 存在,调用 gpt-3.5-turbo 分析代码。

  • 模拟模式:无 API Key 时,基于正则提取代码特征(行数、导入库、函数/类名、注释、绘图/机器学习关键词)生成基础分析报告。

  • 对话历史保存在 st.session_state.ai_messages 中,支持连续问答。

4.5 进度跟踪与导航
  • 每个实验(.py 文件)可标记为“已完成”,数据存储在 completed_experiments[章节] 列表中。

  • 侧边栏显示当前章节的进度条(已完成数/总数)。

  • 提供“重置本章进度”和“重置全部进度”按钮。

  • 主界面底部提供“下一实验”和“下一章”按钮,自动跳转。

4.6 样式与用户体验
  • 背景图采用东南亚风格的棕榈树与寺庙图片(来自 Pexels),叠加半透明白/黑色渐变。

  • 学习卡片(.learning-card)使用圆角、左边框高亮。

  • 深色模式动态切换,适配侧边栏、代码块、卡片背景。

  • 语言切换时播放 st.balloons() 动画并显示友好提示。


五、优化与修复说明

相比原始版本,本实验报告对应的代码进行了以下优化:

问题 解决方案
根目录下嵌套一层文件夹导致找不到“第1章” 增加 find_chapter_root() 自动穿透唯一子目录,最多三层。
文件编码错误(如 GBK 无法解码) 增加 utf-8-sig 编码尝试,并按优先级依次尝试。
st.progress 参数格式错误(原代码中使用了未命名的参数) 改为 st.progress(value, text=formatted_string)
翻译字典中 learning_points 被错误当作字符串处理 直接返回字典对象,并在使用时判断类型。
模拟 AI 回答过于简单 增加对函数、类、注释、可视化、机器学习等特征的提取与描述。
临时文件可能未删除 在 finally 块中增加异常安全的删除操作。
章节排序使用字符串而非数字 提取章节号并按整数排序,避免“第10章”排在“第2章”之前。
缺少对空目录或权限错误的处理 添加 try...except PermissionError 和目录存在性检查。
代码重复(如文件读取逻辑) 抽取为独立函数 read_file_content,提高可维护性。

六、实验步骤与结果展示

6.1 运行应用
  1. 安装 Streamlit:pip install streamlit

  2. 将最终代码保存为 app.py

  3. 执行命令:streamlit run app.py

  4. 浏览器自动打开 http://localhost:8501

6.2 界面功能演示
功能模块 操作说明 预期结果
语言切换 侧边栏选择“English” 界面立即切换为英文,并显示气球动画。
深色模式 点击“🌙 深色模式”开关 背景变暗,卡片、代码块颜色自动调整。
根目录设置 输入正确路径(如 C:\Users\23769\...\程序与数据 (2) 自动识别章节文件夹,侧边栏显示章节列表。
代码查看 选择“第1章” → 某个 .py 文件 → “📝 代码查看”标签 显示语法高亮的代码,可下载。
代码解析 切换到“📖 代码解析”标签 展示文件文档字符串或注释,以及本章学习要点。
运行代码 切换到“⚙️ 运行测试”,点击“▶️ 运行此代码” 弹出运行结果(输出/错误),超时提示。
AI 助手 在“🤖 AI 助手”标签输入问题,例如“解释这段代码的用途” 模拟模式下返回代码概览;真实模式下返回 GPT 分析。
标记完成 点击“✅ 标记当前实验为已完成” 进度条更新,文件状态变为“已完成”。
下一实验/下一章 完成一个文件后点击“下一实验 ➡️”;章节末尾点击“下一章 ➡️” 自动切换到下一个文件或下一章的第一个文件。
6.3 实际运行截图(描述)
  • 侧边栏:显示语言选择、深色模式、根目录输入框、当前目录下的文件夹列表、章节下拉框、文件搜索框、平台统计卡片、进度条、重置按钮。

  • 主内容区:顶部标题与副标题;文件信息行(文件名、行数);四个标签页(代码查看、代码解析、运行测试、AI 助手)。

  • 底部:标记完成按钮、下一实验/下一章按钮、版权信息。


七、实验总结

  1. 成功构建了一个功能完善的 Python 教学辅助平台,支持教材代码的统一管理、运行和分析。

  2. 多语言国际化设计使得平台可面向不同语种的学生,具有较好的扩展性。

  3. 智能目录穿透解决了常见的一层嵌套问题,降低了用户配置门槛。

  4. AI 助手的加入(即使模拟模式)为学生提供了基础的代码理解辅助,真实 API 模式下可提供更深入的解答。

  5. 进度跟踪与导航功能有助于学生按章节顺序学习,提升实验效率。

  6. 通过本次实验,深入掌握了 Streamlit 的状态管理、缓存机制、子进程调用、动态样式修改以及国际化实现技巧。

八、后续改进方向

  • 增加代码自动保存与运行历史记录。

  • 支持更多编程语言(R、SQL)的展示与运行。

  • 集成 Jupyter Notebook 内核,实现交互式单元格执行。

  • 增加用户登录与云端进度同步功能。

  • 优化模拟 AI 的解析能力,引入本地小模型(如 transformers)替代正则。

  • 20260412150627-streamlit运行视频-1

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐