亲爱的慕友们,在我们学习了 Python 中文件读取、数据结构和流程控制等知识后,已经掌握了处理和分析数据的基础能力。课程中,我们了解到不同操作系统下文件路径的表示方式有所差异,而使用 split() 方法处理文件路径相关数据时可能会面临一些问题。那在从虚拟文件读取学生成绩数据并处理的过程中,有没有更好的方式来应对文件路径的操作呢?欢迎小伙伴们一起讨论~
题目:
在一个学生成绩管理系统中,需要实现以下功能:
1、从虚拟文件中读取学生成绩数据,该虚拟文件格式为每行一个学生,包含学生姓名、各科成绩(语文、数学、英语等),不同字段用逗号分隔。
2、将读取的数据存储到字典中,字典的键为学生姓名,值为一个包含各科成绩的列表。
3、遍历字典,计算每个学生的总成绩和平均成绩,并将结果添加到字典中对应学生的成绩列表末尾。
4、输出总成绩最高的学生姓名和总成绩。
文件数据:
data = [
‘张三,85,90,88’,
‘李四,92,88,90’,
‘王五,78,85,80’
]
预计结果:总成绩最高的学生是 李四,总成绩为 270。
**
任务要求:
**
一、开发语言与环境要求
1、语言版本:Python3
2、开发工具:PyCharm
二、程序整体要求
1、完成需求中所涉及的所有功能,包括读取虚拟文件数据、数据存储、计算成绩、找出总成绩最高的学生
2、要求 Python 代码书写、命名符合 PEP 8 规范,在代码中添加必要的注释以提高可读性
3、代码结构层次分明,逻辑清晰,采用函数化编程思想,将不同功能封装到相应函数中
4、程序能够正常运行并输出正确结果,对于可能出现的异常情况进行适当处理
三、详细设计
1、数据读取与存储函数
(1)功能:从虚拟文件数据中读取学生信息,将数据存储到字典中
(2)实现思路:遍历虚拟文件的每一行数据,使用 split (’,’) 方法分割字段,将学生姓名作为字典的键,各科成绩组成的列表作为值
2、成绩计算函数
(1)功能:遍历学生字典,计算每个学生的总成绩和平均成绩,并添加到成绩列表中
(2)实现思路:循环遍历字典中的每个学生,对其成绩列表进行求和得到总成绩,再除以科目数量得到平均成绩,将这两个结果追加到成绩列表末尾
3、查找最高分学生函数
(1)功能:找出总成绩最高的学生姓名和对应的总成绩
(2)实现思路:初始化最高成绩和对应学生姓名,遍历字典比较每个学生的总成绩,更新最高成绩和学生姓名
4、主函数
(1)功能:调用上述函数,实现程序的整体流程控制
(2)实现思路:依次调用数据读取函数、成绩计算函数和查找最高分学生函数,最后输出结果
5、程序执行入口
(1)使用 if name == “main”: 语句作为程序的执行入口
(2)在入口处定义虚拟数据并调用主函数
一、项目规范与基础要求(25 分)
1、文件命名与变量规范(8 分)
(1)作业主文件名为 “main.py”,得 4 分;文件名错误或不规范,不得分。
(2)变量命名符合 PEP 8 规范(如使用小写字母 + 下划线形式,避免拼音、无意义命名),所有变量命名规范得 4 分;存在 1-2 处不规范命名扣 2 分,3 处及以上不规范不得分。
2.代码结构与注释(10 分)
(1)代码采用函数化编程,将 “数据读取”“成绩计算”“最高分查找” 等功能拆分到不同函数中,结构层次分明得 6 分;未拆分函数、代码混在一起,扣 4-6 分。
(2)关键代码(如成绩计算逻辑、数据分割步骤)添加适量注释,注释 (3)清晰易懂得 4 分;注释缺失或模糊,扣 2-4 分。
3.代码运行基础要求(7 分)
(1)程序可正常运行,无语法错误得 7 分;存在语法错误导致程序无法启动,不得分;能启动但运行中报错,视报错严重程度扣 3-5 分。
二、核心功能实现(60 分)
1.虚拟数据读取与字典存储(15 分)
(1)成功读取题目给定的虚拟数据(data 列表),并将数据正确存储到 “姓名为键、成绩列表为值” 的字典中,得 15 分;数据读取不完整(如漏读学生)扣 5 分;字典存储格式错误(如键不是姓名、值不是列表)扣 8-12 分。
2.总成绩与平均成绩计算(15 分)
(1)遍历字典成功计算每个学生的总成绩,且将总成绩追加到对应成绩列表末尾,得 8 分;计算错误或未追加总成绩,扣 5-8 分。
成功计算每个学生的平均成绩,且将平均成绩追加到成绩列表末尾(位于总成绩之后),得 7 分;计算错误或未追加平均成绩,扣 3-7 分。
3.总成绩最高学生查找与输出(15 分)
(1)正确找出总成绩最高的学生姓名,得 8 分;姓名查找错误不得分。
(2)正确获取该学生的总成绩,且按 “总成绩最高的学生是 XXX,总成绩为 XXX” 格式输出结果,得 7 分;总成绩获取错误扣 4 分,输出格式错误扣 2-3 分。
4.函数定义与返回值(15 分)
(1)自定义 “数据读取函数”(如 read_student_data),且函数能返回存储学生数据的字典,得 8 分;未定义该函数扣 5 分,函数无返回值扣 3 分。
(2)自定义 “成绩计算函数”(如 calc_total_average)或 “最高分查找函数”(如 find_top_student),函数功能正常实现,得 7 分;未定义对应函数或函数功能异常,扣 3-7 分。
**
三、细节处理与拓展(15 分)
**
1.数据类型转换与异常处理(8 分)
(1)将读取的成绩字段(字符串类型)正确转换为整数类型用于计算,得 4 分;未转换导致无法计算(如字符串拼接),扣 4 分。
(2)对可能的异常(如数据行格式错误、成绩非数字)进行简单处理(如判断、跳过),得 4 分;未处理异常但数据符合题目要求,不扣分;因未处理异常导致程序崩溃,扣 2-4 分。
结果准确性与冗余处理(7 分)
(3)最终输出的最高分学生姓名、总成绩与题目 “预计结果”(李四,270)完全一致,得 4 分;结果错误不得分。
(4)代码无冗余逻辑(如重复计算、无效循环),得 3 分;存在明显冗余代码,扣 1-2 分。