下面的方法旨在展示数独在画布上回溯解决方案的演变。
findAnswer()函数将返回一个9x9列表,其中包含数独的原始布局到 self.original 以及一个9x9列表到 self的列表。 btSolution ,它包含回溯解决方案的所有迭代。
问题在于,它不是在画布上显示所有迭代,而是遍历所有内容,只显示最后一个。我调试并检查 self.board.create_text()确实每次都使用正确的参数调用,但只显示最后一次调用时画布上的数字。
def create_gif(self):
self.original, self.btSolution = findAnswer(self.sudoku, gif=1)
for sudoku in self.btSolution:
time.sleep(0.1)
self.board.delete("gifNumbers")
for row in range(9):
for col in range(9):
if sudoku[row][col] != 0:
x = row * CELL + 0.5 * CELL
y = col * CELL + 0.5 * CELL
color = "red" if sudoku[row][col] == self.original[row][col] else "black"
self.board.create_text(x, y, text=sudoku[row][col], fill=color, tags="gifNumbers")
答案 0 :(得分:0)
这听起来像是在你的" findAnswer"方法你使用了这样的代码:
new_answer = original # make a copy
并没有意识到该代码不能复制;它是一个新的参考。要复制2D列表,您需要使用deepcopy功能:
from copy import deepcopy
...
new_answer = deepcopy(original) # make a copy