勾选脚趾:Python数字在不同的上下文中以不同的方式显示不同

时间:2017-11-16 22:43:40

标签: python python-2.7 tic-tac-toe

我不确定如何描述这个问题,如果标题不够,请道歉。

我试图制作一段代码,将所有可能的滴答板(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()。有谁知道问题是什么?

2 个答案:

答案 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来获得所需的输出。