2014-01-28 2 views
1

В основном я оцениваю pi, используя полигоны. У меня есть цикл, который дает мне значение для n, ann и bnn перед повторным запуском цикла. вот что я до сих пор:Как поместить данные из цикла while в таблицу?

def printPiTable(an,bn,n,k): 
"""Prints out a table for values n,2n,...,(2^k)n""" 
u = (2**k)*n 
power = 0 
t = ((2**power)*n) 
while t<=u: 
    if power < 1: 
     print(t,an,bn) 
     power = power + 1 
     t = ((2**power)*n) 
    else: 
     afrac = (1/2)*((1/an)+(1/bn)) 
     ann = 1/afrac 
     bnn = sqrt(ann*bn) 
     print(t,ann,bnn) 
     an = ann 
     bn = bnn 
     power = power + 1 
     t = ((2**power)*n) 
return 

Это то, что я получу, если я запускаю его с этими значениями:

>>> printPiTable(4,2*sqrt(2),4,5) 

4 4 2.8284271247461903 

8 3.3137084989847607 3.0614674589207187 

16 3.1825978780745285 3.121445152258053 

32 3.1517249074292564 3.1365484905459398 

64 3.1441183852459047 3.1403311569547534 

128 3.1422236299424577 3.1412772509327733 

Я хочу, чтобы найти способ сделать это вместо того, чтобы печатать эти значения , просто распечатайте значения в хорошей аккуратной таблице, любую помощь?

+2

Какую таблицу вы хотите сохранить? Образ? HTML? CSV? ...стол для пикника? – mhlester

+0

@mhlester Я хочу, чтобы вместо того, чтобы распечатывать эти значения, распечатайте таблицу, просто простую таблицу. Вероятно, я должен был сделать это ясно в вопросе – Foflo

ответ

4

Использовать форматирование строк. Например,

 print('{:<4}{:>20f}{:>20f}'.format(t,ann,bnn)) 

производит

4    4.000000   2.828427 
8    3.313708   3.061467 
16    3.182598   3.121445 
32    3.151725   3.136548 
64    3.144118   3.140331 
128    3.142224   3.141277 

{:<4} заменяется t, выравнивается по левому краю, отформатированный в строку длины 4.

{:>20f} заменяется ann, по правому краю, отформатирован как поплавок на строку длиной 20.

Полная история в строке формата синтаксис explained here.


Чтобы добавить заголовки столбцов, просто добавьте оператор печати, как

print('{:<4}{:>20}{:>20}'.format('t','a','b')) 

Для причудливых таблиц ASCII, рекомендуется использовать пакет как prettytable:

import prettytable 

def printPiTable(an,bn,n,k): 
    """Prints out a table for values n,2n,...,(2^k)n""" 
    table = prettytable.PrettyTable(['t', 'a', 'b']) 
    u = (2**k)*n 
    power = 0 
    t = ((2**power)*n) 
    while t<=u: 
     if power < 1: 
      table.add_row((t,an,bn)) 
      power = power + 1 
      t = ((2**power)*n) 
     else: 
      afrac = (1/2)*((1/an)+(1/bn)) 
      ann = 1/afrac 
      bnn = sqrt(ann*bn) 
      table.add_row((t,ann,bnn)) 
      an = ann 
      bn = bnn 
      power = power + 1 
      t = ((2**power)*n) 
    print(table) 


printPiTable(4,2*sqrt(2),4,5) 

урожаи

+-----+---------------+---------------+ 
| t |  a  |  b  | 
+-----+---------------+---------------+ 
| 4 |  4  | 2.82842712475 | 
| 8 | 3.31370849898 | 3.06146745892 | 
| 16 | 3.18259787807 | 3.12144515226 | 
| 32 | 3.15172490743 | 3.13654849055 | 
| 64 | 3.14411838525 | 3.14033115695 | 
| 128 | 3.14222362994 | 3.14127725093 | 
+-----+---------------+---------------+ 

Возможно, это слишком для этой единственной цели, но Pandas может сделать хорошие таблицы тоже, и может экспортировать их в другие форматы, такие как HTML.

+0

Если вы хотите иметь более постоянное решение, вы также можете использовать этот ответ для сохранения в файле. Я не буду добавлять новый ответ, но это было бы хорошим дополнением к этому ответу. –

+0

Есть ли способ добавить заголовки столбцов – Foflo

Смежные вопросы