Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python方法变量未更新_Python_Variables - Fatal编程技术网

Python方法变量未更新

Python方法变量未更新,python,variables,Python,Variables,好吧,我已经为此挣扎了好几个小时,我找不到一个解释。我有一个方法: 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

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

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

第一条线是已求解的网格。第二行应该是同一行,对吗?我不明白为什么不是。我什么都试过了。它显示相同的网格,如init方法中所述。为什么会发生这种情况?

此代码无法解决任何问题。这里没有算法。您应该尝试使用递归方法并将所有代码组织到一个类中。该函数应该从左上角开始分析垂直、水平和剖面单元格,并一直分析到右下角。这应该可以做到。

该代码模式让我想起了“KameHaMeHa”self.update\u grid是什么?似乎self.update\u grid()将已解网格更改为未解网格。@JonathanSánchez它通过将self.grid与GUI的输入相匹配来更新self.grid,如果我理解正确,您的think
grid=self.grid
将self.grid复制到grid。但事实并非如此,grid和self.grid都指向同一个网格。我以为这就是我要做的。它是递归的,不是吗?它不是递归的,因为它在经过一定次数的迭代后才开始。此外,您缺少一条非常重要的游戏规则,这也可能是您的函数无法工作的原因;您没有检查当前部分!对于每次迭代,您都应该检查同一部分中的所有垂直、水平单元格。您想让我为您编写函数吗?要更好地了解您在做什么,一个有用的资源是将您的代码与其他人的成功代码进行比较。也许能帮你。