我有一个代码,用于创建文本文件中某些字长的百分比丰度列表,例如1个字母的单词出现在13%的时间,我想知道的是,如果在50,000个单词的文本文件中有1个20个字母的单词,它会将20个字母单词的百分比四舍五入到0或最多1个吗?
这是整个代码:
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
答案 0 :(得分:3)
默认情况下,如果分子和分母都是整数,则会截断数字。
>>> 1 / 50000
0
要解决和实际百分比,您可以将值中的一个或两个更改为浮点数
>>> 1.0 / 50000
2e-05
如果你在谈论变量,
>>> cnt, all = 1, 50000
>>> float(cnt) / all
2e-05
乘以100得到百分比。
答案 1 :(得分:2)
假设您使用的是int(),那么Python 总是向下舍入。 int(0.99999)= 0.它实际上只是丢弃小数后的部分。
如果你想要更像大多数人所说的四舍五入的东西,你可以这样做: “%0.0f”%(yourval,)。
那使用了一个算法,其名称逃脱了我,其中数字正好在中间的圆形朝向最近的偶数数字,所以0.5变为0,但1.5变为2. 0.49总是0, 0.51始终为1.
答案 2 :(得分:2)
它会将答案缩小到0。
答案 3 :(得分:2)
您的代码使用的是整数分区,它始终向零舍入。
通过使用浮点除法和Python的round()内置函数来获得更多控制:
percentage = round((100.0*a) / sum(tally))