2011-11-02 61 views
0

我有一個代碼可以創建文本文件中某些字長的百分比丰度列表,例如13%的時間出現1個字母的單詞,我想知道的是,如果在50,000字的文本文件中有1個20個字母的單詞,是否將20個字母單詞的比例降低到0或1?Python中的百分比和舍入

這裏是整個代碼:

lines = open ('E:\Videos, TV etc\Python\Assessment\dracula.txt', 'r'). readlines() 

stripped_list = [item.strip() for item in lines] 

tally = [0] * 20 

print tally #original tally 

for i in stripped_list: 
    length_word = int(len(i)) 
    tally[length_word-1] += 1 #adds 1 to the tally for the index of that word length, (length_word)-1 used as the tally for 1 letter words are in the 0 index 
print tally 

new_tally = [] #this tally will contain the occurences of each word length by percentage 
for a in tally: 
    new_tally.append((100*a)/(sum(tally))) # multiplies by 100 and divides by all of the tallies to give a percentage 
print new_tally 
+1

爲了回答這個問題,我們需要看看你是如何計算您的百分比以及四捨五入是如何被做。 – Acorn

+1

除非您發佈代碼,否則很難說清楚。 – Kevin

+0

它完全取決於正在做什麼取整。你正在使用'print'%.2f「%value'還是某種字符串格式? – chown

回答

3

默認情況下你有截斷號碼,如果分子和分母都是整數。

>>> 1/50000 
0 

解決和真正的百分比,你改變一個或兩個值是浮動Poing的數量

>>> 1.0/50000 
2e-05 

而如果你正在談論的變量,

>>> cnt, all = 1, 50000 
>>> float(cnt)/all 
2e-05 

乘法100以產生百分比。

2

假設您使用的是int(),那麼Python 總是向下舍入。 int(0.99999)= 0。它實際上就是在小數點後面放下零件。

如果你想要的東西更像大多數人四捨五入的意思,你可以這樣做: 「%0.0f」%(yourval,)。

這使用一個算法n,其名稱轉義我,其中數字正好在最接近的甚至數字的中間,所以0.5變成0,但1.5變成2. 0.49總是0,總是0.51 1.

2

這將將答案四捨五入到0

2

你的代碼使用整數除法地板總是舍入到零。

使用浮點除法和Python的round()內置函數獲取更多的控制權:

percentage = round((100.0*a)/sum(tally))