Python 分配错误前引用的局部变量
我对编码非常陌生,正在尝试制作一个我可以称之为自己的游戏。我不理解错误的含义,但以下是我的代码:Python 分配错误前引用的局部变量,python,pygame,Python,Pygame,我对编码非常陌生,正在尝试制作一个我可以称之为自己的游戏。我不理解错误的含义,但以下是我的代码: import pgzrun import math import random WIDTH = 800 #5 HEIGHT = 600 CENTER_X = WIDTH/2 CENTER_Y = HEIGHT/2 CENTER = (CENTER_X, CENTER_Y) FONT_COLOR = (221, 160, 221) #10 ozo
import pgzrun
import math
import random
WIDTH = 800 #5
HEIGHT = 600
CENTER_X = WIDTH/2
CENTER_Y = HEIGHT/2
CENTER = (CENTER_X, CENTER_Y)
FONT_COLOR = (221, 160, 221) #10
ozol = 0
game_over = False
ozolith = Actor("ozolith") #15
def draw():
screen.clear()
ozolith.draw()
draw_counters(ozol) #20
def place_ozolith():
ozolith.x = CENTER_X
ozolith.y = CENTER_Y
#25
def draw_counters(ozol):
screen.draw.text(str(ozol), fontsize=40, center=CENTER, color=FONT_COLOR)
def on_mouse_down(pos):
if ozolith.collidepoint(pos): #30
ozol += 1
place_ozolith
else:
quit()
#35
place_ozolith
pgzrun.go()
这是错误消息
Traceback (most recent call last):
File "C:\Program Files\Python38\python-games\GameCraft\GameCraft.py", line 38, in <module>
pgzrun.go()
File "C:\Program Files\Python38\lib\site-packages\pgzrun.py", line 31, in go
run_mod(mod)
File "C:\Program Files\Python38\lib\site-packages\pgzero\runner.py", line 113, in run_mod
PGZeroGame(mod).run()
File "C:\Program Files\Python38\lib\site-packages\pgzero\game.py", line 217, in run
self.mainloop()
File "C:\Program Files\Python38\lib\site-packages\pgzero\game.py", line 247, in mainloop
self.dispatch_event(event)
File "C:\Program Files\Python38\lib\site-packages\pgzero\game.py", line 172, in dispatch_event
handler(event)
File "C:\Program Files\Python38\lib\site-packages\pgzero\game.py", line 164, in new_handler
return handler(**prepped)
File "C:\Program Files\Python38\python-games\GameCraft\GameCraft.py", line 31, in on_mouse_down
ozol += 1
UnboundLocalError: local variable 'ozol' referenced before assignment
回溯(最近一次呼叫最后一次):
文件“C:\Program Files\Python38\python games\GameCraft\GameCraft.py”,第38行,在
pgzrun.go()
文件“C:\Program Files\Python38\lib\site packages\pgzrun.py”,第31行,在go中
运行模式(mod)
文件“C:\Program Files\Python38\lib\site packages\pgzero\runner.py”,第113行,在run\u mod中
PGZeroGame(mod.run)()
文件“C:\Program Files\Python38\lib\site packages\pgzero\game.py”,第217行,正在运行
self.mainloop()
文件“C:\Program Files\Python38\lib\site packages\pgzero\game.py”,第247行,在mainloop中
自调度事件(事件)
文件“C:\Program Files\Python38\lib\site packages\pgzero\game.py”,第172行,在dispatch\u事件中
处理程序(事件)
文件“C:\Program Files\Python38\lib\site packages\pgzero\game.py”,第164行,在新的\u处理程序中
返回处理程序(**已准备就绪)
文件“C:\Program Files\Python38\python games\GameCraft\GameCraft.py”,第31行,鼠标按下
臭氧+=1
UnboundLocalError:赋值前引用的局部变量“ozol”
当我点击粘贴在左上角的图像时就会发生这种情况。尝试通过
global ozol
ozol = 0
把全球臭氧层b4你定义臭氧层,看看是否有效
ozol += 1
相当于
ozol = ozol + 1
但是
ozol
没有初始值,因此出现错误。谢谢!这为我节省了很多时间:-)这对全局范围没有帮助,因为它已经是全局范围了。。。这会起作用。是的,谢谢,但是图像不像我想要的那样在中间。to@Swagtonio是的,这是另一个无关的错误。你实际上并不是在给place\u ozolith打电话,也就是说,你需要place\u ozolith()
非常感谢你,我还在犯新手错误的阶段。这将作为以后的课程。您可以在函数中添加global
。但最好避免可变的全球状态。相反,将信息作为参数传递到函数中,并将调用方所需的对象返回给调用方。有一个原因是赋值默认为local,这是为了阻止可变的全局状态。ozol
将默认为local,并且不会使用全局ozol
。实际上,在JS中,如果函数中没有变量声明,这将默认为globalPython当然没有声明,所以将赋值默认为local可能更为实用