#python #list #for-loop #while-loop
#python #Список #for-цикл #цикл while
Вопрос:
Я пытаюсь написать некоторый код, который находит решение головоломки судоку. Если определенная решаемая ячейка конфликтует с ячейкой, которую код решает в данный момент, я хочу очистить эту решаемую ячейку и поместить ее в конец списка, который я повторяю, затем повторите попытку с текущей ячейкой. Другими словами, я хочу устранить конфликт, отложить его решение и сначала решить текущий.
На данный момент это то, что я написал:
def solvepuzzle(grid, input_coordinates):
unsolved_cells = input_coordinates
solved_cells = []
while unsolved_cells:
for row in unsolved_cells:
solve(row)
if solve(row) is True:
print('Successful')
unsolved_cells.pop(row)
if solve(row) is False:
print('removing conflicting cell..')
conflicter = find_conflict(grid, row)
grid = reset_board(grid, conflicter)
unsolved_cells.append(conflicter)
unsolved_cells.insert(0, row)
if not unsolved_cells:
print('Operation successful.')
if unsolved_cells:
print('Operation unsuccessful.')
print('To be made: ', unsolved_cells)
return grid
Однако это работает не так, как ожидалось. Порядок входных координат / неразрешенных ячеек перепутан и пропускает шаг, поэтому вместо 1,2,3,4 он просто решает для 1,3. Кроме того, я, похоже, не могу заставить insert работать. Идея заключается в том, что цикл for повторит попытку в случае сбоя после устранения конфликта, но опять же, порядок, похоже, становится рандомизированным.
Как я могу улучшить свой код?
Комментарии:
1. Вы используете
solve
и как логическую переменную, и как функцию.2. Да
solve
возвращает логическое значение. Я распечатаю плату позже.3. Вам нужно отредактировать код примерно так
if solve(row) == True: