我正在创建一个类似数独的求解器;每次通过cullLists检查每个方块的可能值的每个列表与其行和列。我的问题是,当solution = temp时,它不会打印拼图的最终版本。我可以在外面放一个打印循环,但为了学习,我想用相同的打印循环来呈现它。
这是它运行的周期
[1, 5, 0, 0, 4, 0]
[2, 4, 0, 0, 5, 6]
[4, 0, 0, 0, 0, 3]
[0, 0, 0, 0, 0, 4]
[6, 3, 0, 0, 2, 0]
[0, 2, 0, 0, 3, 1]
[1, 5, [2, 3, 6], [2, 3, 6], 4, [2]]
[2, 4, [1, 3], [1, 3], 5, 6]
[4, [1, 6], [1, 2, 5, 6], [1, 2, 5, 6], [1, 6], 3]
[[3, 5], [1, 6], [1, 2, 3, 5, 6], [1, 2, 3, 5, 6], [1, 6], 4]
[6, 3, [1, 4, 5], [1, 4, 5], 2, [5]]
[[5], 2, [4, 5, 6], [4, 5, 6], 3, 1]
[1, 5, [3, 6], [3, 6], 4, 2]
[2, 4, [1, 3], [1, 3], 5, 6]
[4, [1, 6], [1, 2, 5, 6], [1, 2, 5, 6], [1, 6], 3]
[[3], [1, 6], [1, 2, 3, 5, 6], [1, 2, 3, 5, 6], [1, 6], 4]
[6, 3, [1, 4], [1, 4], 2, 5]
[5, 2, [4, 6], [4, 6], 3, 1]
我希望再运行一个循环来打印列表,解决方案[0,3]为3而不是[3]
temp = []
while solution != temp:
temp = solution
solution = cullLists(solution)
for i in range (0, d):
print(solution[i])
print()
编辑:我后来才意识到问题不在于while循环,而是深层/浅层复制; temp = solution不是我需要的,但带有temp = copy.deepcopy(solution)
标题的import copy
在不改变循环的情况下解决了它。
temp = []
while solution != temp:
temp = copy.deepcopy(solution)
solution = cullLists(solution)
for i in range (0, d):
print(solution[i])
print()
答案 0 :(得分:2)
您应该将print语句移动到一个函数,然后从循环内部和外部调用该函数。
答案 1 :(得分:1)
使用函数从while循环外部调用它可能是正确的方法。如果你不想这样做并坚持在循环中这样做,这将有效。
temp = []
done = False
while not done:
if temp != solution:
temp = solution
solution = cullLists(solution)
else:
done = True
for i in range (0, d):
print(solution[i])
print()
答案 2 :(得分:0)
这听起来像do
... while
循环是在C
语言 - 它的循环中创建的一种原因,保证至少运行一次,并检查是否在 end 而不是在开头再次运行。 Python没有这样的构造,但是等效的模式是:
while True:
# do things
# print things
if solution == temp: break
然而,如果循环至少运行一次(无论是否总是运行一次,目前还不清楚,你的代码,如问题所写,实际上会做同样的事情,因为它不清楚什么是初始值solution
是。)