'variable'是本地和全局Python

时间:2015-12-01 14:00:17

标签: python

我一直在使用一个应该更改全局变量以保留计数器的函数的错误。这是一场比赛,在这种情况下,它将是'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? 感谢

3 个答案:

答案 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之间存在命名冲突,因此发生错误。重命名函数参数或完全删除它。