(字符串格式化)这就是你所说的右对齐,如何使数字对齐"右对齐"? Python 3.4

时间:2016-04-26 02:00:43

标签: python-3.x

print('''
     a        b        a**b
     1        2        1 
     2        3        8
     3        4        81  
     4        5        1024 
     5        6        15625\n''')

好吧,在上面的代码中,如果你看第三列,数字是通过让我们说左边距来对齐的。但是,在下面的代码中,通过右边距对齐。如何让下面的代码看起来像上面的代码?另外,我所说的问题是左/右对齐吗?我不知道该怎么称呼它。我还添加了我为for循环获得的输出。

a = 1
b = 2
i = 0

for i in range(0,5):
    print("%10i%9i%9i" %(a,b, (a**b)))
    a+=1
    b+=1

 '''output:
     1        2        1
     2        3        8
     3        4       81
     4        5     1024
     5        6    15625'''

1 个答案:

答案 0 :(得分:1)

以下是使用%运算符的简单修复:

使用%格式化字符串,如果在-之后放置%,则表示左对齐。对于您的代码,这看起来像:

a = 1
b = 2
i = 0

for i in range(0,5):
    print("%10i%9i%-9i" %(a,b, (a**b)))
    a+=1
    b+=1

 '''output:
     1        21
     2        38
     3        481
     4        51024
     5        615625'''

正如你所看到的,这个左对齐直到前一列,最便宜的修复是添加九个空格,但你也可以只用下面的九个空格格式化一个空字符串(虽然有字符偏移, 8空格填充可能更正确):

a = 1
b = 2
i = 0

for i in range(0,5):
    print("%10i%9i%9s%-9i" %(a,b,"", (a**b)))
    a+=1
    b+=1

 '''output:
     1        2         1
     2        3         8
     3        4         81
     4        5         1024
     5        6         15625'''

最佳解决方案:使用str.format模块

通常,我喜欢使用string.format module。它比上一个例子更强大,更简洁:

a = 1
i = 0
b = 2
for i in range(0,5):
    print("{0:<10}{1:<9}{2:<9}".format(a,b,(a**b)))
    a+=1
    b+=1

'''output:
     1         2        1        
     2         3        8        
     3         4        81       
     4         5        1024     
     5         6        15625 '''