结果仅作为最后结果追加到列表

时间:2018-11-22 21:00:18

标签: python

我正在尝试制作一个简短的程序来确定四个骰子的每个组合,乘以得到72的乘积,如果我在for循环中打印出构成72的组合,但是如果尝试附加,就可以正常工作将其返回到结果列表,仅返回[6,6,6,6](最后一个可能的组合)。

# code to determine every combination of 4 dice that multiplys to 72
# nxt function creates next possible combination eg [0, 1, 4, 6] becomes [0, 1, 5, 0]
def nxt(number):

    carry = 0
    for i in range(len(number) - 1, -1, -1):
        if i == len(number) - 1:
            number[i] += 1
            if number[i] > 6:
                carry = 1
                number[i] = 0
        else:
            number[i] += carry
            if number[i] > 6:
                carry = 1
                number[i] = 0
            else:
                carry = 0
    return number


dice = [0, 0, 0, 0]
result = []

#2400 is number of combinations possible (7^4)
for i in range(0, 2400):
    if dice[0] * dice[1] * dice[2] * dice[3] == 72:
        result.append(dice)
    dice = nxt(dice)

print(result)

返回相等数量的[6,6,6,6]列表,因为存在使72组合的组合,其中好像一次打印一个结果而不是附加

dice = [0, 0, 0, 0]
result = []

for i in range(0, 2400):
    if dice[0] * dice[1] * dice[2] * dice[3] == 72:
        print dice
    dice = nxt(dice)

它可以很好地打印出来

1 个答案:

答案 0 :(得分:1)

问题出在for循环中。在附录中是确切的。应该是:

result.append(dice[:])

您所做的只是多次复制参考。意味着大列表中的所有列表取相同的值,因为它们本质上是相同的列表。我所做的是将实际值复制到列表中,而不是引用中。