2014-10-07 28 views
0

我想通過格式化print()函數來讓我的列表計算結果以有序的方式顯示。我已經嘗試過來自這個網站和Python Docs的各種方法。在Python3中List的格式化結果.4

最接近我可以得到它顯示在一個表格格式是使用.format()函數對齊輸出,但一些行仍然偏移。我知道這是因爲前面的結果比其他結果長,但我無法找到讓文本在列中對齊的方式。

當我嘗試從已有的字符串格式中修改字符串格式時,出現「元組索引超出範圍」錯誤。但據我所知,我不使用元組?

這是我想要打印的字符串:

print('{:<10}'.format("Richter Scale Value:"), '{:<10}'.format(rVal),'{:^10}'.format ("Joules:"),'{:^10}'.format(joules),'{:>10}'.format("TNT:"),'{:>10}'.format(tnt)) 

但輸出我得到的是:

Richter Scale Value: 1   Joules: 1995262.3149688789  TNT: 0.00047687913837688307 
Richter Scale Value: 5   Joules: 1995262314968.8828  TNT: 476.87913837688404 
Richter Scale Value: 9.1   Joules: 2.818382931264449e+18  TNT: 673609687.2046962 
Richter Scale Value: 9.2   Joules: 3.981071705534953e+18  TNT: 951498973.5982201 
Richter Scale Value: 9.5   Joules: 1.1220184543019653e+19  TNT: 2681688466.3048882 

我無法弄清楚如何獲得最後三個「TNT」線匹配。

這是打印(前述)的代碼:

rVal = 0 
qList=[1,5,9.1,9.2,9.5] 
qList_len = len(qList) 
for i in range (0,qList_len): 
    rVal = qList[i] 
    joules = 10**((1.5*rVal)+4.8) 
    tnt = joules/(4.184*10**9) 

任何援助將受到歡迎感謝。

+0

Thanks Martijn,太棒了。對字符串格式的額外理解非常有幫助。 – regreading 2014-10-07 10:07:13

回答

1

您需要明確地將您的joules值格式化爲精度。您只給予最小寬度,但默認格式超過:

print('Richter Scale Value: {:<10.1f} Joules: {:<10.8g} TNT: {:10.8g}'.format(
    rVal, joules, tnt)) 

您可能需要調整的確切寬度和多少小數顯示。您也可以使用f而不是g來始終強制顯示數值而不使用科學的e表示法,或使用e來強制使用科學記數法。

我把你的6 str.format()調用合併爲一個。格式化常量標籤字符串沒有多大意義。

0

首先,您必須查找最大列寬並相應地格式化表格,固定的寬度值顯然不起作用,因爲每個單元格中的內容長度可能會有所不同。

前一段時間,我創建了一個用於創建文本表的包,名爲txtable