Skip to content
第 9 课 / 共 12 课

第9课:Python 数据魔法 —— 让数据开口说话

📊 数据就藏在你身边——成绩单、作息表、零花钱记录……今天我们要让 Python 帮你分析它们!

⏱️ 预计用时:55 分钟

学习目标

学完这节课,你将会:

  • 掌握 Python 的列表字典,学会组织和存储复杂数据
  • 学会用 for 循环遍历数据,做统计和分析
  • 学会文件读写——把数据保存到文件,也能从文件里读取
  • 用 Python 做一个学习数据分析器,并生成漂亮的 HTML 报告

概念时间:怎样把数据"装"进程序?

上节课我们学了变量——一个变量就像一个盒子,装一个东西。但如果你要装一整个班的成绩呢?总不能创建 50 个变量吧?

列表(List)= 一排排整齐的储物柜

列表就像学校里的储物柜,一排格子,每个格子都有编号,里面各放着一个东西。

python
# 储物柜里装着每次考试的分数
scores = [85, 92, 78, 95, 88]

# 第1个格子(编号从0开始!)
print(scores[0])    # 输出:85

# 最后一个格子
print(scores[-1])   # 输出:88

# 一共有几个格子
print(len(scores))  # 输出:5

你可以往列表里添加删除修改元素:

python
scores.append(90)      # 在末尾添加一个 90
scores.remove(78)      # 删掉 78
scores[0] = 100        # 把第1个改成 100

小贴士

列表的编号从 0 开始,不是从 1 开始。这是所有编程语言的传统——虽然有点反直觉,但用多了就习惯了。就像楼层号,有些地方 G 楼就是 0 楼。

字典(Dict)= 贴着标签的文件夹

如果说列表是用编号找东西,字典就是用名字找东西。

python
# 一个学生的信息
student = {
    "姓名": "小明",
    "年龄": 13,
    "班级": "初一(3)班",
    "爱好": ["编程", "画画", "篮球"]
}

# 用"标签"来找
print(student["姓名"])   # 输出:小明
print(student["爱好"])   # 输出:['编程', '画画', '篮球']

字典里的每一项都是 "键: 值" 的配对——"键"就是标签名,"值"就是里面装的东西。

想了解更多?

列表和字典可以嵌套使用——列表里装字典,字典里装列表,就像俄罗斯套娃一样。

python
# 一个班的成绩表
class_scores = [
    {"姓名": "小明", "语文": 85, "数学": 92},
    {"姓名": "小红", "语文": 90, "数学": 88},
    {"姓名": "小刚", "语文": 78, "数学": 95}
]

这就是现实世界数据在程序里的样子!数据库、API 返回的数据,几乎都是这种"列表套字典"的结构。

for 循环 = 挨个检查每个格子

当你想处理列表里的每一项时,就用 for 循环:

python
scores = [85, 92, 78, 95, 88]

# 把每个分数都打印出来
for score in scores:
    print(f"分数:{score}")

# 计算平均分
total = sum(scores)
average = total / len(scores)
print(f"平均分:{average}")

小贴士

f"分数:{score}" 叫做 f-string,是 Python 里最方便的字符串拼接方式。在引号前加个 f,就可以用 {} 把变量嵌进去。就像填空题一样!


概念时间:文件读写

程序关掉后,变量里的数据就没了。要想把数据长久保存,就需要写入文件。

写入文件

python
# 打开文件(如果不存在会自动创建)
with open("my_data.txt", "w", encoding="utf-8") as f:
    f.write("第一行数据\n")
    f.write("第二行数据\n")

读取文件

python
with open("my_data.txt", "r", encoding="utf-8") as f:
    content = f.read()
    print(content)

小贴士

with open(...) as f: 这种写法的好处是,不管代码有没有出错,文件最后都会自动关闭。就像"用完记得关门"是自动的。encoding="utf-8" 确保中文不会乱码。


动手时间:做一个学习数据分析器!

今天的项目分两个阶段:先做一个终端版的数据分析器,然后升级它,让它生成一个漂亮的 HTML 报告

第一步:创建项目

bash
mkdir grade-analyzer
cd grade-analyzer
claude

第二步:让 Claude Code 创建数据分析器

魔法咒语

