2015-01-02 42 views
0

比方說,我有以下代碼:如何動態填充輸出?

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)) 

不過,我將如何保持如果對準|符號I事先不知道lim的位數。例如,假設允許用戶爲lim輸入任何值,我如何確保一切正確對齊?

+0

你可以服用輸入後計算的位數,我不明白問題 – sashas

+0

我爲什麼得到-1? – Bolboa

+0

通過你的問題的答案,你可以做的事情easliyhttp://stackoverflow.com/questions/27738812/how-to-pad-output-print-format-etc –

回答

3

一個使用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)) 
2

可以使用LIM的len打印前建立格式的方法:

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

這是另一種方式,字符串的長度,但我不知道哪一個更好,也許取決於您的偏好 – jamylak

+0

嗯,我顯然更喜歡你的解決方案......我是一個更天真的方法,我會說。 – fredtantini

+0

我不這麼認爲,現在考慮這似乎更安全(但我仍然使用我的格式) – jamylak