计算字符串的百分比而不是统计数据

0 投票
2 回答
1176 浏览
提问于 2025-04-17 18:42

我想要计算文件中每个字母所占的百分比,而不是数量。我该如何修改下面的代码呢?

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]来替代。

撰写回答