如何动态填充输出?

How to dynamically pad output?

假设我有以下代码:

 lim = #whatever number
 for i in range(lim, -1, -1):
    print(str(i) + "|")

例如,如果 lim 为 20,则输出为:

20|
19|
...etc
5|
4|
...etc 

| 总是在数字之后打印,但是我希望 | 在打印时对齐,这样我的输出看起来像这样:

20|
19|
...etc
5 | <--Notice a space after single digit
4 |
...etc

现在,如果知道 lim 有多少位数字,这很容易,例如,如果我知道它有 2 位数字,我可以使用以下内容:

print('{:<2}|'.format(i))

但是,如果我事先不知道 lim 的数字,我将如何保持 | 符号对齐。例如,假设允许用户为 lim 输入任何值,我如何确保所有内容都正确对齐?

使用log

的一种方式
from math import log
pad = int(log(lim, 10)) # lim can't be 0

for i in range(lim, -1, -1):
    print('{num:<{pad}}|'.format(pad=pad, num=i))

您可以使用 lim 的 len 在打印前构建格式:

>>> lim=123
>>> f = '{:<'+str(len(str(lim)))+'}|'
>>> f.format(2)
'2  |'
>>> lim=1234
>>> f = '{:<'+str(len(str(lim)))+'}|'
>>> f.format(2)
'2   |'