如何修复Python中‘local variable 'money' referenced before assignment’错误
问题原因
你遇到的local variable 'money' referenced before assignment错误,是因为在m()函数中执行money = 0时,Python会默认将money视为该函数的局部变量,但在此之前你已经通过if money == 10:引用了它,导致局部变量未赋值就被使用的冲突。虽然gm()里声明了global money,但m()函数没有声明,所以修改money时会触发错误。
修复方案
在m()函数开头添加global money, amount声明,让函数明确使用全局作用域的这两个变量,而非创建局部变量:
import time import math money = 0 amount = 1 print("Upgrades will occur at:") print("10 dollars") print("50 dollars") print("100 dollars") print("1000 dollars") print("10,000 dollars") print("1,000,000 dollars") print("") def gm(): global money money = money + amount print("You have " + str(money) + " dollars!") time.sleep(1) def m(): # 声明使用全局变量 global money, amount while True: gm() if money == 10: upg1 = input("Would you like to buy a multiplier? y for yes, n for no ") if upg1 == "y": amount = amount + 1 print("") print("ACHIEVEMENT!: Baby's first upgrade") print("") money = 0 time.sleep(2) else: print("You will have a chance to buy this again :)") m()
额外提示
- 后续如果扩展更多升级或游戏状态,建议用类封装(比如创建
GameState类,包含money、amount等属性),避免大量全局变量,让代码更易维护。 - 你代码里重复打印了两次"100 dollars",可按需调整。
内容的提问来源于stack exchange,提问作者OwenSucksAtCoding
相关产品推荐
相关产品推荐

