如何用Python字典查找最高平均成绩学生并优化成绩输出格式
问题解决:用Python找出平均成绩最高的学生
问题描述
想用Python字典相关逻辑找出平均成绩最高的学生及其分数,因为只有4名学生,打算用for循环实现。要求成绩按用户输入的顺序输出,打印学生成绩时不能带大括号{}。
当前实现代码
grades = {} x = int(4) lst = [] for i in range(x): NAME = input('Student name: ') grade_nr_1 = float(input('Input grade number 1: ')) grade_nr_2 = float(input('Input grade number 2: ')) grade_nr_3 = float(input('Input grade number 3: ')) the_sum = (grade_nr_1 + grade_nr_2 + grade_nr_3) the_average = the_sum/3 lst.append(the_average) the_max_avr = max(lst) #print("{:.2f}".format(the_average)) #print(grades) if NAME not in grades: grades[NAME] = set() grades[NAME].add(grade_nr_1) grades[NAME].add(grade_nr_2) grades[NAME].add(grade_nr_3) for name,grade in sorted(grades.items()): #print(k,sorted(v)) print(f"{name}: [{grade}]") print(the_max_avr)
期望输出
Student name: alice Input grade number 1: 9.8 Input grade number 2: 10.0 Input grade number 3: 8.7 Student name: john Input grade number 1: 6.7 Input grade number 2: 9 Input grade number 3: 9.5 Student name: bob Input grade number 1: 8.8 Input grade number 2: 6.7 Input grade number 3: 5.6 Student name: laura Input grade number 1: 9.4 Input grade number 2: 9.7 Input grade number 3: 10 Student list: alice: [9.8, 10.0, 8.7] bob: [8.8, 6.7, 5.6] john: [6.7, 9.0, 9.5] laura: [9.4, 9.7, 10.0] Student with highest average grade: laura has an average grade of 9.70
修正后的代码及说明
修正代码
# 用列表存储学生完整信息,确保输入顺序 students = [] for _ in range(4): name = input('Student name: ') grade1 = float(input('Input grade number 1: ')) grade2 = float(input('Input grade number 2: ')) grade3 = float(input('Input grade number 3: ')) grades_list = [grade1, grade2, grade3] average_score = sum(grades_list) / 3 # 将学生信息打包为字典存入列表 students.append({ 'name': name, 'grades': grades_list, 'average': average_score }) # 输出学生列表 print("\nStudent list:") for student in students: # 格式化成绩为指定格式,去掉集合的大括号 formatted_grades = ', '.join(f"{g:.1f}" for g in student['grades']) print(f"{student['name']}: [{formatted_grades}]") # 找出平均分最高的学生 top_student = max(students, key=lambda s: s['average']) print("\nStudent with highest average grade:") print(f"{top_student['name']} has an average grade of {top_student['average']:.2f}")
关键修改点
- 保留输入顺序:用列表存储每个学生的完整信息,避免字典
sorted()排序导致的顺序打乱问题。 - 成绩存储方式:把成绩从
set改为list,既保留输入顺序,又不会自动去重(比如相同分数不会被合并)。 - 绑定学生与平均分:将平均分和学生姓名、成绩列表绑定存储,后续能直接通过平均分找到对应学生,无需单独维护平均分列表。
- 格式化输出:用
join()方法把成绩列表转为字符串,按照期望格式输出,彻底去掉集合的大括号。 - 快速找最高平均分:用
max()结合lambda表达式,直接根据平均分筛选出成绩最好的学生,逻辑更简洁。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

