我正在學習遞回并通過這段代碼(不是我的:https : //github.com/kying18/sudoku),無法弄清楚為什么變數example_board 會改變值。它永遠不會再被處理,并且沒有其他變數與它相關聯?我測驗了它,它確實如此!
以下是相關代碼的精簡版:
def find_next_empty(puzzle):
#returns a row, col for a empty square
def is_valid(puzzle, guess, row, col):
#checks if guess is True or False
def solve_sudoku(puzzle):
row, col = find_next_empty(puzzle)
if row is None: # this is true if our find_next_empty function returns None, None
return True
for guess in range(1, 10): # range(1, 10) is 1, 2, 3, ... 9
if is_valid(puzzle, guess, row, col):
puzzle[row][col] = guess
if solve_sudoku(puzzle):
return True
puzzle[row][col] = -1
return False
if __name__ == '__main__':
example_board = [
[3, 9, -1, -1, 5, -1, -1, -1, -1],
[-1, -1, -1, 2, -1, -1, -1, -1, 5],
[-1, -1, -1, 7, 1, 9, -1, 8, -1],
[-1, 5, -1, -1, 6, 8, -1, -1, -1],
[2, -1, 6, -1, -1, 3, -1, -1, -1],
[-1, -1, -1, -1, -1, -1, -1, -1, 4],
[5, -1, -1, -1, -1, -1, -1, -1, -1],
[6, 7, -1, 1, -1, 5, -1, 4, -1],
[1, -1, 9, -1, -1, -1, 2, -1, -1]
]
print(solve_sudoku(example_board))
print(example_board)
'''
uj5u.com熱心網友回復:
在深入了解實作細節之前,您必須了解通過參考或值傳遞引數的含義,因為 python 通過參考傳遞:
傳遞意味著向函式提供引數。參考意味著您傳遞給函式的引數是對記憶體中已經存在的變數的參考,而不是該變數的獨立副本。
由于您為函式提供了對現有變數的參考,因此對該參考執行的所有操作都將直接影響它所參考的變數。讓我們看一些例子來說明這在實踐中是如何作業的。
參考這篇文章
uj5u.com熱心網友回復:
在行中列印時:“print(solve_sudoku(example_board))” example_board 被傳遞到solve_sodoku。然后,solve_sodoku 函式在這一行中更改它的值:“puzzle[row][col] =guess”,因為拼圖參考了 example_board 變數,并且其中一個值被更改為 guess。
希望這有幫助!
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/405891.html
標籤:
下一篇:如何通過id值選擇陣列?
