我正在尝试制作一个简短的程序来确定四个骰子的每个组合,乘以得到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)
它可以很好地打印出来
答案 0 :(得分:1)
问题出在for循环中。在附录中是确切的。应该是:
result.append(dice[:])
您所做的只是多次复制参考。意味着大列表中的所有列表取相同的值,因为它们本质上是相同的列表。我所做的是将实际值复制到列表中,而不是引用中。