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
相关产品推荐
相关产品推荐

