Форматирование в Python 2.7 - PullRequest
       14

Форматирование в Python 2.7

3 голосов
/ 09 февраля 2012

У меня проблема с форматированием столбца:

from math import sqrt
n = raw_input("Example Number? ")
n = float(n)
sqaureRootOfN = sqrt(n)

print '-'*50
print ' # of Decimals', '\t', 'New Root', '\t', 'Percent error'
print '-'*50
for a in range(0,10):
    preRoot = float(int(sqaureRootOfN * 10**a))
    newRoot = preRoot/10**a
    percentError = (n - newRoot**2)/n*100
    print ' ', a, '\t\t', newRoot, '\t\t', percentError, '%'

Это выглядит как:

enter image description here

Не в том же столбце!

Ответы [ 3 ]

9 голосов
/ 10 февраля 2012

@ Bjorn имеет правильный ответ здесь, используя спецификацию String.format. Формататор строк Python имеет действительно мощные методы для правильного выравнивания. Вот пример:

from math import sqrt
n = raw_input("Example Number? ")
n = float(n)
sqaureRootOfN = sqrt(n)

print '-'*75
print ' # of Decimals', ' ' * 8, 'New Root', ' ' * 10, 'Percent error'
print '-'*75
for a in range(0,10):
    preRoot = float(int(sqaureRootOfN * 10**a))
    newRoot = preRoot/10**a
    percentError = (n - newRoot**2)/n*100
    print " {: <20}{: <25}{: <18}".format(a, newRoot, str(percentError) + ' %')

Обратите внимание, что вместо вкладок я использую пробелы для разметки. Это потому, что вкладки на самом деле не то, что вы хотите использовать здесь, потому что правила того, как вкладки располагаются в пространстве, противоречивы (и зависят от настроек вашего терминала / программы просмотра).

Вот как выглядит ответ:

---------------------------------------------------------------------------
 # of Decimals          New Root            Percent error
---------------------------------------------------------------------------
 0                   9.0                      18.1818181818 %   
 1                   9.9                      1.0 %             
 2                   9.94                     0.198383838384 %  
 3                   9.949                    0.0175747474747 % 
 4                   9.9498                   0.00149490909092 %
 5                   9.94987                  8.7861717162e-05 %
 6                   9.949874                 7.45871112931e-06 %
 7                   9.9498743                1.4284843602e-06 %
 8                   9.94987437               2.14314187048e-08 %
 9                   9.949874371              1.33066711409e-09 %
2 голосов
/ 10 февраля 2012

Использование str.format ,

import math
n = float(raw_input("Example Number? "))
squareRootOfN = math.sqrt(n)

print('''\
{dashes}
{d:<16}{r:<15}{p:<}
{dashes}'''.format(dashes = '-'*50, d = ' # of Decimals', r = 'New Root', p = 'Percent error'))
for a in range(0,10):
    preRoot = float(int(squareRootOfN * 10**a))
    newRoot = preRoot/10**a
    percentError = (n - newRoot**2)/n
    print('  {d:<14}{r:<15}{p:13.9%}'.format(d = a, r = newRoot, p = percentError))

выходы

--------------------------------------------------
 # of Decimals  New Root       Percent error
--------------------------------------------------    
  0             9.0            18.181818182%
  1             9.9             1.000000000%
  2             9.94            0.198383838%
  3             9.949           0.017574747%
  4             9.9498          0.001494909%
  5             9.94987         0.000087862%
  6             9.949874        0.000007459%
  7             9.9498743       0.000001428%
  8             9.94987437      0.000000021%
  9             9.949874371     0.000000001%

Несколько хитростей / тонкостей:

  • Вместо трех операторов печати вы можете использовать один оператор печати для многострочная строка.
  • Символ процента в формате {p:13.9%} позволяет вам выйти percentError как десятичное число (без умножения на 100) и помещает % в конце для вас.
0 голосов
/ 09 февраля 2012

Так работают вкладки. Чтобы получить правильное форматирование, вы должны использовать string.format. Для вашего примера это может выглядеть так:

print "{0:2d}          {1:9.8f} {2:f} %".format(a, newRoot, percentError)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...