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

如何修复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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:11:40