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

Python遍历成绩字典计算平均值输出等级报错如何解决

问题排查

错误根源

  • 函数设计逻辑错误:原Average函数接收整个成绩字典作为入参,内部未传入当前计算的学生姓名,错误依赖外部循环的全局变量sName,同时函数内部重复遍历整个字典的键值对,拿到的value是['学科', [成绩列表]]的复合列表结构,直接传入float()转换触发第一个类型错误。
  • 计算对象混淆:需求是计算单个学生的多科成绩平均值,原代码逻辑试图计算所有学生的总平均,取值逻辑完全错位,导致函数返回值不是合法数值,和整数90比较时触发第二个类型错误。
  • 等级判断逻辑不全:仅实现了A级的判断分支,未覆盖其余分数区间。

修复后完整代码

graDict = {'John': ['Math', [90, 75, 77]], 'Adam': ['Math', [70, 75, 87, 77]]}

# 入参为单个学生的成绩列表,直接计算平均值
def Average(score_list):
    total = 0
    for score in score_list:
        total += float(score)
    return total / len(score_list)

# 遍历所有学生计算等级
for sName in graDict.keys():
    # 取出当前学生的成绩列表
    current_scores = graDict[sName][1]
    avg_score = Average(current_scores)
    # 按分数区间匹配等级,可按需调整阈值
    if avg_score >= 90:
        grade = 'A'
    elif avg_score >= 80:
        grade = 'B'
    elif avg_score >= 70:
        grade = 'C'
    elif avg_score >= 60:
        grade = 'D'
    else:
        grade = 'F'
    print("{} earns grade = {:.2f},对应等级{}".format(sName, avg_score, grade))

运行输出

John earns grade = 80.67,对应等级B
Adam earns grade = 77.25,对应等级C

内容的提问来源于stack exchange,提问作者Victória Greco

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:39:04