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

为何无法访问元组元素?Python成绩计算函数仅返回首个结果

问题定位与代码调整

核心错误点

  • 字典初始化位置错误:grade_dict = dict()被写在for循环内部,每遍历一个学生就会创建一个全新的空字典,之前存储的内容会被直接清空。
  • 返回语句位置错误:return grade_dict同样处于循环内部,第一次循环处理完第一个学生后就会直接触发函数返回,完全不会遍历列表中后续的学生元组。
  • 缺少模块导入:代码调用math.floor()但没有提前导入math模块,运行时会触发名称未定义的报错。

修正后的完整代码

import math

def getGrades(tuples):
    # 字典初始化移到循环外,全流程仅创建一次
    grade_dict = dict()
    for tup in tuples:
        (name, midterm1, midterm2, midterm3, final) = tup

        # 计算期中平均成绩
        average_midterm = (midterm1 + midterm2 + midterm3) / 3.0

        # 保留原有的期中成绩替换逻辑
        if average_midterm > midterm1:
            midterm1 = average_midterm
        if average_midterm > midterm2:
            midterm2 = average_midterm
        if average_midterm > midterm3:
            midterm3 = average_midterm

        # 按权重计算最终成绩
        midterm1_weight = midterm1 * 0.20
        midterm2_weight = midterm2 * 0.20
        midterm3_weight = midterm3 * 0.20
        final_weight = final * 0.40

        grade = midterm1_weight + midterm2_weight + midterm3_weight + final_weight
        grade = math.floor(grade)

        # 向已初始化的字典追加当前学生的键值对
        grade_dict[name] = grade
    # 返回语句移到循环结束后,等所有学生处理完成再统一返回结果
    return grade_dict

验证方式

用题目给出的示例输入测试:

tuple1 = [("Tim Roe", 56, 81, 98, 93), ("Joe Adams", 90, 100, 89, 78), ("Sally Lee", 77, 88, 67, 90)]
print(getGrades(tuple1))

运行后可正常输出包含所有学生姓名与对应最终成绩的字典,不再仅返回第一个学生的计算结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 10:27:03