Python:未定义 ball
我在运行这段代码时遇到了这个错误:
Traceback (most recent call last):
File "D:/Python26/PYTHON-PROGRAMME/049 bam", line 9, in <module>
ball[i][j]=sphere()
NameError: name 'ball' is not defined
但是球是有定义的(ball[i][j]=sphere())。不是吗?
#2D-wave
#VPython
from visual import *
#ball array #ready
for i in range(5):
for y in range(5):
ball[i][j]=sphere()
timer = 0
dt = 0.001
while(1):
timer += dt
for i in range(5):
for y in range(5):
#wave equation
x = sqrt(i**2 + j**2) # x = distance to the source
ball[i][j].pos.y = amplitude * sin (k * x + omega * timer)
if timer > 5:
break
5 个回答
1
在你的程序中,ball
只是一个名字,它并不指向任何东西。使用像 a[i]
这样的索引时,a
必须指向一个已经可以进行索引的对象。类似地,a[i][j]
需要 a[i]
指向一个也支持索引的对象。
听起来你想让它指向一个列表的列表,但 这并不是一个很好的解决方案。你可能会更喜欢在 numpy 数组上进行操作,因为它可以简化你的循环,并且能大大加快计算速度。
3
不,ball
还没有定义。在你开始给列表的索引赋值之前,你需要先创建一个 list()
。同样,嵌套列表也需要先创建好,才能给它们赋值。你可以试试这个:
ball = [None] * 5
for i in range(5):
ball[i] = [None] * 5
for j in range(5):
ball[i][j]=sphere()
或者这个:
ball = [[sphere() for y in range(5)] for x in range(5)]
后面的写法使用了两个列表推导式,更符合 Python 的风格,听起来更专业一些。
3
当你说 ball[i][j]
的时候,首先你得有一个叫 ball
的对象,这样才能进行两次索引操作。试试下面这段代码:
ball = []
for i in range(5):
ball.append([])
for y in range(5):
ball[i].append(sphere())