【问题标题】:Python spacing out 2048 board [duplicate]Python间距2048板[重复]
【发布时间】:2018-12-14 06:49:49
【问题描述】:

所以我有 2048 板的代码:

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

如果所有的值都是个位数,这可以正常工作:

0 0 0 8
0 4 0 0 
0 0 2 2
0 0 0 0 

但如果我有多个多于 1 位的数字:

16 0 2 2048
8 2 32 64
2 2 0 0
2048 2048 4096 4096

所有的间距都弄乱了。有什么解决办法吗?

【问题讨论】:

  • 计算最长值的长度,然后用空格填充每个其他值以达到该长度
  • 我不知道如何将该解决方案放入我的代码中。

标签: python python-3.x list


【解决方案1】:

避免为此编写自定义函数。有很多 python 包可以在整洁的桌子上打印东西。

我的建议是使用PrettyTable

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 

【讨论】:

    【解决方案2】:

    正如 Keatinge 在评论中提到的,在打印之前遍历数组并找到最长的数字。

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

    我们取nlist,计算出每个数字写成文本时的长度,然后取最大值并加一个(+1 是数字之间有空格)。然后,在循环内部,我们将正在查看的数字串化并根据需要添加空格。

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

    完整示例:

    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
    

    【讨论】:

    • 为什么不使用format?这样短数字可以居中。
    • 格式怎么用?
    猜你喜欢
    • 2021-11-15
    • 2015-11-23
    • 1970-01-01
    • 2016-02-28
    • 2016-05-10
    • 1970-01-01
    • 2018-09-29
    • 2017-08-19
    • 2014-11-12
    相关资源
    最近更新 更多