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

Python代码提示已提前定义的变量Meds未定义报错原因咨询

问题原因

你遇到的报错本质是Python的变量作用域规则导致的:

  • 在函数内部定义、没有加特殊声明的变量默认是局部变量,仅在当前函数的执行周期内生效,函数执行结束后变量就会被销毁,其他函数无法直接访问。
  • 你在store()函数内部定义的Meds属于store()的局部变量,game()函数属于完全独立的作用域,自然无法识别这个变量。

不光是Meds,你在store()里定义的Blankets、Tires、Gun等变量,如果后续要在game()里调用,都会触发同类未定义报错。

可行的解决方法

方法1:使用全局变量(适合小型游戏快速修改)

  1. 在最开头的全局变量声明区,提前定义所有需要跨函数共享的变量,添加初始值:
#Vals
money = 700
Gun1 = 0
MilesLeft = 20
# 新增共享变量初始值
Meds = 0
Blankets = 0
Tires = 0
Gun = 0
  1. 在store()函数开头加global声明,告诉Python你接下来要修改的是全局变量,不是新建局部变量:
def store():
    global money, Meds, Blankets, Tires, Gun
    # 后面原有代码不变

方法2:用字典统一管理游戏状态(更规范,不易出bug)

把所有游戏相关的状态都存在同一个可变字典里,函数之间共享这个字典即可,不需要额外声明global:

# 开头统一管理状态
game_state = {
    "money": 700,
    "gun": 0,
    "miles_left": 20,
    "meds": 0,
    "blankets": 0,
    "tires": 0
}

# 后续所有函数里操作字典里的键即可,比如store里买Meds的部分:
many3 = int(input("Amount: "))
game_state["meds"] += many3

# game里判断的时候写:
if game_state["meds"] < 1:
    print("Oh no! You Died!")
其他需要修正的代码问题
  • game()函数里的value = randint(1, 1)永远只会返回1,永远触发不了value == 2的新冠事件分支,需要改成value = randint(1, 2)
  • store()函数中用户选择不买枪的分支里,money - j是无效表达式,没有赋值效果,你应该是想写money = j
  • 现在game()用递归调用自身的方式循环,运行次数多了会触发栈溢出报错,建议改成while循环实现游戏主逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:36:01