gpt4 book ai didi

python - 无限的本地错误 Python

转载 作者:行者123 更新时间:2023-12-02 11:00:52 24 4
gpt4 key购买 nike

我收到以下错误:

Traceback (most recent call last):
File "prpR.py", line 48, in <module>
main()
File "prpR.py", line 39, in main
d=drop()
UnboundLocalError: local variable 'drop' referenced.

这与 drop() 的范围有关,因为当我全部 main() 时, drop() 仅存在于该范围内。我曾尝试使用全局变量来填充 rain_drops 数组,但我似乎无法让这个错误消失。样式评论也将不胜感激。代码如下。
 from graphics import *
from random import randint
#(137,43,226)
#(229,230,250) -BG

#d=None
class drop:
dc = color_rgb(136,43,226)
win=GraphWin("Purple Rain-Prince", 498, 500, autoflush=False)
win.setBackground(color_rgb(228,230,250))
win.setCoords(0,0,1000,1000)
lwr=6 #length to width ratio length:width
def __init__(self):
x= randint(0,1000)
self.diff=randint(-1,10)
y=randint(0,1000)
p1= Point(x, y)
p2=Point(x+self.diff,y+drop.lwr*self.diff)
self.r=Rectangle(p-1, p2)
self.r.setFill( color_rgb(136,43,226))
self.r.draw(drop.win)
def reset(self):
x= randint(0,1000)
self.diff=randint(1,20)
y=998
p1= Point(x, y)
p0=Point(x+self.diff,y+drop.lwr*self.diff)
self.r.undraw()
self.r=Rectangle(p1, p2)
self.r.setFill( color_rgb(136,43,226))
self.r.draw(drop.win)
def fall(self):
self.r.move(0,-self.diff)
if self.r.getP0().getY()<5:
self.reset()

def main():
d=drop()
rain_drops=[drop() for i in range(38)]
while(drop.win.checkMouse()==None):
for drop in rain_drops:
drop.fall()
update(28)
drop.win.close()

main()

最佳答案

您遇到的问题是 drop稍后在您的函数中用作局部变量。这个for声明做了肮脏的工作:

for drop in rain_drops:

在循环的每一轮中,这将绑定(bind) drop作为一个局部变量到你循环的列表中的一个实例(隐藏类名 drop,它是一个全局变量)。当一个名称在函数中用作局部变量时,您无法在函数中的任何位置访问同名的全局变量(编译器假定您正在做一些乱序,例如 print(foo); foo="bar" 如果 foo以前不存在)。

解决此问题的最佳方法可能是将您的类(class)重命名为 Drop , 符合 Python style这表示大多数类应该有 CapWords样式名称。这样您就不会在 Drop 之间发生名称冲突(类(class))和 drop (您在循环时访问的实例)。

关于python - 无限的本地错误 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41309287/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com