Как поместить значение в конец повторяющегося списка в цикле for?

#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: