2014-10-07 2 views
0

Я пытаюсь отобразить результаты моих расчетов списков упорядоченным способом, форматируя функцию print(). Я пробовал различные методы с этого сайта и Python Docs.Форматирование результатов из списка в Python3 .4

Самый близкий, который я могу получить, чтобы отображать его в формате таблицы, является выравнивание вывода с использованием функции .format(), но пара строк все еще смещена. Я понимаю, что это связано с тем, что предыдущие результаты больше, чем другие, но я не могу понять, как получить выравнивание текста в столбцах.

Когда я пытаюсь изменить форматирование строки из того, что у меня уже есть, я получаю ошибку «tuple index out the range». Но насколько я знаю, я не использую Tuples?

Это строка я пытаюсь напечатать:

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

Спасибо Martijn, это здорово. Дополнительное понимание форматирования строк очень помогло. – regreading

ответ

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.