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

Python平均分计算器出现UnboundLocalError错误求助

解决Python平均分计算器的UnboundLocalError错误

错误原因

UnboundLocalError的核心问题是:你在函数内部对变量hoc_sinh_dang_nhap进行赋值操作时,Python会默认将其视为局部变量;但如果在赋值语句之前你已经引用了这个变量,就会触发“赋值前引用”的错误。通常是因为该变量实际是全局变量,但你没在函数内声明。

解决方案

针对这个问题,有两种常见修复方式:

1. 使用global声明全局变量

如果hoc_sinh_dang_nhap是全局变量(用来存储当前操作的学生),在需要修改它的函数开头添加global声明,明确告诉Python这是全局变量而非局部变量。

示例代码:

# 全局变量:存储当前登录的学生
hoc_sinh_dang_nhap = None

def dang_nhap_hoc_sinh():
    global hoc_sinh_dang_nhap  # 声明为全局变量
    ten = input("Nhập tên học sinh: ")
    hoc_sinh_dang_nhap = ten  # 此时修改的是全局变量
    print(f"Đã chọn học sinh: {hoc_sinh_dang_nhap}")

def tinh_diem_trung_binh():
    # 直接读取全局变量,无需声明(因为没有赋值操作)
    if not hoc_sinh_dang_nhap:
        print("Vui lòng chọn học sinh trước!")
        return
    # 计算平均分逻辑
    diem_toan = float(input("Điểm Toán: "))
    diem_van = float(input("Điểm Văn: "))
    trung_binh = (diem_toan + diem_van) / 2
    print(f"Điểm trung bình: {trung_binh:.2f}")

# 测试运行
dang_nhap_hoc_sinh()
tinh_diem_trung_binh()

2. 改用函数返回值传递变量

如果不想使用全局变量,可以让登录函数返回学生名称,再将其传入计算函数,彻底避免全局变量带来的作用域问题。

示例代码:

def dang_nhap_hoc_sinh():
    ten = input("Nhập tên học sinh: ")
    return ten

def tinh_diem_trung_binh(hoc_sinh):
    if not hoc_sinh:
        print("Vui lòng nhập tên học sinh hợp lệ!")
        return
    diem_toan = float(input("Điểm Toán: "))
    diem_van = float(input("Điểm Văn: "))
    trung_binh = (diem_toan + diem_van) / 2
    print(f"Điểm trung bình của {hoc_sinh} là: {trung_binh:.2f}")

# 测试运行
hs = dang_nhap_hoc_sinh()
tinh_diem_trung_binh(hs)

验证修复

运行修改后的代码,hoc_sinh_dang_nhap的作用域会被正确识别,不会再触发UnboundLocalError。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 23:55:27