Индексирование отрицательно в список (например, когда col
равно 0, поэтому col-1
= -1) переносится в конец списка, возвращая последний элемент в списке.
Индексирование послепоследний элемент списка вызывает исключение IndexError
- IndexError: list index out of range
. Когда это происходит, Python немедленно переходит к блоку except
, и после его завершения он не возвращается к тому месту, где он был, когда впервые возникло исключение.
Вам необходимо убедиться, что вы не 't отрицательно индексировать в ваш список matrix
или индекс после конца.
Вы можете использовать множество операторов if
вокруг каждой строки в блоке try
, или вы можете использовать for
цикл для проверки окружающих ячеек, например:
def popularNumeros(column, row, matrix):
for col in range(column):
for ro in range(row):
if matrix[col][ro] == 'X':
for offset_column in range(col-1, col+2):
if offset_column < 0 or offset_column >= column:
continue # Outside of the safe boundary - skip
for offset_row in range(ro-1, row+2):
if offset_row < 0 or offset_row >= row:
continue # Outside of the safe boundary - skip
matrix[offset_column][offset_row] = checker(matrix[offset_column][offset_row])
Кроме того, для чего бы вы ни стояли, у вас есть колонка и строка назад вперед. Я так и оставил.