当前位置:   article > 正文

头哥作业:统计字母数量_读取附件是一篇英文短文,请编写程序统计这篇短文前 n 行中每一个英文字母出现的次

读取附件是一篇英文短文,请编写程序统计这篇短文前 n 行中每一个英文字母出现的次

统计字母数量 


任务描述

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

输入格式

输入一个正整数 n

输出格式

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

示例 1

输入: 10
输出: e 的数量是 179 个 a 的数量是 125 个 t 的数量是 121 个 h 的数量是 116 个 o 的数量是 101 个 s 的数量是 92 个 i 的数量是 91 个 n 的数量是 88 个 d 的数量是 77 个 r 的数量是 60 个 l 的数量是 49 个 f 的数量是 46 个 w 的数量是 45 个 m 的数量是 41 个 y 的数量是 40 个 u 的数量是 35 个 c 的数量是 32 个 b 的数量是 29 个 g 的数量是 20 个 k 的数量是 19 个 p 的数量是 13 个 v 的数量是 9 个 q 的数量是 1 个 x 的数量是 1 个 j 的数量是 0 个 z 的数量是 0 个


开始你的任务吧,祝你成功!

代码:

  1. def filename(text,n):
  2. with open(text,'r',encoding='utf-8') as f:
  3. global lst
  4. lst=[line.strip('\n') for line in f]
  5. def fread(long):
  6. string=''.join(long).lower()
  7. text={}
  8. for i in string:
  9. if i.isalpha():
  10. if i in text:
  11. text[i]+=1
  12. else:
  13. text[i]=1
  14. return text
  15. def re_sorted(dic):
  16. for line in 'abcdefghijklmnopqrstuvwxyz':
  17. counter=dic.get(line,0)
  18. dic[line]=counter
  19. text=dict(sorted(dic.items(),key=lambda x:(-x[1],x[0])))
  20. for i in text:
  21. print('{} 的数量是 {:>3} 个'.format(i,text[i]))
  22. text='step2/The Old Man and the Sea.txt'
  23. n=int(input())
  24. filename(text,n)
  25. dic=fread(lst[:n])
  26. re_sorted(dic)

这是一个使用 Python 编写的程序,它可以从文本文件中读取前 n 行,然后统计每个英文字母出现的次数,并按次数降序排列,次数相同时,按字母表顺序输出。

这个程序定义了三个函数:`filename`,`fread` 和 `re_sorted`。

filename:按要求读取文件的前n行,注意使用了全局变量lst,结果输出是一个字符串。可以用print(lst)验证。

fread:读取第一个函数定义全局变量lst,将字符串变为字典形式。用来统计这个字符串所有字母出现的次数。并最后返回字典结果。

re_sorted:使用第二个函数得到的字典结果,用dic表示。接着遍历26个英文字母,使用get方法得到每一个字母所对应的个数,若出现不存在的字母,则返回字母个数为0,最后将所得到的个数返回给counter变量。再使用dic[line],将键值line对应的value值修改为counter的个数。(可以理解为是在字典里面添加当中有些字母没有的26个字母)。再然后,这个函数会按照出现次数对字典进行倒序排序,并按照格式输出每个字母及其出现次数。

需要掌握字典的用法:

在 Python 中,字典是一种可变的、无序的、可迭代的数据类型,它存储键值对。字典中的键必须是唯一的,而值可以是任意类型的数据。你可以使用大括号 {} 或 dict() 函数来创建一个空字典,也可以使用大括号 {} 来创建一个非空字典。

  1. 用法举例:
  2. # 创建一个非空字典
  3. d = {'a': 1, 'b': 2, 'c': 3}
  4. # 获取键为 'a' 的值
  5. print(d.get('a')) # 输出: 1
  6. # 获取键为 'd' 的值,如果不存在则返回默认值 0
  7. print(d.get('d', 0)) # 输出: 0

1.统计短文里出现的每个字母的次数。

  1. text={}
  2. for i in string: //string是我们得到的短文信息
  3. if i.isalpha(): //判断i是否是字母
  4. if i in text:
  5. text[i]+=1 //就比如是text['a'],它相当于在text这个空字典里面添加了{‘a’:1}
  6. else:
  7. text[i]=1
  8. //注意:text[i]代表的键i对应的值。若字典不存在i,它会先创建一个键i,再执行赋值语句。
  9. 比如说:
  10. 我们要得到text的所有键,则输入:[i for i in text]
  11. 如果要得到text的所有值,则输入:[text[i] for i in text]

2.输出字典(改变字典的键,输出对应值的结果)

  1. 在上一个代码的基础上输出:   
  2. for i in text:
  3.         print('{}的数量是{:>3}个'.format(i,text[i]))
  4. text是一个字典,i表示键,text[i]表示值。

3.对字典进行排序(重点)

有两种方式,一种是按键排序,另一种是按值排序。

我们首先介绍按值排序:dic是字典

 text=dict(sorted(dic.items(),key=lambda x:x[1],reverse=True))

这行代码使用了 `sorted` 函数和 `dict` 函数来对字典 `dic` 中的键值对进行排序,并创建一个新的字典。

`sorted` 函数接受一个可迭代对象作为参数,并返回一个新的排序后的列表。在这个例子中,`sorted` 函数的参数是 `dic.items()`,它返回一个包含字典中所有键值对的视图对象。每个键值对都是一个元组,第一个元素是键,第二个元素是值。

`sorted` 函数还接受一个可选参数 `key`,它指定了排序的依据。在这个例子中,`key` 参数的值是一个 lambda 函数,它接受一个参数 `x`(表示字典中的一个键值对),并返回 `x[1]`(表示字典中键对应的值)。这意味着 `sorted` 函数会按照字典中每个键对应的值进行排序。

`sorted` 函数还接受一个可选参数 `reverse`,它指定了排序的顺序。如果 `reverse` 的值为 `True`,则按照降序排列;否则按照升序排列。在这个例子中,`reverse` 的值为 `True`,所以 `sorted` 函数会按照降序排列。

最后,这行代码使用 `dict` 函数将排序后的列表转换为一个新的字典,并将其赋值给变量 `text`。

总之,这行代码的作用是按照字典 `dic` 中每个键对应的值进行降序排列,并创建一个新的字典。

对键的排序和上一种差不多的方式,将x[1]改为x[0]就可以了。

再看一下这种方式,对键和值都进行排序:

    text=dict(sorted(dic.items(),key=lambda x:(-x[1],x[0])))

关键在于可选参数key的定义:它返回一个元组(-x[1],x[0]),则代表 `sorted` 函数会先按照字典中每个键对应的值(取负数)进行排序,然后按照字典中的键进行排序。

因为元组的第一个参数使用负数,则表示降序排列值;第二个参数为正数,则表示升序排列键。

而又因为第一个参数的排列在前面,所以我们要先按照降序排列好值,再然后看第二个参数(就是在一个参数有相同的值的时候,就使用第二个参数的方法进行排序)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/827684
推荐阅读
相关标签
  

闽ICP备14008679号