Python - UnboundLocalError: local variable 'health' referenced before assignment
Python - UnboundLocalError: local variable 'health' referenced before assignment
尽管从不同的模块导入变量 'health',但下面的函数提供了标题中显示的错误。 'Health' 也是全球化的,我已经删除了变量的全球化和导入,但我仍然收到同样的错误。
下面是导致问题的函数。
def combat():
enemy_health = (random.choice(random_enemy_Health))
enemy_attack = (random.choice(random_enemy_Attack))
print("\nYou are fighting a" ,random.choice(enemies), "with an attack amount of" ,enemy_attack, "and a health amount of" ,enemy_health,".")
while health > 0 and enemy_health > 0:
if turn == 1:
while loop == False:
response=input()
try:
move = response("Do you want to attack or flee? Type '1' to attack and '2' to flee.")
move = int(move)
if move == 1:
enemy_health = enemy_health - attack
print("You attacked!")
loop = True
elif move == 2:
hub_travel()
print("You fled the battle, come back once you are stronger!")
loop = True
else:
print("Invalid number, try again")
continue
except:
print("Invalid number, try again")
continue
turn = 2
if turn == 2:
AImove = randint(1,2)
if AImove == 1:
print ("Enemy attacked!")
health = health - enemy_attack
turn = 1
continue
print ("game over!")
if enemy_health == 0:
print("The enemy has been defeated!")
gold += random.choice(gold_dropped)
错误特别出现在这一行:
while health > 0 and enemy_health > 0:
如果我是你,我会使用参数而不是依赖全局变量。此建议可能会帮助您跟踪一些错误。
在只有几行代码的程序中可以使用全局变量。但是,当你的应用程序增长时,跟踪某个变量的当前值有点困难,因为它可以在多个函数或方法中使用(可能,你需要一个心理映射来找出当前值)。所以,这就是为什么你必须更喜欢使用局部变量或参数而不是全局变量的原因之一。
此更改将使您的函数按您希望的方式工作:
def combat(health):
...
当然,你得找到调用函数的地方,然后传入health
的值。我不知道当时的代码是否可以访问该信息。
这可能是解决此问题的最简单的修复方法。它当然不是最好的修复方法,但这不是架构教程的好地方。
尽管从不同的模块导入变量 'health',但下面的函数提供了标题中显示的错误。 'Health' 也是全球化的,我已经删除了变量的全球化和导入,但我仍然收到同样的错误。
下面是导致问题的函数。
def combat():
enemy_health = (random.choice(random_enemy_Health))
enemy_attack = (random.choice(random_enemy_Attack))
print("\nYou are fighting a" ,random.choice(enemies), "with an attack amount of" ,enemy_attack, "and a health amount of" ,enemy_health,".")
while health > 0 and enemy_health > 0:
if turn == 1:
while loop == False:
response=input()
try:
move = response("Do you want to attack or flee? Type '1' to attack and '2' to flee.")
move = int(move)
if move == 1:
enemy_health = enemy_health - attack
print("You attacked!")
loop = True
elif move == 2:
hub_travel()
print("You fled the battle, come back once you are stronger!")
loop = True
else:
print("Invalid number, try again")
continue
except:
print("Invalid number, try again")
continue
turn = 2
if turn == 2:
AImove = randint(1,2)
if AImove == 1:
print ("Enemy attacked!")
health = health - enemy_attack
turn = 1
continue
print ("game over!")
if enemy_health == 0:
print("The enemy has been defeated!")
gold += random.choice(gold_dropped)
错误特别出现在这一行:
while health > 0 and enemy_health > 0:
如果我是你,我会使用参数而不是依赖全局变量。此建议可能会帮助您跟踪一些错误。
在只有几行代码的程序中可以使用全局变量。但是,当你的应用程序增长时,跟踪某个变量的当前值有点困难,因为它可以在多个函数或方法中使用(可能,你需要一个心理映射来找出当前值)。所以,这就是为什么你必须更喜欢使用局部变量或参数而不是全局变量的原因之一。
此更改将使您的函数按您希望的方式工作:
def combat(health):
...
当然,你得找到调用函数的地方,然后传入health
的值。我不知道当时的代码是否可以访问该信息。
这可能是解决此问题的最简单的修复方法。它当然不是最好的修复方法,但这不是架构教程的好地方。