You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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}")

关键修改点

  1. 保留输入顺序:用列表存储每个学生的完整信息,避免字典sorted()排序导致的顺序打乱问题。
  2. 成绩存储方式:把成绩从set改为list,既保留输入顺序,又不会自动去重(比如相同分数不会被合并)。
  3. 绑定学生与平均分:将平均分和学生姓名、成绩列表绑定存储,后续能直接通过平均分找到对应学生,无需单独维护平均分列表。
  4. 格式化输出:用join()方法把成绩列表转为字符串,按照期望格式输出,彻底去掉集合的大括号。
  5. 快速找最高平均分:用max()结合lambda表达式,直接根据平均分筛选出成绩最好的学生,逻辑更简洁。

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 00:12:06