如何在Python程序中输出平均分以上学生的姓名?
如何关联学生姓名与成绩并输出高于平均分的学生?
看起来你已经完成了大部分工作,只是卡在了「成绩和姓名对应」这一步——其实核心问题是你没有把学生的姓名和成绩作为一个整体来存储,而是分开处理了,所以没法把分数和对应的学生关联起来。这里有几个简单易懂的解决方法:
方法1:用列表存储(姓名, 成绩)的元组
这种方式最直观,把每个学生的姓名和成绩打包成一个元组,作为整体存入列表,后续遍历的时候就能同时拿到两个信息,完全不用担心对应不上:
students = [] # 用循环代替重复写4次输入代码,更简洁也更易维护 for i in range(4): name = input(f"Student {i+1}: ") grade = int(input(f"Grade of {name}: ")) students.append( (name, grade) ) # 计算平均分:从每个元组里提取成绩求和 total_grade = sum(grade for name, grade in students) avg = total_grade / 4 # 筛选出成绩高于平均分的学生姓名 above_avg_students = [name for name, grade in students if grade > avg] # 输出最终结果 print(f"成绩平均分是{avg},{', '.join(above_avg_students)}的成绩高于平均分。")
方法2:同时维护姓名列表和成绩列表
如果你更习惯分开存储的思路,可以把姓名和成绩分别存入两个列表,只要保证两个列表的顺序完全一致(第一个姓名对应第一个成绩),就可以用zip()函数同步遍历它们:
name_list = [] grade_list = [] for i in range(4): name = input(f"Student {i+1}: ") grade = int(input(f"Grade of {name}: ")) name_list.append(name) grade_list.append(grade) # 计算平均分 avg = sum(grade_list) / 4 # 遍历并输出高于平均分的学生 print(f"成绩平均分是{avg}") print("成绩高于平均分的学生:") for name, grade in zip(name_list, grade_list): if grade > avg: print(name)
为什么你之前的排序尝试没效果?
你提到尝试排序但没用,原因是排序后成绩列表的顺序改变了,但姓名列表的顺序没有同步调整,导致两者的索引对应关系被破坏了。上面的两种方法都避开了这个问题:要么把信息绑定成整体,要么保证两个列表的顺序始终一致并同步遍历。
另外,用循环代替重复写4次输入代码的好处是,以后如果需要处理更多学生,只需要修改循环的次数(比如把range(4)改成range(5)),不用重复复制粘贴代码,扩展性更好。
内容的提问来源于stack exchange,提问作者user9872936
相关产品推荐
相关产品推荐

