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

У меня есть куча операторов if ... elif, повторяющихся в цикле for. Я получаю сообщение об «ожидаемом блоке с отступом» в середине elif. Я не могу понять, почему.

Я выполняю свой код в Python 3.7.2 IDLE в Windows. Я просмотрел другие темы, но ни одна из них не помогла мне найти проблему.

rows = [[],[],[],[],[],[],[],[],[]] # rows is a list of 9 lists of nine integers each between 0 and 9 (inclusive)
squares = [] # Where square_interpreter() .append()'s the lists of integers

def square_interpreter(): # Determines the 9 values in each 3 by 3 square in a Sudoku puzzle
    for x in range(9):
        output = []
        if x in [0,1,2]:
            for n in range(3):
                if x == 0:
                    for i in range(3):
                        output.append(rows[n][i])
                elif x == 1:
                    for i in range(3,6):
                        output.append(rows[n][i])
                elif x == 2:
                    for i in range(6,9):
                        output.append(rows[n][i])
        elif x in [3,4,5]:
            for n in range(3,6):
                if x == 3:
                    for i in range(3):
                        output.append(rows[n][i])
                elif x == 4:
                    for i in range(3,6):
                        output.append(rows[n][i])
                elif x == 5:
                    for i in range(6,9):
                        output.append(rows[n][i])
        else:
            for n in range(6,9):
                if x == 6:
                    for i in range(3):
                        output.append(rows[n][i])
                elif x == 7:
                    for i in range(3,6):
                        output.append(rows[n][i])
                elif x == 8:
                    for i in range(6,9):
                        output.append(rows[n][i])
        squares.append(output)

Ошибка появляется в строке 12. Сообщение выделяет пробел между elif и x == 1:

Вывод по делу: Я нашел совершенно другой способ сделать то же самое, чтобы он не дал мне ошибку:

def square_interpreter():
    keys_in_square = [[l + n for l in 'ABC' for n in '123'],
                      [l + n for l in 'ABC' for n in '456'],
                      [l + n for l in 'ABC' for n in '789'],
                      [l + n for l in 'DEF' for n in '123'],
                      [l + n for l in 'DEF' for n in '456'],
                      [l + n for l in 'DEF' for n in '789'],
                      [l + n for l in 'GHI' for n in '123'],
                      [l + n for l in 'GHI' for n in '456'],
                      [l + n for l in 'GHI' for n in '789']]
    for index in range(9):
        output = []
        for key in keys_in_square[index]:
            output.append(values[key])
        squares.append(output)

Я знаю, что это выглядит совсем по-другому и, вероятно, не имеет смысла без контекста, но делает то же самое Это на самом деле намного короче, чем старая версия. Спасибо за вашу помощь :)

Ответы [ 2 ]

0 голосов
/ 06 июня 2019
rows=[[1,2,3,4,5,6,7,8,9],[2,3,2,4,5,3,5,3,2],[2,3,2,4,5,8,9,2,1]]
output = []
for x in range(9):
    if x in [0,1,2]:
        for n in range(3):
            if x == 0:
                for i in range(3):
                    output.append(rows[n][i])
            elif x == 1:
                for i in range(3,6):
                    output.append(rows[n][i])
            elif x == 2:
                for i in range(6,9):
                    output.append(rows[n][i])
print(output)

Выше приведена исправленная версия ранее размещенного вами кода
Я использую массив фиктивных строк
выходной массив должен быть определен вне цикла for
Это не дает никакой ошибки.
Надеюсь, это поможет

0 голосов
/ 05 июня 2019
for x in range(9):
    output = []
    if x in [0,1,2]:
        for n in range(3):
            if x == 0:
                for i in range(3):
                    output.append(rows[n][i])
            elif x == 1:
                for i in range(3,6):
                    output.append(rows[n][i])
            elif x == 2:
                for i in range(6,9):
                    output.append(rows[n][i])

Похоже, ваши проблемы в строке 2. output = [] слишком много отступов от табуляции.

Редактировать: По-видимому, нет, но в любом случае сейчас это исправлено: D

...