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

Python中使用return语句后average变量未定义触发NameError的问题

报错触发的根本原因

  • 局部变量作用域隔离机制:Python 函数内部定义的变量默认属于局部作用域,仅在函数代码块内部可访问,全局作用域无法直接读取。即使函数内写了return average,调用average_score()时也没有将返回值赋值给外部全局变量,后续全局位置执行print(average)时,自然无法找到这个变量,触发NameError。
  • 核心业务逻辑存在多处错误:即使解决了作用域问题,原有代码的判断、遍历逻辑也无法正常完成成绩计算:
    • 判断条件if query_name == _ in name不符合Python逻辑规则,且_、name是之前循环的临时遍历变量,循环结束后仅保留最后一次迭代的值,根本无法匹配待查询的学生姓名
    • 直接遍历student_marks字典时,获取到的是字典的键(学生姓名字符串),不是对应的成绩列表,后续嵌套循环取分数的逻辑从根源上失效
    • 全局位置的over = len(scores)取的是循环最后一次迭代遗留的临时成绩列表长度,不是待查询学生的成绩长度,会直接导致平均值计算错误

修正后可正常运行的代码

if __name__ == '__main__':
    n = int(input())
    student_marks = {}
    for _ in range(n):
        name, *line = input().split()
        scores = list(map(float, line))
        student_marks[name] = scores
    query_name = input()

# 直接通过字典键值匹配取出目标学生的成绩列表
target_marks = student_marks[query_name]
# 基于成绩列表本身计算平均值
average = sum(target_marks) / len(target_marks)
# 符合题目要求保留两位小数输出
print(f"{average:.2f}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 21:45:04