1
《命运》是著名科幻作家倪匡的作品。这里给出《命运》的一个网络版本文件,文件名为“命运. txt”。
问题1 (5分) :在PY301-1. py文件中修改代码,对“命运. txt”文件进行字符频次统计,输出频次最高的中文字符(不包含标点符号)及其频次,字符与频次之间采用英文冒号”:”分隔,示例格式如下:
的:2557
f = open('命运.txt','r') txt = f.read() d = {} for i in txt: if i not in ",。?!《》【】“”‘’": d[i] = d.get(i,0)+1 ls = list(d.items()) ls.sort(key=lambda x:x[1],reverse = True) print("{}:{}".format(ls[0][0],ls[0][1])) f.close()
问题2 (5分) :在PY301-2. py文件中修改代码,对“命运. txt”文件进行字符频次统计,按照频次由高到低,屏幕输出前10个频次最高的字符,不包含回车符,字符之间无间隔,连续输出,示例格式如下:
,的"一我了。是不有
f = open('命运.txt','r') txt = f.read() d = {} for i in txt: if i not in '\n': d[i] = d.get(i,0)+1 ls = list(d.items()) ls.sort(key=lambda x:x[1], reverse=True) # 此行可以按照词频由高到低排序 for k in range(10): print(ls[k][0],end='') f.close()
问题3 (10分) :在PY301-3. py文件中修改代码,对“命运. txt”文件进行字符频次统计,将所有字符按照频次从高到低排序,字符包括中文、标点、英文等符号,但不包含空格和回车。将排序后的字符及频次输出到考生文件夹下,文件名为“命运-频次排序. txt”。字符与频次之间采用英文冒号”:”分隔,各字符之间采用英文逗号”,”分隔,参考CSV格式, 最后无逗号,文件内部示例格式如下:
理:224,斯:120,卫:100
f = open('命运.txt','r') fi = open('命运-频次排序.txt','w') txt = f.read() d = {} for i in txt: if i not in '\n': d[i] = d.get(i,0)+1 ls = list(d.items()) ls.sort(key=lambda x:x[1], reverse=True) # 此行可以按照词频由高到低排序 s="" for k in ls: s+="{}:{}".format(k[0],k[1])+',' fi.write(s[:-1]) f.close() fi.close()
2
下面所示为一套由公司职员随身佩戴的位置传感器采集的数据,文件名称为“sensor.txt”,其内容示例如下:
2016/5/31 0:05, vawelon001, 1, 1
2016/5/31 0:20, earpa001, 1,1
2016/5/31 2:26, earpa001,1, 6
... (略)
第一列是传感器获取数据的时间,第二列是传感器的编号,第三列是传感器所在的楼层,第四列是传感器所在的位置区域编号。
问题1 (10分) :在PY301-1. py文件中修改代码,读入sensor. txt文件中的数据,提取出传感器编号为earpa001的所有数据,将结果输出保存到“earpa001. txt”文件。输出文件格式要求:原数据文件中的每行记录写入新文件中,行尾无空格,无空行。参考格式如下:
2016/5/31 7:11, earpa001,2, 4
2016/5/31 8:02, earpa001,3, 4
2016/5/31 9:22, earpa001,3,4
... (略)
f = open('sensor.txt','r',encoding='utf-8') fo = open('earpa001.txt','w') ls = f.readlines() for line in ls: lt = line.strip('\n').split(',') if lt[1] == ' earpa001': fo.write('{},{},{},{}\n'.format(lt[0],lt[1],lt[2],lt[3])) f.close() fo.close()
问题2 (10分) :在PY301-2. py文件中修改代码,读入“earpa001. txt” 文件中的数据,统计earpa001对应的职员在各楼层和区域出现的次数,保存到“earpa001_count. txt” 文件,每条记录一 行,位置信息和出现的次数之间用英文半角逗号隔开,行尾无空格,无空行。参考格式如下。
1-1,5
1-4, 3
... (略)
含义如下:
第1行“1-1,5”中1-1表示1楼1号区域,5表示出现5次;
第2行“1-4,3”中1-4表示1楼4号区域,3表示出现3次;
f = open('earpa001.txt','r',encoding = 'utf-8') fo = open('earpa001_count.txt','w') ls = f.readlines() d = {} for line in ls: lt = line.strip('\n').split(',') key = lt[2]+'-'+lt[3] d[key] = d.get(key,0)+1 ls = list(d.items()) ls.sort(key=lambda x:x[1], reverse=True) # 该语句用于排序 for k in ls: fo.write('{},{}\n'.format(k[0],k[1])) f.close() fo.close()
3
《论语》是儒家学派的经典著作之一,主要记录了孔子及其弟子言行。这里给出了一个网络版本的《论语》,文件名称为“论语.txt”,其内容采用逐句“原文”与逐句“注释”相结合的形式组织,通过【原文】标记《论语》原文内容,通过【注释】标记《论语》注释内容,具体文件格式框架请参考“论语.txt”文件。
问题1(10分):在PY301-1.py文件中修改代码,提取“论语.txt”文件中的原文内容,输出保存到考生文件夹下,文件名为“论语-原文.txt”。具体要求:仅保留“论语.txt”文件中所有【原文】标签下面的内容,不保留标签,并去掉每行行首空格及行尾空格,无空行。原文小括号及内部数字是源文件中注释项的标记,请保留。
fi = open("论语.txt", 'r') fo = open("论语-原文.txt", 'w') flag = False for line in fi: if '【原文】' in line: flag = True continue if '【注释】' in line: flag = False line = line.strip(" \n") if flag == True: if line: fo.write(line+'\n') fi.close() fo.close()
问题2(10分):在PY301-2.py文件中修改代码,对“论语-原文.txt”或“论语.txt”文件进一步提纯,去掉每行文字中所有小括号及内部数字,保存为“论文-提纯原文.txt”文件。示例输出文件格式请参考“论语-提纯原文-输出示例.txt”文件。
fi = open("论语-原文.txt", 'r') fo = open("论语-提纯原文.txt", 'w') for line in fi: for i in range(23): line=line.replace('('+str(i)+')','') fo.write(line) fi.close() fo.close()
fi = open("论语-原文.txt", "r") fo = open("论语-提纯原文.txt", "w") for line in fi: for i in range(0,30): line=line.replace('({})'.format(i),'') fo.write(line) fi.close() fo.close()
4
二千多年前希腊的天文学家希巴克斯命名十二星座,它们是水瓶座、双鱼座、白羊座、金牛座、双子座、巨蟹座、狮子座、处女座、天秤座、天蝎座、射手座、摩羯座。给出一个CSV文件(PY301-SunSign.csv),内容示例如下:
序号,星座,开始月日,结束月日,Unicode
1,水瓶座,120,218,9810
2,双色座,219,320,9811
3,白羊座,321,419,9800
4,金牛座,420,520,9801
5,双子座,521,621,9802
…(略)
以第1行为例,120表示1月20日,218表示2月18日,9810是Unicode码。
问题1(5分):在PY301-1.py文件中修改代码,读入CSV文件中数据,获得用户输入。根据用户输入的星座名称,输出此星座的出生日期范围。
参考输入和输出示例格式如下:
请输入星座中文名称(例如,双子座):双子座
双子座的生日位于521-621之间
f = open('PY301-SunSign.csv','r') ls = [] s = input('请输入星座中文名称(例如,双子座):') for line in f.readlines(): ls = line.strip('\n').split(',') if ls[1] == s: print("{}的生日位于{}-{}之间".format(ls[1],ls[2],ls[3])) f.close()
问题2(10分):在PY301-2.py文件中修改代码,读入CSV文件中数据,获得用户输入。用户键盘输入一组范围是1-12的整数作为序号,序号间采用空格分隔,以回车结束。屏幕输出这些序号对应的星座的名称、字符编码以及出生日期范围,每个星座的信息一行。本次屏幕显示完成后,重新回到输入序号的状态。
参考输入和输出示例格式如下:
请输入星座序号(例如,5):5 10
双子座(9802)的生日是5月21日至6月21日之间
天蝎座(9807)的生日是10月24日至11月22日之间
请输入星座序号(例如,5):
f = open('PY301-SunSign.csv','r') ls = [] ls = f.readlines() while True: s = input('请输入星座序号(例如,5):') for i in s.split(): for line in ls: lt = line.strip('\n').split(',') if i == lt[0]: print("{}({})的生日是{}月{}日至{}月{}日之间".format(lt[1],lt[4],lt[2][:-2],lt[2][-2:],lt[3][:-2],lt[3][-2:])) f.close()
问题3(5分):在问题2的基础上,在PY301-3.py文件中修改代码,对键盘输入的每个序号做合法性处理。如果输入的数字不合法,请输出“输入星座编号有误!”,継纹输出后续信息,然后重新回到输入序号的状态。
参考输入和输出示例格式如下:
请输入星座序号(例如,5):5 14 11
双子座(9802)的生日是5月21日至6月21日之间
输入星座序号有误!
射手座(9808)的生日是11月23日至12月21日之间
请输入星座序号(例如,5):
f = open('PY301-SunSign.csv','r') ls = [] ls = f.readlines() while True: s = input('请输入星座序号(例如,5):') for i in s.split(): if 0<int(i)<13: flag = True else: flag = False for line in ls: lt = line.strip('\n').split(',') if i == lt[0]: print("{}({})的生日是{}月{}日至{}月{}日之间".format(lt[1],lt[4],lt[2][:-2],lt[2][-2:],lt[3][:-2],lt[3][-2:])) break if flag == False: print("输入星座序号有误!") f.close()
5
、《三国演义》是中国古典四大名著之一,曹操是其中主要人物,考生文件夹文件data.txt给出《三国演义》简介。
问题1:请编写程序,用Python语言中文分词第三方库jieba对文件data.txt行分词,并将结果写入文件out.txt,每行一个词,例如:
内容简介
编辑
整个
故事
在
东汉
...
在考生文件夹下给出了程序框架文件PY301-1.py,补充代码完成程序(10分)
问题2:对文件out.txt进行分析,打印输出曹操出现次数。
6
问题1:(10分)在考生文件夹下给出了程序框架文件PY301-1.py,补充代码完成程序。用Python语言中文分词第三方库jieba对文件data.txt进行分词,并选择长度大于等于3个字符的关键词,写入文件out1.txt,每行一个关键词,各行的关键词不重复,输出顺序不做要求,例如:
人工智能
科幻小说
...
import jieba f = open('data.txt','r') lines=f.readlines() f.close() D=[] for line in lines: wordList=jieba.lcut(line)#用结巴分词,对每行内容进行分词 for word in wordList: if len(word)<3: #判断词长度,要大于等于3个长度 continue else: if word not in D: D.append(word) f=open('out1.txt','w') f.writelines('\n'.join(D)) f.close()
问题2:(10分)在考生文件夹下给出了程序框架文件PY301-2.py,补充代码完成程序。对文件data.txt进行分词,对长度不少于3个字符的关键词,统计出现的次数,按照出现次数由大到小的顺序输出到文件out2.txt,每行一个关键词及其出现次数,例如:
科学家:2
达特茅斯:1
...
import jieba f=open("data.txt","r") lines=f.readlines() f.close() d = {} for line in lines: wordList=jieba.lcut(line) #用结巴分词,对每行内容进行分词 for word in wordList: if len(word)<3: continue else: d[word]=d.get(word,0)+1 ls=list(d.items()) ls.sort(key=lambda x:x[1],reverse=True)#按照词频由高到低排序 f=open('out2.txt','w') for i in range(len(ls)): f.write('{}:{}\n'.format(ls[i][0],ls[i][1])) f.close()
7
某班学生评选一等奖学金,学生的10门主干课成绩存在考生文件夹下文件score.txt中,每行为一个学生的信息,分别记录了学生学号、姓名以及10门课成绩,格式如下:
1820161043 郑珉镐 68 66 83 77 56 73 61 69 66 78
1820161044 沈红伟 91 70 81 91 96 80 78 91 89 94
……
从这些学生中选出奖学金候选人,条件是:1)总成绩排名在前10名;2)全部课程及格(成绩大于等于60)。
问题1:给出按总成绩从高到低排序的前10名学生名单,并写入文件candidate0.txt,每行记录一个学生的信息,分别为学生学号、姓名以及10门课成绩。补充考生文件夹下文件PY301-1.py,完成这一功能。
# 请在...处使用多行代码替换 # # 注意:其他已给出代码仅作为提示,可以修改 D=[] L=[] #L中的元素是学生原始成绩和总成绩 f=open("score.txt","r") fo=open("candidate0.txt","w") for line in f.readlines(): D=line.split() s=0 for i in range(10): s+=eval(D[i+2]) D.append(s) L.append(D) L.sort(key=lambda x:x[-1],reverse=True) #按学生总成绩从大到小排序 for i in range(10): for j in range(len(L[i])-1): fo.write("{}".format(L[i][j])) fo.write("\n") fo.close()
问题2:读取文件candidate0.txt,从中选出候选人,并将学号和姓名写入文件candidate.txt格式如下:
1010112161722 张三
1010112161728 李四
''' 输入文件 : candidate0.txt 输出文件 : candidate.txt ''' fi = open('candidate0.txt','r') fo = open('candidate.txt','w') ls = fi.readlines() for line in ls: lt = line.split() for i in lt[2:]: if int(i)<60: break else: fo.write(' '.join(lt[:2])+'\n') fi.close() fo.close()
8
问题1:请编写程序,从data.txt中提取大学或机构名称列表,将结果写入文件univ.txt,每行一个大学或机构名称,按照大学或机构在data.txt出现的先后顺序输出,样例如下:
…
北京理工大学
…
北京师范大学
…
提示:所有大学名称在data.txt文件中以alt="北京理工大学"形式存在。在考生文件夹下给出了程序框架文件PY301-1.py,补充代码完成程序(10分)
# 请在______处使用一行或多行代码替换 # # 注意:其他已给出代码仅作为提示,可以修改 f=open("data.txt","r") lines=f.readlines() f.close() f = open("univ.txt", "w") for line in lines: if 'alt' in line: #判断是否有alt,若有则用'alt'分割,分割后再用'"'分割 dx=line.split('alt=')[-1].split('"')[1] f.write('{}\n'.format(dx)) f.close()
问题2:请编写程序,从univ.txt文件中提取大学名称,大学名称以出现“大学”或“学院”字样为参考,但不包括“大学生”等字样,将所有大学名称在屏幕上输出,大学各行之间没有空行,最后给出名称中包含“大学”和“学院”的名称数量,同时包含“大学”和“学院”的名称以结尾的词作为其类型。样例如下(样例中数量不是真实结果):
…
北京理工大学
…
长沙师范学院
…
包含大学的名称数量是10
包含学院的名称数量是10
# 请在______处使用一行或多行代码替换 # # 注意:其他已给出代码仅作为提示,可以修改 n = 0 m=0 f = open("univ.txt", "r") lines=f.readlines() f.close() for line in lines: if '大学生' in line: continue elif '大学' in line: print('{}'.format(line)) n+=1 elif '学院' in line: print('{}'.format(line)) m+=1 print("包含大学的名称数量是{}".format(n)) print("包含学院的名称数量是{}".format(m))
9
2个文本文件分别摘自2019年和2018年的政府工作报告。请分别补充2个Python源文件,实现以下功能。
问题1(10分):数据统计。要求:修改PY301-1.py文件中代码,分别统计两个文件中出现次数最多的10词语,作为主题词,要求词语不少于2个字符,打印输出在屏幕上,输出示例如下:(示例词语非答案)
2019:改革:10,企业:9,…(略),深化:2
2018:改革:11,效益:7,…(略),深化:1
注意:输出格式采用英文冒号和英文逗号,标点符号前后无空格,各词语间用逗号分隔,最后一个词语后无逗号。
# # 以下代码仅供参考。 # import jieba fa=open("data2019.txt","r") txt=fa.read() fa.close() words=jieba.lcut(txt) d = {} for word in words: if len(word)==1: continue else: d[word]=d.get(word,0)+1 lt = list(d.items()) lt.sort(key = lambda x:x[1],reverse = True) print("2019:",end="") for i in range(10): word,count=lt[i] if i<9: print("{}:{}".format(word,count),end=",") else: print("{}:{}".format(word,count)) fa=open("data2018.txt","r") txt=fa.read() fa.close() words=jieba.lcut(txt) d = {} for word in words: if len(word)==1: continue else: d[word]=d.get(word,0)+1 lt = list(d.items()) lt.sort(key = lambda x:x[1],reverse = True) print("2018:",end="") for i in range(10): word,count=lt[i] if i<9: print("{}:{}".format(word,count),end=",") else: print("{}:{}".format(word,count))
问题2(10分):数据关联。要求:修改PY301-2.py文件中代码,对比两组主题词的差异,输出两组的共有词语和分别的特有词语。输出示例如下:(示例词语非答案)
共有词语:改革,…(略),深化
2019特有:企业,…(略),加强
2018特有:效益,…(略),创新
# # 以下代码仅供参考。 #求2019中的10个主题词,存于da import jieba fa=open("data2019.txt","r") txt=fa.read() fa.close() words=jieba.lcut(txt) d = {} for word in words: if len(word)==1: continue else: d[word]=d.get(word,0)+1 lt = list(d.items()) lt.sort(key = lambda x:x[1],reverse = True) da={} for i in range(10): da[i]=lt[i][0] #求2018中的10个主题词,存为db fa=open("data2018.txt","r") txt=fa.read() fa.close() words=jieba.lcut(txt) d = {} for word in words: if len(word)==1: continue else: d[word]=d.get(word,0)+1 lt = list(d.items()) lt.sort(key = lambda x:x[1],reverse = True) db={} for i in range(10): db[i]=lt[i][0] #求m个共有词存入gy,并将da、db中原共有的改为空 gy={} m=0 for i in range(10): for j in range(10): if da[i]==db[j]: gy[m]=da[i] da[i]="" db[j]="" m=m+1 break print("共有词语:",end="") for i in range(m): if i<m-1: print("{}".format(gy[i]),end="") else: print("{}".format(gy[i])) print("2019特有:",end="") j=0 for i in range(10): if da[i]!="": if j<10-m-1: print("{}".format(da[i]),end=",") else: print("{}".format(da[i])) j=j+1 print("2018特有:",end="") j=0 for i in range(10): if db[i]!="": if j<10-m-1: print("{}".format(db[i]),end=",") else: print("{}".format(db[i])) j=j+1
文本文件“data.txt”中包含一篇从互联网上下载的关于“德国工业4.0战略规划实施建议摘要”的文章。请分别补充2个Python源文件,完成以下功能。
问题1(10分):文件内容清洗。要求:在文件PY301-1.py中补充代码,对文件data.txt的内容进行清理,去除中文标点符号,换行符和中英文空格,只保留中文、英文、数字、英文标点符号等字符,将结果输出到文件clean.txt中。示例如下:
德国工业4.0战略计划实施建议摘编机械工业信息研究院战略与规化研究所一德国实施工业…(略)
问题2(10分):提取主题词及其出现频次。要求:在文件PY301-2.py中补充代码,提取clean.txt文件中长度不少于3个字符的词语并统计词频,将词频最高的10个词语作为主题词,并将主题词及其频次输出到屏幕。示例如下:
4.0:10,制造业:9,…(略)
import jieba f=open('clean.txt','r') d = {} for line in f.readlines(): wo=jieba.lcut(line) for word in wo: if len(word)<3: continue else: d[word]=d.get(word,0)+1 lt = list(d.items()) lt.sort(key = lambda x:x[1],reverse = True) for i in range(10): if i==9: print("{}:{}".format(lt[i][0],lt[i][1])) else: print("{}:{}".format(lt[i][0],lt[i][1]),end=",")
11(太难了,可以再看一下代码认识认识)
考生文件夹下存在2个文本文件,文本文件“红楼梦. txt”中包含了《红楼梦》小说前20章内容,“ 停用词. txt”包含了需要排除的词语。请修改模板,实现以下功能
1、对“红楼梦. txt”中文本进行分词,并对人物名称进行归一化处理,仅归一化以下内容:
凤姐、凤姐儿、凤丫头归一为凤姐
宝玉、二爷、宝二爷归一为宝玉
黛玉、颦儿、林妹妹、黛玉道归一为黛玉
宝钗、宝丫头归一为宝钗
贾母、老祖宗归一为贾母
袭人、袭人道归一为袭人
贾政、贾政道归一为贾政
贾链、琏二爷归一为贾琏
2、不统计“停用词.txt"文件中包含词语的词频。
3、提取出场次数不少于40次的人物名称,将人物名称及其出场次教按照递减排序,保存到result.csv文件中,出场次数相同的.则按照人物名称的字符顺序排序。
输出示例
宝玉,597
凤姐,296
一个,179
如今,132
黛玉,113
一面,112
# 以下代码为提示框架 # 请在...处使用一行或多行代码替换 # 请在______处使用一行代码替换 # # 注意:提示框架代码可以任意修改,以完成程序功能为准 import jieba f = "红楼梦.txt" sf = "停用词.txt" txt = jieba.lcut(open(f, 'r', encoding = 'utf-8').read()) stop_words = [] with open(sf, 'r', encoding = 'utf-8') as f: for i in f.read().splitlines(): stop_words.append(i) #剔除停用词 txt0 = [x for x in txt if x not in stop_words] #统计词频 counts = {} for word in txt0: if len(word) == 1: continue elif word == '凤姐儿' or word == '凤丫头': rword = '凤姐' elif word == '二爷' or word == '宝二爷': rword = '宝玉' elif word == '颦儿' or word == '林妹妹' or word == '黛玉道': rword = '黛玉' elif word == '宝丫头': rword = '宝钗' elif word == '老祖宗': rword = '贾母' elif word == '袭人道': rword = '袭人' elif word == '贾政道': rword = '贾政' elif word == '琏二爷': rword = '贾琏' else: rword = word counts[rword] = counts.get(rword,0) + 1 li = list(counts.items()) li.sort(key=lambda x:x[1], reverse=True) print(li) #列出词频超过40的结果 with open(r'result.csv','a', encoding = 'gbk') as f: for i in li: key,value = i if value < 40: break f.write(key + ',' + str(value) + '\n') print(key + ',' + str(value))
13(前两题会)
data.txt 是由学生信息构成的数据文件,每行是一个学生的相关信息, 包括姓名、班级和分数。
姓名和其他信息之间用英文冒号隔开,班级和分数之间用英文逗号隔开,班级由“系名+班级序号"组成,如“计算 191"。
本题作答第一问
读取 data.txt,输出学生的姓名和分数到文件 studs.txt,每行一条记录,姓名和分数用
英文冒号隔开,示例如下:
示例输入:
王一:计算 191,340
张二:经济 191,450
...(略)
输出:
王一:340
李四:450
...(略)
#
# 请在此文件作答
#f_data = open('data.txt', 'r')
f_studs = open('studs.txt', 'w')
for line in f_data.readlines():
a=line.split(':')[0]
b=line.split(':')[1].split(",")[1]
f_studs.write("{}:{}".format(a,b))
f_data.close()
f_studs.close()
本题作答第二问
选出分数最高的学生,打印输出学生的姓名和分数,中间用英文冒号隔开,示例如下:
李四:450
示例输入:
王一:计算 191,340
张二:经济 191,450
...(略)
输出:
李四:450
#
# 请在此文件作答
#f_data = open('data.txt', 'r')
l=[]
for line in f_data.readlines():
a=line.split(':')[0]
b=line.split(':')[1].split(",")[1]
l.append((a,b))
l.sort(key=lambda x:x[1],reverse=True)
print("{}:{}".format(l[0][0],l[0][1]))
f_data.close()
本题作答第三问
计算每个班级的平均分,打印输出班级和平均分,平均分小数点后保留 2 位,中间用英文冒
号隔开,示例如下:
示例输入:
王一:计算 191,340
张二:经济 191,450
...(略)
输出:
计算 191:447.55
经济 191:460.08
#
# 请在此文件作答
#
f_data = open('data.txt', 'r')
d={}
for line in f_data.readlines():
a=line.split(':')[1].split(",")[0]
b=eval(line.split(':')[1].split(",")[1])
d[a]=d.get(a,[])+[b]
for i in d.items():
print("{}:{:.2f}".format(i[0],sum(i[1])/len(i[1])))
f_data.close()
结果
我的答案
# # 请在此文件作答 # f_data = open('data.txt', 'r') f_studs = open('studs.txt', 'w') for line in f_data.readlines(): w=line.split(':') ww=w[1].split(',') f_studs.write("{}:{}\n".format(w[0],ww[1])) f_data.close() f_studs.close() # # 请在此文件作答 # f_data = open('data.txt', 'r') l={} for line in f_data.readlines(): w=line.split(':') ww=w[1].split(',') l[w[0]]=l.get(ww[1],ww[1]) ls=list(l.items()) ls.sort(key=lambda x:x[1],reverse=True) print("{}:{}".format(ls[0][0],ls[0][1])) f_data.close() f_data = open('data.txt', 'r') l = {} lnum = {} for line in f_data: w = line.strip().split(':') ww = w[1].split(',') subject_class = ww[0] score = float(ww[1]) # 更新分数列表 if subject_class in l: l[subject_class].append(score) else: l[subject_class] = [score] # 更新班级出现次数 lnum[subject_class] = lnum.get(subject_class, 0) + 1 # 计算平均分并打印 for subject_class in l: average_score = sum(l[subject_class]) / lnum[subject_class] print("{}:{:.2f}".format(subject_class, average_score)) f_data.close()
12不会做
其中,文本文件“八十天环游地球.txt”是法国作家儒勒. 凡尔纳《八十天环游地球》长篇小说的网络版本,请修改源文件实现以下功能。
问题1:提取章节题目并输出到文件。
要求:在模板中补充代码, 提取“八十天环游地球. txt” 中所有章节的题目,并且将提取后的题目输出到“八十天环游地球-章节. txt"文件中,每行一个标题,示例如下:
第一章 斐利亚·福克和路路通建立主仆关系
第二章 路路通认为他总算找到了理想的工作
第三章 一场可能使福克先生破财的争论
第四章 斐利亚·福克把路路通吓得目瞪口呆
第五章 伦敦市场上出现了一种新的股票
问题2:统计每章节的高频词并打印输出。
要求:在模板补充代码,统计“八十天环游地球. txt”中每一章的标题和内容中,出现次数最多的词语(词语长度不少于2个字符)及其次数,输出格式为章节名、 词语及其出现的次数,以空格分隔,示例如下:
第一章 福克 26
第二章 路路通 18
第三章 福克 27
第四章 福克 28
第五章 福克 31
# 以下代码为提示框架 # 请在...处使用一行或多行代码替换 # 请在______处使用一行代码替换 # # 注意:提示框架代码可以任意修改,以完成程序功能为准 f = open("八十天环游地球.txt", encoding="utf-8") # 读取源文件 fi = open("八十天环游地球-章节.txt", "w", encoding="utf-8") # 打开新文件 for i in f: # 遍历文本 text = i.split(" ")[0] # 章节中有空格进行分割 例如:第二章 路路通认为他总算找到了理想的工作 if text[0] == "第" and text[-1] == "章": # 取出第一段文本,如果首字符是第尾字符是章,代表是章节 fi.write("{}\n".format(i.replace("\n", ""))) # 格式化保存 fi.close() f.close()
# 以下代码为提示框架 # 请在...处使用一行或多行代码替换 # 请在______处使用一行代码替换 # # 注意:提示框架代码可以任意修改,以完成程序功能为准 import jieba f1 = open("八十天环游地球.txt",'r',encoding="utf-8") ls = f1.read().split('□ 作者:儒勒·凡尔纳') f1.close() Ls1 = [] for i in range(len(ls)-1): d = {} lt = jieba.lcut(ls[i]) for word in lt: if 2 <= len(word): d[word] = d.get(word,0)+1 items = list(d.items()) items.sort(key = lambda x:x[1],reverse = True) Ls1.append(items[0]) f2 = open('八十天环游地球-章节.txt','r',encoding = 'utf-8') Ls0 = [] for line in f2.readlines(): Ls0.append(line.strip('\n').split(' ')[0]) for j in range(len(Ls0)): print('{} {} {}'.format(Ls0[j],Ls1[j][0],Ls1[j][1])) f2.close()
14第一题很简单,第二题懒得做
webpage.txt保存了某网站一个网页的HTML格式源代码。在该文件中,JPG图片以一个完整的URL表示,示例如下:
<a href="/photography/picture_story/6088.html">
<img src="http://image.ngchina.com.cn/2019/538.JPG"/>
</a>
其中,<a>与</a>是一对组合,表示包含一个URL链接;<img ...(略) .../>表示包含一个JPG图像文件的URL,每个URL用src=开头,以JPG图像文件名结束,如538.JPG表示JPG图像文件。
在考生文件夹编程实现如下功能
本题作答第一问
(1)统计并打印输出该页面中JPG图像文件的URL数量。注意,JPG扩展名都是大写字母,输出示例如下(其中数据仅用于示意):
输出:
15
本题做题第二问
(2)将webpage.txt页面中的JPG图像文件的URL提取出来,保存在文件images.txt中,每个URL一行。
输出格式示例如下:(其中数据仅用于示意)
http://image.ngchina.com.cn/2018/0829/20180829012548753.JPG
http://image.ngchina.com.cn/2018/0823/thumb_469_352_20180823121155508.JPG
...(略)
15第一题对不了,第二题写错了
在考生文件夹下存在2个Python源文件PY301-1.py、PY301-2.py和素材文件data3.txt。data3.txt文件内容示例如下:
商业模式价值链由三个环节组成:产品、工具、社区。我们团队以一站式系统开发为当前主要产品,利用XAMPP,PHPSTORM,微信开发者工具等软件根据客户要求提供合适的一体化管理系统。
...(略)
打开PY301-1.py,编程实现如下功能:
(1)统计文件中出现词频最多的前10个长度不小于2个字符的词语,将词语及其出现的词频数按照词频数递减排序后显示在屏幕上,每行显示一个词语,用英文冒号连接词语及其词频。示例如下:
我们:5
系统:3
微信:3
...(略)
# # 请在此文件作答 # import jieba f = open('data3.txt') datas = f.read() data = jieba.lcut(datas) d = {} for i in data: if len(i) >= 2: d[i] = d.get(i,0) + 1 ls = list(d.items()) ls.sort(key=lambda x:x[1],reverse=True) for j in ls[:10]: print('{}:{}'.format(j[0],j[1])) f.close()
打开PY301-2.py,编程实现如下功能:
(2)将文档以中文逗号及中文句号为分隔符分割成短句,将包含最高词频的词语的句子,输出到文件out.txt中,每句一行,示例如下:
以此为我们吸引更多的商机
同时普及我们的一站式开发技术
...(略)
# # 请在此文件作答 # import jieba f = open('data3.txt') fo = open('out.txt','w') datas = f.read() data1 = jieba.lcut(datas) data2 = datas.replace(',','。') data2 = data2.split('。') d = {} for i in data1: if len(i) >= 2: d[i] = d.get(i,0) + 1 ls = list(d.items()) ls.sort(key=lambda x:x[1],reverse=True) for j in data2: if ls[0][0] in j: fo.write(j.strip('\n')+'\n') f.close() fo.close()
16。有很多个空,但是不太会填
(第一题写对了,name = line.split('"')[-2])(第二题错在没用对,s=line.strip().split(":")
if len(s)<=1:
continue
lcnum.append([s[0],eval(s[1])]))在考生文件夹下存在2个Python源文件PY301-1.py、PY301-2.py和素材文件data301.txt。data301.txt文件是2020年5月2日的一个HTML页面源文件,里面包含了若干个地区的新冠确诊人数统计数据、地区及人数。
格式如下所示(其中数据仅用于示意):
(略)
{
"name": "Montserrat",
"value": 0
},
{
"name". "Saint Helena",
"alue":0
},
{
"name". "Falkland Islands",
"value":0
},
(略)
打开Py301-1.py,编程实现下面功能:
问题1(10分):从data301.txt中提取地区名称及新冠确诊人数,输出地区的总数。
示例如下(其中数据仅用于示意):
一共有1000个地区
将地区名称和人数结果写入文件result301.tzxt,每行一个地区的信息。
示例如下:
(略)
Germany:183979
Thailand:3112
United Kingdom:284868
France:153634
(略)
# # 在____________上补充代码 (12根短线) # 在……上补充一行或多行代码 (6个点) # fi = open("data301.txt","r") f = open("result301.txt","w") cnumd = {} name = '' count = 0 flag = 1 for line in fi: if '"name":' in line: name = line.split('"')[-2] flag = 1 elif '"value":' in line and flag == 1: dx = line.split(':')[-1][:-1] cnumd[name] = dx flag = 0 count+=1 for d in cnumd.items(): f.write("{}:{}\n".format(d[0],d[1])) print("一共有{}个地区".format(count)) f.close() fi.close()
打开Py301-2.py,编程实现下面功能
问题2(10分):读取问题1输出的文件result301.txt,对确诊人数进行排序,输出确诊人数最多的地区名称和人数。
示例如下(其中数据仅用于示意) :
新冠确诊人数最多的地区是United States,人数是1900000
新冠确诊人数超过1w的地区有20个
新冠确诊人数为0的地区有40个。
# # 在____________上补充代码 (12根短线) # 在……上补充一行或多行代码 (6个点) # lcnum = [] with open("result301.txt", "r") as fi: for line in fi: s=line.strip().split(':') lcnum.append([s[0],eval(s[1])]) lcnum.sort(key=lambda x:x[1], reverse= True) lz = 0 lw = 0 for l in lcnum: if l[1]>10000: lw+=1 if l[1]==0: lz+=1 print("新冠确诊人数最多的地区是{},人数是{}".format(lcnum[0][0],lcnum[0][1] )) print("新冠确诊人数超过1W的地区有{}个".format(lw)) print("新冠确诊人数为0的地区有{}个".format(lz))
结果是这样的