如何在python中对齐文本输出?

Cop*_*Run 8 python-3.x

所以我有一个函数可以根据程序中其他地方收集的一些数据创建一个小星表.虽然表生成正确的输出,但由于每个数字中的字符数发生变化,因此表将取消对齐.例如,

70-78: *****
79-87: ***
88-96: ****
97-105: **
106-114: ******
115-123: ****
Run Code Online (Sandbox Code Playgroud)

有没有办法让星星对齐(呵呵),以便输出是这样的:

70-78:   *****
79-87:   ***
88-96:   ****
97-105:  **
106-114: ******
115-123: ****
Run Code Online (Sandbox Code Playgroud)

这是我目前打印表格的方式.

for x in range(numClasses):
    print('{0}-{1}: {2}'.format(lower[x],upper[x],"*"*num[x]))
Run Code Online (Sandbox Code Playgroud)

pok*_*oke 11

str.format已经有可能指定对齐方式.你可以用{0:>5}; 这会将参数0右对齐5个字符.然后,我们可以使用显示所有数字所需的最大位数来动态构建格式字符串:

>>> lower = [70, 79, 88, 97, 106, 115]
>>> upper = [78, 87, 96, 105, 114, 123]
>>> num = [5, 3, 4, 2, 6, 4]
>>> digits = len(str(max(lower + upper)))
>>> digits
3
>>> f = '{0:>%d}-{1:>%d}: {2}' % (digits, digits)
>>> f
'{0:>3}-{1:>3}: {2}'
>>> for i in range(len(num)):
        print(f.format(lower[i], upper[i], '*' * num[i]))

 70- 78: *****
 79- 87: ***
 88- 96: ****
 97-105: **
106-114: ******
115-123: ****
Run Code Online (Sandbox Code Playgroud)

实际上,你甚至可以在这里使用嵌套字段的单个格式字符串:

>>> for i in range(len(num)):
        print('{0:>{numLength}}-{1:>{numLength}}: {2}'.format(lower[i], upper[i], '*' * num[i], numLength=digits))
Run Code Online (Sandbox Code Playgroud)


Nex*_*eer 5

这应该可以解决问题.我认为有聪明的方法.

print '70-78:'.ljust(10) + '*****'
Run Code Online (Sandbox Code Playgroud)

你也可以用 expandtabs()

print ('70-78'+'\t'+ '*****').expandtabs(10)
Run Code Online (Sandbox Code Playgroud)