如何将while循环中的数据放入表中?

时间:2014-01-28 18:42:35

标签: python while-loop

基本上我正在使用多边形来估计pi。我有一个循环,它为nannbnn提供了一个值,然后再次运行循环。这是我到目前为止:

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 个答案:

答案 0 :(得分: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。

答案 1 :(得分:0)

您可以使用输出格式使其看起来很漂亮。在这里看一个例子: http://docs.python.org/release/1.4/tut/node45.html