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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:23:57