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