Python 赋值错误前引用的局部变量
我正在用python开发一个基于文本的游戏。我遇到了一个小问题。我的一个类方法告诉程序当敌人攻击时该做什么。这是密码Python 赋值错误前引用的局部变量,python,global-variables,Python,Global Variables,我正在用python开发一个基于文本的游戏。我遇到了一个小问题。我的一个类方法告诉程序当敌人攻击时该做什么。这是密码 def attack(self, method): user_health_old = user_health self.method = method probs = random.randrange(1,100) if method == "Knife": while user_health > 0:
def attack(self, method):
user_health_old = user_health
self.method = method
probs = random.randrange(1,100)
if method == "Knife":
while user_health > 0:
if probs in range(1,70):
attackWin = True
break
else:
attackWin = False
pla = player()
pla.healthRem(7)
if user_health < 1:
death()
elif method == "Hands":
while plaHealth > 0:
if probs in range(1,40):
attackWin = True
break
else:
attackWin = False
pla.healthRem(7)
if user_health < 1:
death()
pla = player()
pla.attackStatus()
当我运行程序时,问题就出现了。它打开控制台,但立即退出。它也不输出任何信息。我不太清楚发生了什么,如果有人能帮助我,我将非常感激。在您使用
pla.healthRem(7)
时,在第一个函数的else
块中,您正在引用pla
,然后才给它赋值。通过查看其他代码,您似乎希望将pla=player()
编辑:看到您的评论后,这肯定与您在函数attack()
中使用pla
有关。如果在函数中的任何位置都有对名称的赋值,则该名称在该函数中的任何位置都被视为局部变量。这意味着,如果函数体中有pla=player()
,则永远无法访问全局名称pla
。您可以通过以下方式之一修复此问题:
- 从函数中取出所有
pla=player()
行,这将允许对pla
进行任何查找以找到全局变量
- 将
global pla
放在函数的最顶端,global语句将导致对该名称的每个赋值修改变量的全局版本,而不是创建新的局部变量
- 停止尝试使用全局函数,当需要播放器实例时,只需在函数内部使用
play=player()
发布完整的回溯。您的变量user\u health
从未在您向我们展示的代码中初始化过,以及break
语句中没有循环的内容是什么?@我看到的所有break
语句都在while
循环中。呃,我真是太傻了;没关系。奇怪的是,我在程序的一开始就将pla=player()定义为一个全局变量。我想我也定义过几次,但都是相同的值。请看我的编辑,你不能在函数中指定一个变量名,而仍然使用相同名称的全局变量。谢谢你,我可以通过像你说的那样删除全局pla来修复它。
def attackStatus(self):
if attackWin == True:
print "You Win, this time"
time.sleep(2)
if user_health < user_health_old:
print "But you're victory did come at a cost"
time.sleep(2)
print "You're new health value is: ",user_health
time.sleep(3)
pla = player()
pla.attack("Knife")