Помогите найти баг в олимпиадной задаче с матрицей
Решаю олимпиадную задачу "Вывести на экран двумерную матрицу элементы которой заполняются по спирали". Код написал, но он работает только если размер матрицы четный. Если нечетный то матрица даже не выводится на экран, и я не могу понять в чем проблема. Помогите отыскать баг, есть подозрение что при нечетном размере цикл while уходит в бесконечность.
x=input('Введите размер матрицы=')
x, y=int(x), int(x)
matrix=[]
"""Создание нулевой матрицы"""
for o in range(x):
matrix.append([0]*y)
"""Заполнение матрицы по спирали"""
l=0 # элементы которыми заполняется матрица
s=0 # стартовая позиция в массиве
f=x-1 # финишная позиция в массиве
while l!=x**2: # заполняется до тех пока значение элемента
# не равно максимальному количеству ячеек матрицы
for j in range(y)[s:f:1]:
l+=1
matrix[s][j]=l
for i in range(x)[s:f:1]:
l+=1
matrix[i][f]=l
for j in range(y)[f:s:-1]:
l+=1
matrix[f][j]=l
for i in range(x)[f:s:-1]:
l+=1
matrix[i][s]=l
s+=1 # обновление переменных для повторного прохода
f-=1 #
for im in range(x):
print(matrix[im])
Ответы (1 шт):
Да, при нечетном цикл уходит в бесконечность. В качестве помощи, учитывая, что если вы решаете олимпиадные задачи, то предполагается, что вас программирование интересует.
- Учитесь отлаживать программы "на бумажке". Отлично развивает понимание кода и мозг. Выписываете переменные, и "вручную" проходите код, меняя их.
- Альтернативно: учитесь использовать отладчик (PyCharm, например). Это легко - очень. Идите в нем по шагам, все переменные сами увидите.
В вашем случае: вы увидите, что у вас прекращают выполняться ваши циклы for - в них просто ни разу на втором проходе при х=3, например, не выполнится условие. Будут всякие экзотические срезы типа[5:-3:1]. Проверяйте логику установки f и sдля начала. С х=1 ещё проще всё видно - посмотрите "на бумажке" с ним.