Python间隔2048板

Python spacing out 2048 board

本问题已经有最佳答案,请猛点这里访问。

所以我有2048板的代码:

1
2
3
4
5
6
7
count = 0
for i in range(16):
    print(nlist[i], end = ' ')
    count += 1
    if count == 4:
        print("")
        count = 0

如果所有的值都是一个数字,这就很好了:

1
2
3
4
0 0 0 8
0 4 0 0
0 0 2 2
0 0 0 0

但如果我有多个数字超过1位数:

1
2
3
4
16 0 2 2048
8 2 32 64
2 2 0 0
2048 2048 4096 4096

所有的间距都弄乱了。有没有解决办法?


避免为此编写自定义函数。有很多python包可以在一个整洁的表中打印东西。

我的建议是用漂亮的

1
2
3
4
5
6
7
8
9
10
from prettytable import PrettyTable
t = PrettyTable(header=False, border=False)
for i in range(0,16,4):
    t.add_row(range(i, i+4))

print t
# 0   1   2   3  
# 4   5   6   7  
# 8   9   10  11
# 12  13  14  15

正如Keating在注释中提到的,在打印前迭代数组并找到最长的数字。

1
length = max(map(lambda x: len(str(x)), nlist)) + 1

我们取nlist,以文本形式写出每个数字的长度,然后取最大值再加上一个(+1是这样数字之间有一个空格)。然后,在循环内部,我们将要查看的数字串接起来,并根据需要添加空格。

1
2
text = str(x)
text += ' ' * (length - len(text))

完整示例:

1
2
3
4
5
6
7
8
9
10
count = 0
length = max(map(lambda x: len(str(x)), nlist)) + 1
for i in range(16):
    text = str(nlist[i])
    text += ' ' * (length - len(text))
    print(text, end = '')
    count += 1
    if count == 4:
        print()
        count = 0