2012-02-09 73 views
3

我有一個列格式問題:格式化在Python 2.7

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

這是因爲您正在放入兩個標籤而不是一個標籤。我自己我想我會建立每一個字符串,並在添加每個數字之間添加適當數量的填充作爲空間。 – 2012-02-09 19:55:16

+0

使用python字符串格式方法,'format'或'%' – joaquin 2012-02-09 19:59:41

回答

9

@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) + ' %') 

請注意,而不是製表符我用空格來分隔所有東西。這是因爲選項卡確實是不是你想要在這裏使用的,因爲製表符空間事物的規則是不一致的(並取決於你的終端/查看器設置)。

這是答案的樣子:使用str.format

--------------------------------------------------------------------------- 
# 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 % 
+1

這是因爲您使用的是Python 2.6。這個問題具體談2.7。停止downvoting沒有很好的理由。 – 2012-02-09 20:20:28

+0

+1在2.7中進行了測試,確實做到了正確的事情。 – 2012-02-09 20:25:50

+0

簡單讓我明白,我喜歡它。 – oaxacamatt 2012-02-09 20:33:51

0

這是製表符的工作方式。要獲得正確的格式,您應該使用string.format。對於你的榜樣,它看起來是這樣的:

print "{0:2d}   {1:9.8f} {2:f} %".format(a, newRoot, percentError) 
+0

這不會給出所需的輸出。 New Root列中的值都具有相同的小數位數輸出。 – 2012-02-09 20:05:19

+0

''{0:2d} {1:20.8f} {2:f}%「。format'打印相同,而且不要將文字間距與格式間距 – joaquin 2012-02-09 20:20:00

+1

」{0:2d} {1:20.8f} {2:f}%「格式:似乎不適用於2.7 – oaxacamatt 2012-02-11 01:02:33

2

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%}百分號讓您在結束對您(由100不用乘法)離開 percentError爲小數並 地方%