完整代码在此处:http://pastebin.com/gG4JLNsX
这是minimal, complete, verifiable example:
import random
def newGame():
curveSetup()
printStatistics()
def curveSetup():
global curve
curve = random.randint(12,35)
global lvl
lvl = 1
def printStatistics():
global expMax
expMax = (lvl*curve)
global lvl
print "Character Level: "+str(lvl)
newGame()
每当我运行程序时,我都会收到错误
Warning (from warnings module):
File "D:\Code\PyRPG.py", line 64
global lvl
SyntaxWarning: name 'lvl' is used prior to global declaration
有谁知道如何修复它?我已经尝试了所有的东西,我已经查看了这里提出的类似问题,在声明变量本身是全局之前,它们都是Python 3或定义为“x”。我在定义“x”之前声明它是全局的,因此我没有看到它有什么问题。
编辑:我在开始时也定义了lvl = 1,但它根本没有改变任何东西。我在curveSetup()函数中定义了lvl,它在其他所有函数之前运行。
答案 0 :(得分:1)
您在lvl
中声明全局之前使用printStatistics()
,因此在全局声明之前使用“name'lvl'”。这只是一个警告,因为在函数中的任何位置都有global lvl
使lvl
全局。代码仍然有效。要消除警告,请在使用之前移动global
:
global lvl
expMax = (lvl*curve)
事实上,此功能根本不需要global lvl
。只有在修改全局变量时才需要它。此处的值仅用于计算而不更改lvl
本身。
请注意,您的程序可怕地滥用全局变量。如您所见,它使逻辑很难遵循。应该很少使用全局变量,理想情况下,对于不变更且不需要global
声明的常量。更喜欢班级保持国家。
答案 1 :(得分:0)
global lvl
表示您使用在函数外部定义的lvl
变量。因此,lvl
必须存在于函数之外。
但是,您永远不会定义lvl
。在调用任何引用它的函数之前,你必须写一些像lvl = 0
这样的地方。
请注意,lvl = lvl + 1
不 lvl
的定义。