Python: шар не определен - PullRequest
       13

Python: шар не определен

0 голосов
/ 12 февраля 2010

Я получаю эту ошибку:

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] = сфера ()). Не так ли?

#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 ]

3 голосов
/ 12 февраля 2010

Когда вы говорите ball[i][j], у вас уже должен быть какой-то объект ball, чтобы вы могли индексировать (дважды) в него. Попробуйте этот сегмент вместо:

ball = []    
for i in range(5):
    ball.append([])
    for y in range(5):
        ball[i].append(sphere())
3 голосов
/ 12 февраля 2010

Нет, 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)]

Последний синтаксис, использующий два понимания списка, более идиоматичен - более Pythonic, если хотите.

1 голос
/ 12 февраля 2010

В вашей программе ball - это просто имя, которое ни на что не ссылается. Использование индексации, например a[i], требует, чтобы a ссылался на объект, который уже поддерживает индексацию. Точно так же a[i][j] требует, чтобы a[i] ссылался на объект, поддерживающий индексацию.

Звучит так, будто вы хотите, чтобы он ссылался на список списков, но это не лучшее решение . Вы можете быть намного счастливее, выполняя свои операции над массивными массивами, которые абстрагируют весь цикл и могут действительно ускорить вычисления.

1 голос
/ 12 февраля 2010

нет ball не определено. эта строка: ball[i][j]=sphere() присваивает значение элементу объекта, на который ball указывает. Нет ничего, на что ball указывает, поэтому невозможно присвоить что-либо.

1 голос
/ 12 февраля 2010

Python не знает, что ball это список. Перед его использованием (в первом цикле for) вам необходимо инициализировать его как

ball = []

так что Python знает, как обращаться с ним как со списком.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...