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,完成这一功能。
问题2:读取文件candidate0.txt,从中选出候选人,并将学号和姓名写入文件candidate.txt格式如下:
1010112161722 张三
1010112161728 李四