Python 我的算法返回未解决的答案。我该如何解决这个问题?

Python 我的算法返回未解决的答案。我该如何解决这个问题?,python,artificial-intelligence,Python,Artificial Intelligence,我正在尝试创建一个数独解算器,它接受numpy数组并返回正确的答案。然而,目前,我尝试的任何numpy数组都返回一个未解决的答案 我认为问题在于: return solved = puzzle.copy() solver(puzzle) 然而,我不知道确切的原因。在上面的代码中,我试图存储解决方案。不过,很明显我做得不对,或者我试图在错误的地方做 我应该怎么做才能正确返回已解决的难题? 完整代码段如下: def solver(puzzle): empty_cell = find_emp

我正在尝试创建一个数独解算器,它接受numpy数组并返回正确的答案。然而,目前,我尝试的任何numpy数组都返回一个未解决的答案

我认为问题在于:

return
solved = puzzle.copy()
solver(puzzle)
然而,我不知道确切的原因。在上面的代码中,我试图存储解决方案。不过,很明显我做得不对,或者我试图在错误的地方做

我应该怎么做才能正确返回已解决的难题?

完整代码段如下:

def solver(puzzle):
    empty_cell = find_empty(puzzle)
    if not empty_cell:
        return True

    else:
        for num in range(1, 10):
            if valid(puzzle, num, empty_cell):
                puzzle[empty_cell[0]][empty_cell[1]] = num 
                if solver(puzzle):
                    return
                    solved = puzzle.copy()
                    solver(puzzle)
                puzzle[empty_cell[0]][empty_cell[1]] = 0
        return False

正如Szala在评论中所说,在return语句之后有一段永远不会执行的代码。由于要正确返回拼图,请尝试以下操作:

def solver(puzzle):
    empty_cell = find_empty(puzzle)
    if not empty_cell:
        return puzzle.copy()

    else:
        for num in range(1, 10):
            if valid(puzzle, num, empty_cell):
                puzzle[empty_cell[0]][empty_cell[1]] = num 
                returned_value = solver(puzzle)
                if not returned_value is False:
                    return returned_value
                puzzle[empty_cell[0]][empty_cell[1]] = 0
        return False

代码中有一些不好的缩进。你能不能把它修好,这样就可以清楚地看到压痕在哪里,不在哪里?例如,我打赌行
empty\u cell=find\u empty(puzzle)
会向右缩进。Python中的缩进很重要,可能会导致错误。您能否检查代码,以便所有空格/制表符都位于正确的位置?在当前形式中,我认为
return
solved=puzzle.copy()之前的
return
不在函数中,即使它在函数中,在
return
语句之后的所有内容现在也不会被调用以修复缩进。这似乎是一个复制粘贴问题。非常感谢您的审阅。据我所知,添加return puzzle.copy()将创建该谜题的深度副本。这就是“完成的”数独游戏被归还的地方吗?添加返回值是有意义的,但是,我现在遇到了两个错误:ValueError:Traceback(最近一次调用last)和ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all()@SoyLatte我之所以这么写是因为你这么做了,事实上我认为只返回同一个对象就可以了,因为你在返回之前已经对它进行了更改,并且在返回之前没有还原它。哦,我的糟糕!Numpy数组没有真值,我会编辑一秒钟。非常感谢,现在可以工作了,我现在更熟悉真值错误的含义。非常感谢你的帮助。