我一直在使用一个应该更改全局变量以保留计数器的函数的错误。这是一场比赛,在这种情况下,它将是'playerHealth'和'strength'。我该如何解决这个错误?
driver
错误:**名称'strength'是全局和本地的。
这是新代码。强度误差是固定的,但全局变量playerHealth没有改变,如果我将playerHealth声明为全局变量,它会再次给我错误。
strength = 1
playerHealth = 100
def orcCombat(playerHealth, playerDamage, strength):
orcHealth = 60
while orcHealth > 0:
if playerHealth > 10:
print "You swing your sword at the orc!, He loses", playerDamage, "health!"
playerHealth = playerHealth - 10
orcHealth = orcHealth - playerDamage
elif playerHealth == 10:
print "The Orc swings a deadly fist and kills you!"
print "Game Over"
else:
print "The Orc has killed you"
print "Game Over"
sys.exit()
if orcHealth <= 0:
print "You killed the Orc!"
print "+1 Strength"
global strength
strength = strength + 1
return "press enter to continue"
如何更改功能以更改全局变量playerHealth? 感谢
答案 0 :(得分:2)
def orcCombat(playerHealth, playerDamage, strength):
您不需要将全局变量作为参数传递给函数。尝试:
def orcCombat(playerHealth, playerDamage):
答案 1 :(得分:2)
当你传递变量&#39;力量&#39;或者在这种情况下foo
到函数,该函数创建局部范围,其中foo
引用在函数test1
的上下文中传递的变量。
>>> foo = 1
>>> def test1(foo):
... foo = foo + 1
... return
...
>>> test1(foo)
>>> foo
1
正如您所看到的,&#39;全球&#39; foo没变。在第二个版本中,我们使用global
关键字。
>>> def test2():
... global foo
... foo = foo + 1
... return
...
>>> foo
1
>>> test2()
>>> foo
2
查看此question
另一种选择是将变量foo
传递给函数,当您从函数返回时,只返回变量foo
以及使用元组的任何其他变量。
答案 2 :(得分:1)
由于函数的strength
参数与全局变量strength
之间存在命名冲突,因此发生错误。重命名函数参数或完全删除它。