计算字符串的百分比而不是统计数据
我想要计算文件中每个字母所占的百分比,而不是数量。我该如何修改下面的代码呢?
stat_file = open(filename, 'w')
one_letter = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
for letter in one_letter:
stat_file.writelines('%s : %d \n' % (letter, statistics[letter]))
提前谢谢你们!
2 个回答
1
你需要找出所有字母的总和,像这样:
letter_count=0
for letter in one_letter:
letter_count= letter_count + statistics[letter]
然后要计算百分比,你需要把你的代码改成这样:
stat_file.writelines('%s : %d %% \n' % (letter, (statistics[letter]/letter_count)*100) if statistics[letter]>0 else 0)
注意:我没有测试这个代码(这台电脑上没有安装python),但它应该能正常工作。
补充:检查一下这个字母是否出现过0次。
1
首先,总字母计数可以有两种意思:
1. 只计算one_letter
中的单词(就是你提到的'A-Z')
one_letter = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
stat = {'A': 5,
'B':3,
'C':9,
'U': 5,
'D': 9,
'a': 99}
total_count = sum(stat.get(letter, 0) for letter in one_letter) # should be 31
2. 计算你文件中的所有单词(包括'a-z'、'0-9'等)
total_count = sum(stat.values()) # should be 130
接下来,你可以通过以下方式计算百分比:
for letter in one_letter:
stat_file.writelines("%s: %f%%\n" %(letter, \
stat.get(letter, 0)/float(total_count)*100))
需要注意的是,stat.get(letter, 0)
是为了处理在stat
中可能没有所有字母的情况。
如果你确定A-Z
都在stat
中,可以用stat[letter]
来替代。