Python: индекс списка вне диапазона, но только иногда

Я изменяю некоторый код, который решает головоломку судоку. Я добавляю в кусок, который будет случайным образом заполнять некоторые пустые клетки случайными значениями (1-9). Он проверяет, является ли это значение допустимым (не используется в текущей строке, столбце или квадрате 3x3), и, если оно есть, заменяет пустое значение на него.

Проблема в том, что я иногда получаю "IndexError: list index вне диапазона", пока он проверяет, присутствует ли значение в текущем квадрате 3x3. Я напечатал значение и текущую ячейку и обнаружил, что проблема возникает только тогда, когда столбец является последним или вторым по последнему (столбец 7 или 8). Ниже приведен соответствующий код:

Здесь я генерирую 10 случайных значений для случайных ячеек. Затем я использую isValid, чтобы увидеть, используются ли они в текущей строке, столбце или квадрате 3x3.

    for c in range(10):
    e = random.randint(1,9)
    print(e)
    i = random.randint(0,8)
    j = random.randint(0,8)
    print([i],[j])
    if initial_grid[i][j] == 0:
        if isValid(initial_grid,i,j,e):
            initial_grid[i][j] = e

Вот функция isValid. Ошибка в последнем операторе if (if initial_grid[x][y] == e:), где указано, что индекс списка находится вне диапазона.

def isValid(initial_grid, i, j, e):
rowOk = all([e != initial_grid[i][x] for x in range(9)])
if rowOk:
    columnOk = all([e != initial_grid[x][j] for x in range(9)])
    if columnOk:
        secTopX, secTopY = int(3 *(i/3)), int(3 *(j/3))
        for x in range(secTopX, secTopX+3):
            for y in range(secTopY, secTopY+3):
                if initial_grid[x][y] == e:
                    return False
            return True
return False

Код работает нормально до тех пор, пока одно из случайных значений не появится в 7-м или 8-м столбце. Ошибка устраняется, если заменить secTopY+3 на secTopY+1, но тогда она не будет правильно проверять квадрат 3x3.

Я не вижу, где индекс списка находится вне диапазона. Любая помощь приветствуется.

0 ответов

Другие вопросы по тегам