我不确定如何描述这个问题,如果标题不够,请道歉。
我试图制作一段代码,将所有可能的滴答板(0为空白,1为X,2为O)放入2d数组(列表列表)。我成功地找到了这样做的方法:
import math
boxes = []
for m in range (0, 19683):
boxes.append([m%3, int(math.floor((m%9)/3))])
print(boxes)
它有效。但是我没有输入接下来的七个列表项,而是认为迭代它们会更容易:
boxes = []
for m in range (0, 19683):
boxes.append([])
for s in range (0,9):
boxes[m].append(int(math.floor((m%(3**(m+1)))/(3**m))))
print(boxes)
它给了我一大堆零!我不知道为什么将它改为迭代会这样做;我尝试了**和pow()。有谁知道问题是什么?
答案 0 :(得分:0)
看看你的代码,我想在你的第二个例子中你可能意味着:
boxes[m].append(int(math.floor((m%(3**(s+1)))/(3**s))))
此外,您可以利用itertools.product()
来实现同样的结果:
boxes = list(product([0, 1, 2], repeat=9))
答案 1 :(得分:0)
让我们看看那个内在表达:
math.floor(m%(3**(m+1)))/(3**m)
分子只是m
:你取模数3^(m+1)
,它将大于m
。接下来的步骤是m / (3**m)
- 取整数,这是0。
简而言之,你的代数已关闭。
我建议您使用itertools.product
来获得所需的输出。