我做了一個程序,它使用回溯算法(網格被分成兩部分,也被分成2個部分,4個單元格)解決4x4數獨,它有3個函數,首先打印網格,然後檢查數字是否可以放入單元格中,主函數(前2個函數按照它們的意圖工作)。該程序工作不正常,我在pythontutor上檢查了它並發現它返回列表,即使它不應該,例如一個數字被放入列表中,然後一個函數自己調用,如果某些數字不能被放置,那麼該函數會返回,但它似乎也返回列表。這裏是代碼。我知道這個程序有缺陷,效率不高(我也知道要改變什麼),但是由於相同的原因它不會工作。Python:函數返回一個列表,儘管它不應該
def sudoku(array):
for x in range(2): #loop that iterates through 2 lists
for y in range(2): #loop that iterates through 2 lists inside lists from above
for z in range(4): #loop that iterates through each cell
if array[x][y][z] == 0: #if a cell is empty then we can write numbers in it
for t in range(1, 5): #loop used for writing numbers into the cells
array[x][y][z] = t #line that writes numbers into the cells
rec = check(x, y, z, t, array) #check if a number can be placed
if rec == False: #if it can then
g = sudoku(array) #call the function
if g == True: #if g returns true then a solution is found, stop the program
return True
elif g == False and t == 4: #if g returns false and no number can be written into the next cell, and all numbers were written into the current cell, then return
return False
elif rec == True and t == 4: #if a number cant be placed into the cell and none of the numbers are valid, then return
return False
print_grid(array) #when all loops finish then a solution is found, print the grid
return True #return
array = [[[0, 4, 0, 0], [0, 1, 3, 0]], [[0, 2, 4, 0], [0, 0, 1, 0]]]
你是什麼意思「返回列表」?我沒有看到函數重新調整列表。我也看不到被調用的函數。告訴我們你是怎麼稱呼它的,以及你如何得出它返回列表的結論。 –
這就是問題所在,沒有一行返回一個列表(不應該返回)。函數調用自己的行g = sudoku(array)。在第一個圖像中,您可以看到3個堆棧和數字4是在列表中,但在第二個圖像中,第三堆棧已經消失,因爲沒有數字可以寫入單元格,但正如你所看到的,數字4仍然在列表中(它不應該在那裏)。 http://i.imgur.com/qH9C9fz.png http://i.imgur.com/HnyOzWY.png – Lunix
它只意味着你忘記刪除該號碼。你一直在使用一個數組 - 如果你沒有移除某個數組,那麼它將保持在數組中。 – furas