我对 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
请注意,我不是经验丰富的程序员。这是我用全局变量编写的第二个程序。第一个甚至不是真正的语言
所以我正在 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