获取输出数字在列中排队?

时间:2013-08-23 14:56:44

标签: python

我正在制作一个显示素数的小程序。代码(下面)产生了正确的答案,但我遇到了让输出看起来“不错”的麻烦。

import math
N = int(input('List primes up to: '))
maxDigits = math.ceil(math.log10(N)) #equal spacing, even with lesser digit stuff
for i in range(3,N,2):
    for d in range(2,int(math.sqrt(i))):
        if i%d==0:
            break
    else :
        print(str(i),end=' '*(maxDigits-len(str(i))))

我们的想法是根据素数可能具有的最大位数,将尽可能多的列放在输出屏幕上。但是现在当我运行该程序时,它会显示所有数字的长行,没有任何换行符。这导致输出看起来像这样:

IT'S SO UGLY! IT BURNS MY EYES! http://img194.imageshack.us/img194/5522/2eyd.png

哪个...并不是我想要的。如果没有数字包裹在线上的事实,并且如果没有足够的空间就知道要去下一行,一切都会正常工作。那么我怎么能摆脱我的程序中令人讨厌的包装呢?越优雅(即请不要告诉我,我必须计算终端宽度并将其除以maxDigits)越好......:D

2 个答案:

答案 0 :(得分:0)

看一下PrettyPrinter(a.k.a.pprint)库,你可以设置缩进和深度级别,它可以自动处理所有

答案 1 :(得分:0)

您可以随时添加换行符。一个简单的方法是在一定数量的数字之后添加一个'\n'字符,比如每10个。更复杂的方法是确定终端的宽度并计算每行可以输出的数量。

您可能还想查看str.format(),它允许您设置表格中每列的宽度。有关可用于格式化的选项的详细信息,请查看Format String Syntax