Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.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_Python 3.x_Recursion_Sudoku - Fatal编程技术网

Python 数独解算器函数未正确返回

Python 数独解算器函数未正确返回,python,python-3.x,recursion,sudoku,Python,Python 3.x,Recursion,Sudoku,我正在研究一个Leetcode问题,其中一个数独解算器在一个字符串列表上运行,返回一个相同格式的已解棋盘。我遇到了一个问题,如果我添加一个print语句,函数将打印已解决的电路板,但当我尝试在同一点返回电路板时,它将不返回任何结果 def row_legal(董事会、i、j、k): 行=板[i] 如果行计数(str(k))>0: 返回错误 返回真值 def箱_法律(董事会、i、j、k): 行数=i//3 col_num=j//3 框=[board[3*行数+p][3*列数+q]表示范围(3)中的

我正在研究一个Leetcode问题,其中一个数独解算器在一个字符串列表上运行,返回一个相同格式的已解棋盘。我遇到了一个问题,如果我添加一个print语句,函数将打印已解决的电路板,但当我尝试在同一点返回电路板时,它将不返回任何结果

def row_legal(董事会、i、j、k):
行=板[i]
如果行计数(str(k))>0:
返回错误
返回真值
def箱_法律(董事会、i、j、k):
行数=i//3
col_num=j//3
框=[board[3*行数+p][3*列数+q]表示范围(3)中的p,表示范围(3)中的q]
如果盒计数(str(k))>0:
返回错误
返回真值
def col_法律(董事会、i、j、k):
col=[board[l][j]表示范围(9)内的l]
如果列计数(str(k))>0:
返回错误
返回真值
def可用(板、i、j、n):
返回col_legal(board,i,j,n)和box_legal(board,i,j,n)以及row_legal(board,i,j,n)
def解算器(电路板):
对于范围(9)内的i:
对于范围(9)内的j:
如果板[i][j]='.:#递归和回溯部分#
对于范围(1,10)内的k:
如果可用(电路板、i、j、k):
板[i][j]=str(k)
解算器(板)
董事会[i][j]='。'
返回
返回板
如果将
解算器
的最后一行替换为
打印(电路板)
,则打印解决方案。但是,返回输出
None
,或者如果上面的返回返回
board
,则返回初始board状态

如果您有任何关于为什么会发生这种情况的帮助或想法,我们将不胜感激

电路板输入示例:

决议: 函数
solver
在找到解决方案时不会放弃解决方案(即,它继续在每个单元格中尝试不同的值等),下面列出了一个简单的解决方案:

def solver(board):
    for i in range(9):
        for j in range(9):
            if board[i][j]=='.':#recursion & backtracking section#
                for k in range(1,10):
                    if is_available(board,i,j,k):
                        board[i][j]=str(k)
                        if solver(board):
                            return board   
                        board[i][j]='.'
                return
    return board
决议: 函数
solver
在找到解决方案时不会放弃解决方案(即,它继续在每个单元格中尝试不同的值等),下面列出了一个简单的解决方案:

def solver(board):
    for i in range(9):
        for j in range(9):
            if board[i][j]=='.':#recursion & backtracking section#
                for k in range(1,10):
                    if is_available(board,i,j,k):
                        board[i][j]=str(k)
                        if solver(board):
                            return board   
                        board[i][j]='.'
                return
    return board

“为什么它不能返回一个?”-什么让你认为它不能?请阅读。你从哪里打电话来?我认为问题不在于这段代码,而在于最初调用solver的代码。代码应该返回,但是你将解决方案返回到哪里?代码不会返回一个电路板句号,目前我在jupyter笔记本上运行它的一行代码是:``解算器(电路板)``如果你返回一个值,你需要打印(解算器(电路板)),如果函数返回任何内容,jupyter笔记本将打印返回的对象,“为什么它不能返回一个呢?“-什么让你认为它不能?请阅读。你从哪里打电话来?我认为问题不在于这段代码,而在于最初调用solver的代码。代码应该返回,但是你将解决方案返回到哪里?代码不会返回一个电路板句号,目前我在jupyter笔记本上运行它的一行代码是:``解算器(电路板)``如果你返回一个值,你需要打印(解算器(电路板)),如果函数返回任何内容,jupyter笔记本将打印返回的对象,