2011-11-02 71 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))