Python方法变量未更新

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python方法变量未更新相关的知识,希望对你有一定的参考价值。

好,所以我已经为此苦苦挣扎了好几个小时,我找不到解释。我有一个方法:

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)

这是一个数独求解器。这种方法应该只解决网格。我知道这行得通。所以现在当我将求解的网格插入到check方法中:

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方法中所述,它显示相同的网格。为什么会这样?

答案

此代码无法解决任何问题。这里没有算法。您应该尝试使用递归方法并在一个类中组织所有代码。该功能应从左上角开始分析垂直,水平和截面像元,并继续进行直到到达右下角。这应该做到。

以上是关于Python方法变量未更新的主要内容,如果未能解决你的问题,请参考以下文章

Python,如果带有变量的语句错误说未定义

Python实现跨文件全局变量的方法

如何在 Python 的方法中访问“静态”类变量?

使用未定义的变量作为python中的字典键

4.python中常用的魔法方法(长期更新)

Python实现跨文件全局变量的方法(摘抄版)