@WASADAR

Объясните мне пожалуйста, где я напортачил с индексами?

Я, продолжая изучать язык программирования под названием Python, натолкнулся на одну проблему. А именно, я не смог решить задачу на создание спирального списка, решение которой опубликовано по ссылке: https://habr.com/ru/post/210796/
Да, может быть, я зря создал тему, раз решение я нашёл сам, но я туда не смотрел так как хотел решить задачу самому и, может быть, моё решение отличается, от предоставленного там. Так, вот я написал код, который с теоретической точки зрения должен работать, но на практике он выдаёт ошибку "list assignment index out of range", хотя в теории с индексами всё должно быть верно. Так, что можете всё таки указать, мне на несоответствие в моём коде из-за чего и появляется эта ошибка.
i = int(input())
count, countgor, nup, ndown, nleft, nright, c_max, c = 1, 1, 1, 0, 1, 1, (i ** 2) + 1, 1
matrix = [0] * i
for z in range(i):
    matrix[z] = [0] * i
while True:
    if count == 1:
        countgor += 1
        for element in matrix[0]:
            element = c
            c += 1
    else:
        if count % 2 == 0:
            if count % 4 != 0:
                for q in range(1 + ndown, i - 1 - ndown, 1):
                    matrix[q][i-ndown] = c
                    c += 1
                ndown += 1
            if count % 4 == 0:
                for q in range(1 + nup, i + 1 - nup, 1):
                    matrix[-q][nup-(i+1)] = c
                    c += 1
                nup += 1
        if count % 2 == 1:
            if countgor % 2 == 0:
                for q in range(1 + nleft - 1, i + 1 - nleft, 1):
                    matrix[i-nleft][-(q+1)] = c
                    c += 1 
                nleft +=  1
                countgor += 1
            if countgor % 2 == 1:
                for q in range(0 + nright, i - nright, 1):
                    matrix[0+nright][q] = c
                    c += 1
                nright += 1
                countgor += 1
    count += 1
    if c >= c_max:
        break
print(matrix)
  • Вопрос задан
  • 146 просмотров
Решения вопроса 1
longclaps
@longclaps
matrix[q][i-ndown] = c # на первом же шаге i-ndown == i - 0 == i
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@BandFourse
if countgor % 2 == 1:
for q in range(0 + nright, i - nright, 1):
matrix[0+nright][q] = c
c += 1
nright += 1
countgor += 1
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы