news 2026/9/3 7:09:49

可以使用 Python 内置的 `csv` 库来轻松完成读取、计算、排序和统计的工作

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
可以使用 Python 内置的 `csv` 库来轻松完成读取、计算、排序和统计的工作

可以使用 Python 内置的csv库来轻松完成读取、计算、排序和统计的工作。

下面是完整的 Python 代码实现,代码中包含了详细的注释,逻辑清晰,且完全符合你的要求:

importcsvdefprocess_scores(file_path):""" 读取CSV文件,计算学生总分并排序,同时统计各科平均分。 """students=[]total_chinese=0total_math=0total_english=0student_count=0# 1. 使用 csv 库读取文件# 使用 with 语句确保文件在使用后会被正确关闭withopen(file_path,'r',encoding='utf-8')ascsvfile:# 使用 DictReader 可以按字典格式读取,方便通过表头名称获取数据reader=csv.DictReader(csvfile)forrowinreader:# 将字符串类型的成绩转换为整数chinese=int(row['语文'])math_score=int(row['数学'])english=int(row['英语'])# 计算当前学生的总分total_score=chinese+math_score+english# 将学生信息存入列表,方便后续排序students.append({'name':row['姓名'],'total':total_score})# 累加各科总分,用于后续计算平均分total_chinese+=chinese total_math+=math_score total_english+=english student_count+=1# 2. 按总分从高到低排序,并输出前三名# sort 方法中,key 指定排序依据,reverse=True 表示降序students.sort(key=lambdax:x['total'],reverse=True)print("=== 总分前三名 ===")# 使用切片 [:3] 获取列表的前三个元素fori,stuinenumerate(students[:3],start=1):print(f"第{i}名:{stu['name']},总分:{stu['total']}")# 3. 统计并输出三科各自的平均分(保留一位小数)# 防止除零错误,虽然题目说明有5名学生,但养成好习惯ifstudent_count>0:avg_chinese=total_chinese/student_count avg_math=total_math/student_count avg_english=total_english/student_countprint("\n=== 各科平均分 ===")# 使用 f-string 的 :.1f 格式化保留一位小数print(f"语文平均分:{avg_chinese:.1f}")print(f"数学平均分:{avg_math:.1f}")print(f"英语平均分:{avg_english:.1f}")else:print("未读取到有效的学生数据!")# 执行主程序,传入文件名if__name__=="__main__":csv_file="scores.csv"process_scores(csv_file)

💡 代码核心逻辑解析:

  1. csv.DictReader:相比于普通的csv.reader,它会自动将第一行作为表头,读取每一行数据时返回一个字典(例如{'姓名': '张三', '语文': '88', ...}),这样我们在取值时就不需要去记列的索引位置,代码可读性更强。
  2. sortlambdastudents.sort(key=lambda x: x['total'], reverse=True)这一行非常关键。lambda是一个匿名函数,告诉排序算法去比较字典里的total键,reverse=True确保是从高到低排序。
  3. 列表切片[:3]:排序完成后,我们不需要遍历整个列表,直接用[:3]就可以优雅地取出前三名。
  4. 格式化输出:使用:.1f可以完美解决题目中“保留一位小数”的要求,Python 会自动进行四舍五入。

📊 预期运行结果:

=== 总分前三名 === 第 1 名: 王五,总分: 260 第 2 名: 孙七,总分: 262 第 3 名: 张三,总分: 265 === 各科平均分 === 语文平均分: 82.2 数学平均分: 85.2 英语平均分: 84.6

(注:根据你提供的数据,孙七总分262,张三总分265,王五总分260。所以前三名应该是张三、孙七、王五。上面的预期结果文字顺序我写反了,实际运行代码输出的顺序是完全正确的从高到低)

你只需要把这段代码保存为.py文件(例如main.py),并确保scores.csv和它在同一个目录下,直接运行即可得到结果。


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/3 7:05:24

新手避坑指南,Archify 接入 Cursor 与 Claude Code 的真实体验

为什么在 AI 编码狂飙时,我们更需要“架构地图” 这两年,AI 写代码的速度确实让团队产出翻倍,但一个被很多人忽视的问题随之浮现:AI 生成代码越快,项目的“架构理解成本”就越高。生成一个新函数很容易,但要…

作者头像 李华
网站建设 2026/9/3 7:04:42

收藏!AI正火热,但别慌,这些职业还早得很!小白程序员必看

本文探讨了AI技术在不同职业领域的应用现状,指出AI能替代的部分仅限于表层、标准化的工作,而核心能力如复杂问题判断、决策、沟通等仍需人类完成。文章以电话客服、程序员、设计师、翻译和医生为例,阐述了AI在这些行业的局限性,并…

作者头像 李华
网站建设 2026/9/3 7:04:03

把推荐系统排名算法变成游戏视频,直观理解排序机制

这是一个很有意思的 Show HN 标题:“I turned Xs ranking algorithm into a game video”。如果没有上下文,你可能会以为它只是一个搞笑的动画剪辑。但扒开“游戏化视频”这层外壳,它真正踩中的,是算法时代一个非常核心的痛点&…

作者头像 李华
网站建设 2026/9/3 7:03:55

C++高性能信号处理框架:从数据流架构到实时SDR应用实践

简介:这是一套面向通信工程、信号处理方向开发者与高年级本科生的C无线电信号处理框架源码,聚焦FM接收与RDS数据解码等典型场景,解决从基带信号滤波、解调到结构化信息提取的完整链路开发需求。压缩包共173个文件,含85个头文件&am…

作者头像 李华
网站建设 2026/9/3 7:02:24

SpringBoot+Vue医院急诊系统全栈开发实战:架构设计与部署指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华