如何使非数字while循环重复1次

时间:2016-09-23 19:01:17

标签: python-3.x

我正在创建一个类似数独的求解器;每次通过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()

3 个答案:

答案 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是。)