Python переменная метода не обновляется - PullRequest
0 голосов
/ 18 апреля 2020

Хорошо, я боролся с этим часами и не могу найти объяснения. У меня есть метод:

def solvecheck(self, *args):
        for x in range(9):
            for y in range(9):
                if self.grid[y][x] == 0:
                    for n in range(1,10):
                        if self.possible(y,x,n):
                            self.grid[y][x] = n
                            self.solvecheck()
                            self.grid[y][x] = 0
                    return
        grid = self.grid
        print(grid)
        self.check(grid)

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

def check(self, grid):

        self.update_grid()

        print(grid)
        print(self.grid)

        if self.grid == grid:
            error = False
        else: error = True
        print(error)

        self.load_grid()

Это должно работать правильно? Неправильно. Я получаю вывод:

[[8, 7, 3, 4, 1, 5, 9, 6, 2], [1, 6, 5, 9, 2, 8, 3, 7, 4], [9, 2, 4, 7, 6, 3, 1, 8, 5], [4, 8, 9, 6, 7, 2, 5, 3, 1], [7, 5, 2, 8, 3, 1, 6, 4, 9], [3, 1, 6, 5, 4, 9, 8, 2, 7], [6, 9, 1, 2, 8, 4, 7, 5, 3], [2, 3, 8, 1, 5, 7, 4, 9, 6], [5, 4, 7, 3, 9, 6, 2, 1, 8]]
[[8, 7, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 9, 0, 0, 0, 0, 4], [0, 2, 0, 7, 0, 0, 1, 0, 5], [0, 0, 9, 6, 0, 0, 0, 3, 0], [0, 0, 0, 0, 0, 0, 0, 0, 9], [0, 0, 6, 5, 4, 0, 0, 0, 0], [6, 9, 0, 0, 0, 0, 7, 0, 0], [2, 0, 0, 0, 0, 7, 4, 0, 0], [0, 0, 0, 3, 0, 0, 0, 1, 0]]
[[8, 7, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 9, 0, 0, 0, 0, 4], [0, 2, 0, 7, 0, 0, 1, 0, 5], [0, 0, 9, 6, 0, 0, 0, 3, 0], [0, 0, 0, 0, 0, 0, 0, 0, 9], [0, 0, 6, 5, 4, 0, 0, 0, 0], [6, 9, 0, 0, 0, 0, 7, 0, 0], [2, 0, 0, 0, 0, 7, 4, 0, 0], [0, 0, 0, 3, 0, 0, 0, 1, 0]]
False

Первая строка - решенная сетка. Вторая строка должна снова быть той же самой строкой, верно? Я не понимаю, почему это не так. Я перепробовал все. Он отображает ту же сетку, как описано в методе innit. Почему это происходит?

1 Ответ

0 голосов
/ 18 апреля 2020

Этот код ничего не решает. Здесь нет алгоритма. Вы должны попытаться использовать рекурсивный метод и организовать весь код в классе. Функция должна начать анализировать вертикальные, горизонтальные и ячейки сечения сверху слева и продолжать работу, пока не достигнет нижнего правого края. Это должно сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...