用 Python 做一个学习数据分析器,要求:
1. 文件名叫 analyzer.py
2. 定义一个数据结构,包含一个学生各科的成绩(至少5科),每科有多次考试成绩
3. 示例数据格式(用字典和列表):
   - 语文:[85, 90, 78, 92, 88]
   - 数学:[92, 85, 96, 88, 90]
   - 英语:[78, 82, 85, 80, 88]
   - 等等
4. 分析功能:
   - 每科的平均分、最高分、最低分
   - 找出最强科目和最弱科目
   - 计算总平均分
   - 分析每科的进步趋势(最近几次是否在提高)
5. 在终端用格式化的方式漂亮地输出结果
6. 用 emoji 和分隔线让输出好看

运行试试:

bash
python analyzer.py

你应该能看到每科的详细分析结果,包括平均分、最高最低分、强弱科目等。

第三步:理解核心代码

看看 Claude Code 写的代码,你会看到这些关键部分:

字典存储成绩数据

python
grades = {
    "语文": [85, 90, 78, 92, 88],
    "数学": [92, 85, 96, 88, 90],
    "英语": [78, 82, 85, 80, 88],
}

遍历字典做分析

python
for subject, scores in grades.items():
    avg = sum(scores) / len(scores)
    highest = max(scores)
    lowest = min(scores)
    print(f"{subject}: 平均 {avg:.1f}, 最高 {highest}, 最低 {lowest}")

:.1f 是格式化数字——保留一位小数。92.6666666 会显示成 92.7

第四步:让分析器支持手动输入

魔法咒语

改进 analyzer.py:
1. 让用户可以手动输入自己的成绩数据
2. 先问有哪些科目(用逗号分隔输入)
3. 再逐科问有几次考试成绩(用空格分隔输入)
4. 输入完成后做分析
5. 分析完后把数据保存到 grades.json 文件里
6. 下次运行时,先检查有没有 grades.json,如果有就问用户是用已有数据还是输入新数据

第五步:生成 HTML 报告(Python + HTML 结合!)

这一步是今天的重头戏——让 Python 生成一个漂亮的 HTML 页面来展示分析结果!

魔法咒语

给 analyzer.py 加一个"生成 HTML 报告"的功能:
1. 分析完成后,用 Python 生成一个 report.html 文件
2. HTML 报告要包含:
   - 标题和生成日期
   - 一个表格显示每科的平均分、最高分、最低分
   - 用不同颜色标记:90分以上绿色,60-89蓝色,60以下红色
   - 最强科目和最弱科目的醒目提示
   - 总平均分和整体评价
3. 报告要有漂亮的 CSS 样式(渐变背景、圆角卡片等)
4. 生成完成后在终端提示"报告已生成,请打开 report.html 查看"
5. 自动用浏览器打开 report.html(用 webbrowser 模块)

运行后,一个漂亮的 HTML 报告会自动在浏览器中打开!

小贴士

这就是 Python + HTML 结合的威力!Python 负责数据处理和分析(后端工作),HTML 负责漂亮的展示(前端工作)。你已经在体验"全栈开发"了!


今天学了什么?

概念说明例子
列表用编号存储一组数据[85, 92, 78]
字典用名字存储配对数据{"语文": 85, "数学": 92}
for 循环遍历每一项数据for score in scores:
f-string字符串格式化f"平均分:{avg:.1f}"
文件写入保存数据到文件open("file.txt", "w")
JSON结构化数据格式json.dump(data, f)
生成 HTMLPython 输出网页文件Python 写入 .html 文件

关键收获:Python 擅长处理数据,HTML 擅长展示信息——它们结合起来就是最佳搭档!

1. Python 列表的编号(索引)从几开始?

2. 以下哪个是 Python 字典的正确写法?

3. 在 f-string 中,花括号里的变量名会被替换成什么?

4. 今天的项目中,Python 和 HTML 各自的角色是什么?


挑战任务

  1. 真实数据:把你自己最近的考试成绩输入进去,看看分析结果
  2. 增加趋势分析:让 HTML 报告显示每科成绩的趋势(用箭头 ↑↓→ 表示进步、退步、稳定)
  3. 多人对比:改造程序,支持输入多个同学的数据,生成对比报告
  4. 零花钱分析器:用同样的方法做一个零花钱收支分析器

参考示例

本课的完整示例代码可以在这里查看:grade-analyzer.py

下载后在终端运行:

bash
python grade-analyzer.py

留言讨论