主题
第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) |
| 生成 HTML | Python 输出网页文件 | Python 写入 .html 文件 |
关键收获:Python 擅长处理数据,HTML 擅长展示信息——它们结合起来就是最佳搭档!
1. Python 列表的编号(索引)从几开始?
2. 以下哪个是 Python 字典的正确写法?
3. 在 f-string 中,花括号里的变量名会被替换成什么?
4. 今天的项目中,Python 和 HTML 各自的角色是什么?
挑战任务
- 真实数据:把你自己最近的考试成绩输入进去,看看分析结果
- 增加趋势分析:让 HTML 报告显示每科成绩的趋势(用箭头 ↑↓→ 表示进步、退步、稳定)
- 多人对比:改造程序,支持输入多个同学的数据,生成对比报告
- 零花钱分析器:用同样的方法做一个零花钱收支分析器
参考示例
本课的完整示例代码可以在这里查看:grade-analyzer.py
下载后在终端运行:
bash
python grade-analyzer.py
留言讨论