可以使用 Python 内置的 `csv` 库来轻松完成读取、计算、排序和统计的工作 可以使用 Python 内置的csv库来轻松完成读取、计算、排序和统计的工作。下面是完整的 Python 代码实现代码中包含了详细的注释逻辑清晰且完全符合你的要求importcsvdefprocess_scores(file_path): 读取CSV文件计算学生总分并排序同时统计各科平均分。 students[]total_chinese0total_math0total_english0student_count0# 1. 使用 csv 库读取文件# 使用 with 语句确保文件在使用后会被正确关闭withopen(file_path,r,encodingutf-8)ascsvfile:# 使用 DictReader 可以按字典格式读取方便通过表头名称获取数据readercsv.DictReader(csvfile)forrowinreader:# 将字符串类型的成绩转换为整数chineseint(row[语文])math_scoreint(row[数学])englishint(row[英语])# 计算当前学生的总分total_scorechinesemath_scoreenglish# 将学生信息存入列表方便后续排序students.append({name:row[姓名],total:total_score})# 累加各科总分用于后续计算平均分total_chinesechinese total_mathmath_score total_englishenglish student_count1# 2. 按总分从高到低排序并输出前三名# sort 方法中key 指定排序依据reverseTrue 表示降序students.sort(keylambdax:x[total],reverseTrue)print( 总分前三名 )# 使用切片 [:3] 获取列表的前三个元素fori,stuinenumerate(students[:3],start1):print(f第{i}名:{stu[name]}总分:{stu[total]})# 3. 统计并输出三科各自的平均分保留一位小数# 防止除零错误虽然题目说明有5名学生但养成好习惯ifstudent_count0:avg_chinesetotal_chinese/student_count avg_mathtotal_math/student_count avg_englishtotal_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_filescores.csvprocess_scores(csv_file) 代码核心逻辑解析csv.DictReader相比于普通的csv.reader它会自动将第一行作为表头读取每一行数据时返回一个字典例如{姓名: 张三, 语文: 88, ...}这样我们在取值时就不需要去记列的索引位置代码可读性更强。sort与lambdastudents.sort(keylambda x: x[total], reverseTrue)这一行非常关键。lambda是一个匿名函数告诉排序算法去比较字典里的total键reverseTrue确保是从高到低排序。列表切片[:3]排序完成后我们不需要遍历整个列表直接用[:3]就可以优雅地取出前三名。格式化输出使用:.1f可以完美解决题目中“保留一位小数”的要求Python 会自动进行四舍五入。 预期运行结果 总分前三名 第 1 名: 王五总分: 260 第 2 名: 孙七总分: 262 第 3 名: 张三总分: 265 各科平均分 语文平均分: 82.2 数学平均分: 85.2 英语平均分: 84.6(注根据你提供的数据孙七总分262张三总分265王五总分260。所以前三名应该是张三、孙七、王五。上面的预期结果文字顺序我写反了实际运行代码输出的顺序是完全正确的从高到低)你只需要把这段代码保存为.py文件例如main.py并确保scores.csv和它在同一个目录下直接运行即可得到结果。

相关新闻

最新新闻

软考系统分析师高效备考:四阶段策略与三科突破技巧

软考系统分析师高效备考:四阶段策略与三科突破技巧

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

2026/9/3 7:45:04
鑫谷M400T MESH机箱风道设计详解与散热测试指南

鑫谷M400T MESH机箱风道设计详解与散热测试指南

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

2026/9/3 7:45:04
STM32H743驱动ESP8266实现双模TCP服务器:AP+STA模式实战指南

STM32H743驱动ESP8266实现双模TCP服务器:AP+STA模式实战指南

简介:本资源是一套面向嵌入式物联网开发者的完整工程源码,聚焦STM32H743与ESP8266协同实现双模TCP服务器(APSTA)的实战方案,适用于具备C语言、STM32 HAL/LL库及Wi-Fi通信基础的中高级开发者。项目解决边缘设备在复杂网…

2026/9/3 7:45:04
嵌入式开发实战:从PPT构想到稳定产品的工程化转型指南

嵌入式开发实战:从PPT构想到稳定产品的工程化转型指南

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

2026/9/3 7:45:04
Matlab气候数据EOF分析:从unexpected eof到REOF物理解读

Matlab气候数据EOF分析:从unexpected eof到REOF物理解读

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

2026/9/3 7:45:04
UE5魂系游戏开发教程01

UE5魂系游戏开发教程01

本系列使用UE5.5.4第三人称模板进行制作,本文讲述加速跑功能,这是该教程的第一部分。 一.工程&组件配置 1.首先通过UE5.5.4创建第三人称模板,后续将基于该工程进行开发 2.接下来制作加速跑,加速跑应该是一个组件,在底部内容浏览器处右键,创建ActorComponent类型蓝图…

2026/9/3 7:40:04