考生文件夹下存在两个Python源文件“PY30H.py”和“PY301-2.py”,分别对应两个问题,请按照文件内说明修改代码,实现以下功能。 《傲慢与偏见》是史上最震撼人心的“世界文学十部最佳小说之一”。第1章的内容由考生文件夹下文件“arrogant

admin2021-03-16  35

问题 考生文件夹下存在两个Python源文件“PY30H.py”和“PY301-2.py”,分别对应两个问题,请按照文件内说明修改代码,实现以下功能。
《傲慢与偏见》是史上最震撼人心的“世界文学十部最佳小说之一”。第1章的内容由考生文件夹下文件“arrogant.txt”给出。
问题1:请编写程序,统计该篇文章的英文字符数(不统计换行符),字符与出现次数之间用冒号(:)分隔。结果保存在考生文件夹下,命名为“PY301-1.txt”。
试题程序:
#以下代码为提示框架
#请在程序的…处使用一行或多行代码替换
#请在程序的________处使用一行代码替换
#注意:提示框架的代码可以任意修改,以完成程序功能为准

d={}


ls=1ist(d.items())

   
fo.write("{}:{}\n".format(________,________))

问题2:在问题1的前提下。将得到的字符次数进行降序排列,并将排名前10的常用字符保存在“arrogantsort.txt”文件中。
试题程序:
#以下代码为提示框架
#请在程序的…处使用一行或多行代码替换
#请在程序的________处使用一行代码替换
#注意:提示框架的代码可以任意修改,以完成程序功能为准

d={}

  
ls=1ist(d.items())
ls.sort(key=lambda x:x[1].reverse=True)

fo.write("{}:{}\n".format(________,________))

选项

答案(1)fi=open("arrogant.txt","r") fo=open("PY301-1.txt","w") txt=fi.read() d={} for s in txt: d[s]=d.get(s,0)+1 del d[\n’] ls=list(d.items()) for i in range(len(ls)): fo.write("{}:{}\n".format(ls[i][0],ls[i][1])) fi.close() fo.close() (2)fi=open("arrogant.txt","r") fo=open("arrogant-sort. txt","w") txt=fi.read() d={} for s in txt: d[s]=d.get(s,0)+1 del d[’\n’] ls=list(d.items()) ls.sort( key=lambda x:x[1],reverse=True) for i in range(10): fo.write("{}:{}\n".format(ls[i][0],ls[i][1])) fi.close() fo.close()

解析 (1)首先使用open()函数打开文件“arrogant.txt”,把文件的内容通过read()方法保存到变量txt中;然后用for循环遍历txt中的每个英文字符,将该字符作为字典d中的键,将该键所对应的值设置为1,在后面循环中只要遍历的字符与该键相同,就将该键对应的值加1。这样,字典中的键值对对应着英文字符和其出现的次数。由于题目要求不统计换行符,因此需要使用del删除换行符对应的键值对。
ls=list(d.items())表示将字典类型变成列表类型,字典中的每个键值对对应列表中的一个元组。每个元组中的第一个元素ls[0]表示英文字符,第二个元素ls[1]表示字符出现的次数。通过for循环遍历按照格式规则将两个对应的元素写入文件“PY301-1.txt”。
(2)问题2在问题1的基础上增加了排序,排序的规则是按照字符出现的次数降序排序,因此排序后列表中前10个元素(元组)就是排名前10的字符。通过for循环遍历按照格式规则将这10个元素写入文件“arrogant-sort.txt”中。
转载请注明原文地址:https://kaotiyun.com/show/IS6p777K
0

最新回复(0)