Python 递归数独解算器不解决任何问题

Python 递归数独解算器不解决任何问题,python,sudoku,Python,Sudoku,我正在做一个数独解算器,当我运行它时,它就是不起作用——函数f返回一个none类型。调试后,我发现代码没有解决一些方块问题。我不知道为什么会发生这种情况,但我怀疑在一个正方形中检查所有可能的数字的循环在找到一个可能的数字后停止,而没有检查其余的数字。你能指出我代码中的问题吗?谢谢 注意:对于数独中的空格,请输入0 # enter the Sudoku as a two-dimensional array (a[i][j]) def square_check(array, loc_x, loc_

我正在做一个数独解算器,当我运行它时,它就是不起作用——函数f返回一个none类型。调试后,我发现代码没有解决一些方块问题。我不知道为什么会发生这种情况,但我怀疑在一个正方形中检查所有可能的数字的循环在找到一个可能的数字后停止,而没有检查其余的数字。你能指出我代码中的问题吗?谢谢

注意:对于数独中的空格,请输入0

# enter the Sudoku as a two-dimensional array (a[i][j])

def square_check(array, loc_x, loc_y, val):
    added_x = loc_x - (loc_x % 3)
    added_y = loc_y - (loc_y % 3)
    for i in range(3):
        for j in range(3):
            if i+added_y != loc_y or j+added_x != loc_x:
                if array[i+added_y][j+added_x] == val:
                    return False
    return True


def line_check(array, loc_x, loc_y, val):
    for i in range(9):
        if i != loc_x:
            if array[loc_y][i] == val:
                return False
    return True


def col_check(array, loc_x, loc_y, val):
    for i in range(9):
        if i != loc_y:
            if array[i][loc_x] == val:
                return False
    return True


def f(array):
    flag = True
    mark = True
    for i in range(0, 9):
        for j in range(0, 9):
            if array[i][j] == 0:
                flag = False
    if flag:
        return array

    for i in range(0, 9):
        for j in range(0, 9):
            if array[i][j] == 0:
                for num in range(1, 10):
                    if square_check(array, j, i, num):
                        if col_check(array, j, i, num):
                            if line_check(array, j, i, num):
                                new_array = array.copy()
                                new_array[i][j] = num
                                mark = False
                                f(new_array)
                if mark:
                    break


def to_str(array):
    for i in range(len(array)):
        print(array[i])
    print("")


to_str(f(sudoku))

这可能会让你感兴趣:谢谢,给了我一些关于如何改进的想法。你忽略了ffix的返回值,现在进入无限循环问题就解决了。解算器现在可以工作了