# 班级成绩数据管理系统 - 数学老师专用# 初始化学生数据字典列表结构id唯一标识scores存储多门成绩整数列表students [{id: 1, scores: [85, 90, 88]},{id: 2, scores: [79, 82, 91]},{id: 3, scores: [95, 89, 92]},{id: 4, scores: [68, 75, 80]},{id: 5, scores: [92, 88, 95]}]# 辅助函数根据id查询学生返回学生字典或None复用逻辑def get_student(target_id):for student in students:if student[id] target_id:return student # 找到目标学生返回其字典return None # 遍历结束未找到返回None# 功能1查看所有学生成绩def show_students():print(所有学生成绩)for student in students:# 直接输出id和成绩列表不拼接字符串print(id:, student[id], 成绩:, student[scores])# 功能2添加新学生def add_student():# 输入新学生id直接转为整数new_id int(input(请输入新学生id整数))# 调用辅助函数检查id是否已存在if get_student(new_id) is not None:print(id已存在添加失败)return # id重复终止函数# 输入成绩数量至少1个score_count int(input(请输入成绩数量整数至少1))new_scores []# 循环输入对应数量的成绩for i in range(score_count):score int(input(f请输入第{i1}门成绩整数))new_scores.append(score)# 创建新学生字典并添加到列表new_student {id: new_id, scores: new_scores}students.append(new_student)print(添加成功)# 功能3修改学生成绩def modify_student():# 输入要修改的学生idmodify_id int(input(请输入要修改的学生id整数))# 调用辅助函数查找学生target_student get_student(modify_id)if target_student is None:print(未找到该学生修改失败)return # 未找到学生终止函数# 输入新的成绩数量和成绩new_score_count int(input(请输入新的成绩数量整数))new_scores []for i in range(new_score_count):score int(input(f请输入第{i1}门新成绩整数))new_scores.append(score)# 替换原成绩列表target_student[scores] new_scoresprint(修改成功)# 功能4删除学生def delete_student():# 输入要删除的学生iddelete_id int(input(请输入要删除的学生id整数))# 调用辅助函数查找学生target_student get_student(delete_id)if target_student is None:print(未找到该学生删除失败)return # 未找到学生终止函数# 从列表中删除目标学生字典students.remove(target_student)print(删除成功)# 功能5成绩统计分析4项核心统计def analyze_scores():# 1. 统计班级总人数total_students len(students)print(成绩统计分析)print(1. 班级总人数, total_students)# 计算每个学生的总分存入总分列表为后续统计准备total_scores []id_total_list [] # 存储(id, 总分)元组用于排名for student in students:student_total sum(student[scores])total_scores.append(student_total)id_total_list.append((student[id], student_total))# 2. 计算平均总分保留1位小数if total_students 0:print(2. 平均总分无数据班级无学生)else:average_total sum(total_scores) / total_studentsprint(2. 平均总分, round(average_total, 1))# 3. 查找最高分学生处理无学生的边界情况if total_students 0:print(3. 最高分学生无数据班级无学生)else:max_total max(total_scores)print(f3. 最高分学生总分{max_total})# 遍历找到所有总分等于最高分的学生for student in students:if sum(student[scores]) max_total:print( id, student[id], 总分, sum(student[scores]), sep)# 4. 按总分从高到低排名if total_students 0:print(4. 按总分排名无数据班级无学生)else:# 对(id, 总分)元组列表排序key指定按总分排序reverseTrue表示降序sorted_list sorted(id_total_list, keylambda x: x[1], reverseTrue)print(4. 按总分排名)# 用enumerate获取排名从1开始for rank, (student_id, total) in enumerate(sorted_list, start1):print(f 排名{rank}id{student_id}总分{total})# 主菜单交互框架def main():while True:# 打印固定菜单字符串常量print(班级成绩管理系统1. 查看所有学生成绩2. 添加新学生3. 修改学生成绩4. 删除学生5. 成绩统计分析6. 退出系统)# 输入功能编号转为整数choice int(input(请输入功能编号1-6))# 根据选择调用对应功能if choice 1:show_students()elif choice 2:add_student()elif choice 3:modify_student()elif choice 4:delete_student()elif choice 5:analyze_scores()elif choice 6:print(系统退出再见)break # 终止循环退出程序else:print(输入错误请重新输入1-6的整数)# 程序入口执行主函数if __name__ __main__:main()# 知识点说明按使用频率排序# 1. 数据结构列表append/remove遍历、字典键值访问、元组存储id与总分# 2. 控制流while循环主菜单循环、for循环遍历学生/成绩、if-elif-else条件判断、break退出循环# 3. 函数自定义函数功能拆分、函数调用复用逻辑、lambda匿名函数sorted排序key# 4. 内置函数len统计列表长度、sum计算成绩总和、max找最高分、sorted排序、round保留小数、enumerate获取排名# 5. 输入输出input获取用户输入、print输出内容支持多参数、int输入转整数# 6. 运算符算术运算符/除法、加法、比较运算符判断相等、赋值运算符赋值代码运行结果