Почему я получаю сообщение об ошибке индекса вне диапазона, даже если оно находится в диапазоне? - PullRequest
0 голосов
/ 24 мая 2019

Я хочу нарисовать 20 прямоугольников (для моей игры в кирпичную дробилку), и у меня их есть в списке.Но когда я запускаю его, он дает мне ошибку индекса.

def setup():
    numRects = 20

    rectInfo = [rX, rY, rW, rH] 
    allRectInfo = [rectInfo[:] for i in range(numRects)]
    allRectInfo[0] = [45, 20, 110, 30]
    allRectInfo[1] = [45, 60, 110, 30]
    allRectInfo[2] = [45, 100, 110, 30]
    allRectInfo[3] = [45, 140, 110, 30]
    allRectInfo[4] = [195, 20, 110, 30]
    allRectInfo[5] = [195, 60, 110, 30]
    allRectInfo[6] = [195, 100, 110, 30]
    allRectInfo[7] = [195, 140, 110, 30]
    allRectInfo[8] = [345, 20, 110, 30]
    allRectInfo[9] = [345, 100, 110, 30]
    allRectInfo[10] = [345, 60, 110, 30]
    allRectInfo[11] = [345, 140, 110, 30]
    allRectInfo[12] = [495, 140, 110, 30]
    allRectInfo[13] = [495, 100, 110, 30]
    allRectInfo[14] = [495, 60, 110, 30]
    allRectInfo[15] = [495, 20, 110, 30]
    allRectInfo[16] = [645, 20, 110, 30]
    allRectInfo[17] = [645, 60, 110, 30]
    allRectInfo[18] = [645, 100, 110, 30]
    allRectInfo[19] = [645, 140, 110, 30]


def draw():

    for i in range (numRects):
        rect (allRectInfo[i][0], allRectInfo[i][1], allRectInfo[i][2], allRectInfo[i][3], allRectInfo[i][4], allRectInfo[i][5], allRectInfo[i][6], allRectInfo[i][7], allRectInfo[i][8], allRectInfo[i][9], allRectInfo[i][10], allRectInfo[i][11], allRectInfo[i][12], allRectInfo[i][13], allRectInfo[i][14], allRectInfo[i][15], allRectInfo[i][16], allRectInfo[i][17], allRectInfo[i][18], allRectInfo[i][19])

Я думаю, я установил диапазон на 20, и у меня есть 20 прямоугольников.Я все еще ОЧЕНЬ новичок в Python, поэтому я понятия не имею, что не так.Сообщение об ошибкеIndexError: Индекс вне диапазона: 4

(я использую обработку 3.5.3)

Ответы [ 3 ]

1 голос
/ 24 мая 2019

allRectInfo - это список из 20 подсписков, каждый из которых содержит 4 значения.

Так что самое большее вы можете получить доступ к allRectInfo[19][3].

Помимо здравого смысла:

По названию rect, скорее всего, это функция, которая принимает 4 параметра.

Вы вызываете его с 20 (!!!) параметрами, которые должны подать сигнал тревоги ...

1 голос
/ 24 мая 2019

Каждый элемент списка в allRectInfo содержит только 4 элемента В вашем цикле вы пытаетесь получить доступ к элементам после четвертого, которые не существуют.

Помимо этой проблемы, почему вы передаете 20 элементов? Я думаю, что вы хотите сделать, это передать значения функции прямоугольника таким образом

rect (allRectInfo[i][0], allRectInfo[i][1], allRectInfo[i][2], allRectInfo[i][3], allRectInfo[i][4]) 
0 голосов
/ 24 мая 2019

allRectInfo содержит 20 списков.Каждый из этих подсписков имеет длину всего 4, что означает, что индекс 3 является максимально доступным индексом.Вот почему вы получаете сообщение об ошибке с индексом 4.

Возможно, вы хотели использовать allRectInfo[0][i]

Это может быть то, что вы ищете:

for i in range(numRects):
    for x in range(20):
        rect(allRectInfo[x][i])
...