Py学习  »  Python

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

Unnamed • 3 年前 • 1142 次点击  

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

所以我用python制作了一个游戏,运行在Replit上。通用域名格式。每次最后一段代码运行时,我都会收到一个错误。

UnboundLocalError:在赋值之前引用了局部变量“playerExtraSoldiers”。

这是游戏的链接,进入文件>主要的py是代码

playerExtraSoldiers是一个有问题的变量,我尝试过重命名它,确保每个事件都拼写正确,等等。 它将此变量用作嵌套函数的一部分。定义变量并标记为“全局”的函数位于其上方,并在其之前运行。

引用变量的代码。(第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

我尝试了以下方法来修复它,但没有成功: -重新存储变量,完全删除并重写它出现的每一行。 -将零件移动到定义的位置 -通过将其移动到def Playergain士兵中,这在某一点上起到了作用,但它不能 继续重置为100,因为这会毁了我的比赛 -没有嵌套函数

如果因为某种原因第93行看起来像这样,最新版本还没有加载,这是我测试解决方案的一部分,修复它不会改变任何事情

    #global playerExtraSoldiers
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/130115
 
1142 次点击  
文章 [ 1 ]  |  最新文章 3 年前
Benjamin Rio
Reply   •   1 楼
Benjamin Rio    3 年前

你应该使用 global 关键字,以引用在外部范围中定义的对象。

您的代码应该如下所示:

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