Python 如何更改类方法中的列表元素

Python 如何更改类方法中的列表元素,python,sudoku,in-place,Python,Sudoku,In Place,这里我想解决给定的数独问题 class Solution: def solveSudoku(self, board: List[List[str]]) -> None: """ Do not return anything, modify board in-place instead. """ def is_correct(row, col, num): #column

这里我想解决给定的数独问题

class Solution:
def solveSudoku(self, board: List[List[str]]) -> None:
    """
    Do not return anything, modify board in-place instead.
    """
    def is_correct(row, col, num):
        #column
        for c in range(9):
            if board[row][c] == num:
                return False

        #row
        for r in range(9):
            if board[r][col] == num:
                return False

        #square
        x = row//3 * 3
        y = col//3 * 3
        for i in range(3):
            for j in range(3):
                if board[x+i][y+j] == num:
                    return False
        return True

    def find_next():
        
        for i in range(9):
            for j in range(9):
                if board[i][j] == '.':
                    return i, j
        return None, None

    def solve():
        row, col = find_next()

        if row == None:
            print(board)
            return True
    

        for i in range(1, 10):
            if is_correct(row, col, str(i)):
                board[row][col] = str(i)

                solve()

            board[row][col] = '.'
    
    solve()

solve
函数中的
print
函数返回已求解的数独板,但不会在原地更改。如何更改函数,以便更改板的位置?

找到解决方案后,返回调用堆栈上的
True

请尝试以下代码:

board = [
["5","3",".",".","7",".",".",".","."],
["6",".",".","1","9","5",".",".","."],
[".","9","8",".",".",".",".","6","."],
["8",".",".",".","6",".",".",".","3"],
["4",".",".","8",".","3",".",".","1"],
["7",".",".",".","2",".",".",".","6"],
[".","6",".",".",".",".","2","8","."],
[".",".",".","4","1","9",".",".","5"],
[".",".",".",".","8",".",".","7","9"]]

class Solution:
   def solveSudoku(self, board) -> None:
     """
     Do not return anything, modify board in-place instead.
     """
     solve()
    
def is_correct(row, col, num):
    #column
    for c in range(9):
        if board[row][c] == num:
            return False

    #row
    for r in range(9):
        if board[r][col] == num:
            return False

    #square
    x = row//3 * 3
    y = col//3 * 3
    for i in range(3):
        for j in range(3):
            if board[x+i][y+j] == num:
                return False
    return True

def find_next():
    
    for i in range(9):
        for j in range(9):
            if board[i][j] == '.':
                return i, j
    return None, None

def solve():
    #print(id(board))
    row, col = find_next()

    if row == None:
        #print(board)
        return True


    for i in range(1, 10):
        if is_correct(row, col, str(i)):
            board[row][col] = str(i)

            if solve(): return True  # solution found
            board[row][col] = '.'  # no solution yet

Solution().solveSudoku(board)

print(board)  # global board
输出

[['5', '3', '4', '6', '7', '8', '9', '1', '2'], 
 ['6', '7', '2', '1', '9', '5', '3', '4', '8'], 
 ['1', '9', '8', '3', '4', '2', '5', '6', '7'], 
 ['8', '5', '9', '7', '6', '1', '4', '2', '3'], 
 ['4', '2', '6', '8', '5', '3', '7', '9', '1'], 
 ['7', '1', '3', '9', '2', '4', '8', '5', '6'], 
 ['9', '6', '1', '5', '3', '7', '2', '8', '4'], 
 ['2', '8', '7', '4', '1', '9', '6', '3', '5'], 
 ['3', '4', '5', '2', '8', '6', '1', '7', '9']]

您希望在终端上更改文本而不重新绘制电路板?我假设您谈论的是输出到终端,而不是输出完整的电路板并让它滚动屏幕以替换先前的电路板,但是,需要更改的几个字符似乎只是更改,而不需要重新绘制或滚动棋盘的其余部分。是这样吗。如果是这样的话,那么我知道做这种事情的唯一方法就是诅咒。请检查。@Mike67我正在尝试解决上述链接中的问题。但是作为参数传递的“board”不是全局更改,而是在
solve
函数中局部更改。但我想在全球范围内改变它。请参阅链接以了解更多信息details@Steve我试图解决上面提到的链接问题,我得到了参数“board”不全局变化的上述问题