我对 Python 全局变量有疑问。这是错误还是错误?

I have a problem with Python global variables. Is this a bug or an error?

请注意,我不是经验丰富的程序员。这是我用全局变量编写的第二个程序。第一个甚至不是真正的语言

所以我正在 python、运行 Replit.com 制作游戏。每次最后一段代码运行时,我都会出错。

UnboundLocalError: 赋值前引用了局部变量 'playerExtraSoldiers'。

这是游戏的link,进入文件>main.py是代码

playerExtraSoldiers 是有问题的变量,我尝试重命名它,确保每次出现都拼写正确,等等。 它将此变量用作嵌套函数的一部分。定义变量并标有“global”的函数既在它之上又在它之前运行。

引用变量的代码。 (第 175-182 行)

def playerGainSoldiers():
    playerExtraSoldiers+=100*len(playerCountries)
    if(ownsNorth==1):
        playerExtraSoldiers+=250
    if(ownsCentral==1):
        playerExtraSoldiers+=600
    if(ownsSouth==1):
        playerExtraSoldiers+=350

这是一个非常长的函数的一部分,我在其中定义了很多变量。 (第 92-96 行)

#Extra soldiers
global playerExtraSoldiers
playerExtraSoldiers=100
global opponentExtraSoldiers
opponentExtraSoldiers=100

我尝试了以下方法来修复它,但没有成功: -remaning 变量,完全删除并重写它出现的每一行。 - 移动定义的部分 -通过将其移至 def playerGainSoldiers:,这在某一时刻起作用,但它不能 继续重置为 100 因为那会毁了我的游戏 - 没有嵌套函数

如果由于某种原因第 93 行看起来像这样最新版本尚未加载,那是我测试解决方案的一部分,修复它不会改变任何东西

    #global playerExtraSoldiers

您应该在方法中使用 global 关键字,以引用在外部作用域中定义的对象。

您的代码应如下所示:

def playerGainSoldiers():
    global playerExtraSoldier
    playerExtraSoldiers+=100*len(playerCountries)
    if(ownsNorth==1):
        playerExtraSoldiers+=250
    if(ownsCentral==1):
        playerExtraSoldiers+=600
    if(ownsSouth==1):
        playerExtraSoldiers+=350