描述

读取附件是一篇英文短文,请编写程序统计这篇短文前 n 行中每一个英文字母出现的次数,结果按次数降序排列,次数相同时,按字母表顺序输出。若 n 值大于短文行数,输出整篇文章中每一个英文字母出现的次数(大写字母按小写字母统计)。

输入格式

输入一个正整数 n

输出格式

分行输出每个字母的数量,数量占3个字符宽度,居右对齐(参考示例输出)

定义一个函数,以文件名和以读取的行数n为参数,读取文件的前n行,把每行的字符串中的大写字母转为小写,再加入到一个列表中。

  1. def openFile(filename,n):
  2. with open(filename,'r',encoding='utf-8') as data:
  3. txt = [data.readline().lower() for i in range(n)]
  4. return txt

以从文件中读取到的列表为参数,把列表中的元素拼接为一个字符串,遍历小写字母,统计每个字母在字符串中出现的次数加入列表或字典,本文使用字典存储。

  1. def statistics(txt,s):
  2. mystr = ' '.join(txt)
  3. dic = {x:mystr.count(x) for x in s}
  4. ls = sorted(dic.items(),key=lambda item:(-item[1],item[0]))
  5. return ls

完整参考代码如下:

  1. def openFile(filename,n):
  2. with open(filename,'r',encoding='utf-8') as data:
  3. txt = [data.readline().lower() for i in range(n)]
  4. return txt
  5. def statistics(txt):
  6. mystr = ' '.join(txt)
  7. dic = {x:mystr.count(x) for x in s}
  8. ls = sorted(dic.items(),key=lambda item:(-item[1],item[0]))
  9. return ls
  10. if __name__ == '__main__':
  11. s = 'abcdefghijklmnopqrstuvwxyz'
  12. file = 'The Old Man and the Sea.txt'
  13. n = int(input())
  14. txt = openFile(file,n)
  15. ls = statistics(txt)
  16. for x in ls:
  17. print('{} 的数量是 {:>3} 个'.format(x[0], x[1]))