如何在for循环中正确存储变量到列表并找出学生最高平均分?
解决学生最高平均分查找问题
问题根源
你代码里的my_list = []写在了循环的else分支内部,导致每次处理有成绩的学生时,都会重新创建一个空列表,再把当前平均分加进去,自然每个平均分都单独在一个列表里,没法收集所有数据。
修复方案
把列表初始化移到循环外面,同时统一处理所有学生的平均分(包括无成绩的情况),最后用max()函数找出最大值:
students = [ {"name": "John", "surname": "Doe", "grades": [5, 5, 4, 4]}, {"name": "Jane", "surname": "Doe", "grades": [4, 3, 4, 3, 5]}, {"name": "Bill", "surname": "Gates", "grades": [5, 5, 5, 3]}, {"name": "Steve", "surname": "Jobs", "grades": [3, 5, 4, 3, 3, 5]}, {"name": "Guido", "surname": "Van Rossum", "grades": [5, 3, 5, 4, 5, 5, 3, 5]}, {"name": "Elon", "surname": "Musk", "grades": None} ] # 列表初始化移到循环外,仅创建一次 my_list = [] for student in students: if student['grades'] is None: avg = 0.0 print('this is zero') else: avg = round(sum(student['grades']) / len(student['grades']), 1) print(avg) # 将每个学生的平均分追加到同一个列表中 my_list.append(avg) # 查找最高平均分 highest_avg = max(my_list) print(f"最高平均分: {highest_avg}")
额外优化(可选)
如果需要同时知道是谁拿到了最高平均分,可以用字典存储学生与对应平均分的映射,再找出最大值对应的学生:
students = [ {"name": "John", "surname": "Doe", "grades": [5, 5, 4, 4]}, {"name": "Jane", "surname": "Doe", "grades": [4, 3, 4, 3, 5]}, {"name": "Bill", "surname": "Gates", "grades": [5, 5, 5, 3]}, {"name": "Steve", "surname": "Jobs", "grades": [3, 5, 4, 3, 3, 5]}, {"name": "Guido", "surname": "Van Rossum", "grades": [5, 3, 5, 4, 5, 5, 3, 5]}, {"name": "Elon", "surname": "Musk", "grades": None} ] student_avg = {} for student in students: full_name = f"{student['name']} {student['surname']}" if student['grades'] is None: avg = 0.0 print(f"{full_name}: this is zero") else: avg = round(sum(student['grades']) / len(student['grades']), 1) print(f"{full_name}: {avg}") student_avg[full_name] = avg # 找出最高平均分对应的学生 highest_entry = max(student_avg.items(), key=lambda x: x[1]) print(f"最高平均分获得者: {highest_entry[0]}, 分数: {highest_entry[1]}")
内容的提问来源于stack exchange,提问作者feizerti
相关产品推荐
相关产品推荐

