ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

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

可以使用 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和它在同一个目录下直接运行即可得到结果。
返回列表