第 1 套题
1、考生文件夹下存在 2 个 Python 源文件,分别对应以下 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
…(略)
问题 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 次;
提示:建议使用本机提供的 Python 集成开发环境 IDLE 编写、调试及验证程序。
题库素材
文件 1:py301-1.py
# 以下代码为提示框架
# 请在...处使用一行或多行代码替换
# 请在______处使用一行代码替换
#
# 注意:提示框架代码可以任意修改,以完成程序功能为准
...
for line in ______:
...
fo.write('{},{},{},{}\n'.format(______))
...
复制代码
文件 2:py301-2.py
# 以下代码为提示框架
# 请在...处使用一行或多行代码替换
# 请在______处使用一行代码替换
#
# 注意:提示框架代码可以任意修改,以完成程序功能为准
...
d = {}
...
ls = list(d.items())
ls.sort(key=lambda x:x[1], reverse=True) # 该语句用于排序
...
fo.write('{},{}\n'.format(______))
...
复制代码
参考答案
第 1 小题
fi=open("sensor.txt", "r", encoding = "utf-8")
fo=open("earpa001.txt", "w")
for line in fi:
ls = line.strip("\n").split(",")
if ls[1].count("earpa001")>0:
fo.write('{},{},{},{}\n'.format(ls[0], ls[1], ls[2], ls[3]))
fi.close()
fo.close()
复制代码
第 2 小题
fi = open("earpa001.txt", "r")
fo = open("earpa001_count.txt", "w")
d = {}
for line in fi:
ls = line.strip("\n").split(",")
m = ls[2] + "-" + ls[3]
d[m] = d.get(m,0) + 1
ls = list(d.items())
ls.sort(key=lambda x:x[1], reverse=True) # 该语句用于排序
for i in range(len(ls)):
fo.write('{},{}\n'.format(ls[i][0], ls[i][1]))
fi.close()
fo.close()
复制代码
第 2 套题
2、考生文件夹下存在 2 个 Python 源文件和 3 个文本文件,分别对应两个问题,请按照文件内说明修改代码,实现以下功能:
《论语》是儒家学派的经典著作之一,主要记录了孔子及其弟子言行。这里给出了一个网络版本的《论语》,文件名称为“论语.txt”,其内容采用逐句“原文”与逐句“注释”相结合的形式组织,通过【原文】标记《论语》原文内容,通过【注释】标记《论语》注释内容,具体文件格式框架请参考“论语.txt”文件。
问题 1(10 分):提取文件指定内容。要求:在 PY301-1.py 文件中修改代码,提取“论语.txt”文件中的原文内容,输出保存到考生文件夹下,文件名为“论语-原文.txt”。具体要求:仅保留“论语.txt”文件中所有【原文】标签下面的内容,不保留标签,并去掉每行行首空格及行尾空格,无空行。原文小括号及内部数字是源文件中注释项的标记,请保留。示例输出文件格式请参考“论语-原文-输出示例.txt”文件。(注意:示例输出文件仅帮助考生了解输出格式,不作它用。)
问题 2(10 分):清洗提取出的文件内容。要求:在 PY301-2.py 文件中修改代码,对“论语-原文.txt”或“论语.txt”文件进一步提纯,去掉每行文字中所有小括号及内部数字,保存为“论文-提纯原文.txt”文件。示例输出文件格式请参考“论语-提纯原文-输出示例.txt”文件。(注意:示例输出文件仅帮助考生了解输出格式,不作它用。)
提示:建议使用本机提供的 Python 集成开发环境 IDLE 编写、调试及验证程序。
题库素材
文件 1:py301-1.py
# 以下代码为提示框架
# 请在...处使用一行或多行代码替换
# 请在______处使用一行代码替换
#
# 注意:提示框架代码可以任意修改,以完成程序功能为准
fi = open("论语.txt", ______)
fo = open("论语-原文.txt", ______)
...
for line in fi:
...
line = line.strip(" \n")
...
复制代码
文件 2:py301-2.py
# 以下代码为提示框架
# 请在...处使用一行或多行代码替换
# 请在______处使用一行代码替换
#
# 注意:提示框架代码可以任意修改,以完成程序功能为准
fi = open("论语-原文.txt", ______)
fo = open("论语-提纯原文.txt", ______)
...
for line in fi:
...
line=line.replace(______)
...
复制代码
参考答案
第 1 小题
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:
if line:
fo.write(line + "\n")
fi.close()
fo.close()
复制代码
第 2 小题
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()
复制代码
第 3 套题
3、考生文件夹下存在 3 个 Python 源文件,分别对应 3 个问题,请按照文件内说明修改代码,实现以下功能:
二千多年前希腊的天文学家希巴克斯命名十二星座,它们是水瓶座、双鱼座、白羊座、金牛座、双子座、巨蟹座、狮子座、处女座、天秤座、天蝎座、射手座、魔蝎座。给出一个 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 之间
问题 2(10 分):根据星座序号查询星座信息。在 PY301-2.py 文件中修改代码,读入 CSV 文件中数据,获得用户输入。用户键盘输入一组范围是 1-12 的整数作为序号,序号间采用空格分隔,以回车结束。屏幕输出这些序号对应的星座的名称、字符编码以及出生日期范围,每个星座的信息一行。本次屏幕显示完成后,重新回到输入序号的状态。
参考输入和输出示例格式如下:
请输入星座序号(例如,5):5 10
双子座(9802)的生日是 5 月 21 日至 6 月 21 日之间
天蝎座(9807)的生日是 10 月 24 日至 11 月 22 日之间
请输入星座序号(例如,5):
问题 3(5 分):根据星座序号查询星座信息,并对无效序号的给出错误提示。在问题 2 的基础上,在 PY301-3.py 文件中修改代码,对键盘输入的每个序号做合法性处理。如果输入的数字不不合法,请输出"输入星座编号有误!",继续输出后续信息,然后重新回到输入序号的状态。
参考输入和输出示例格式如下:
请输入星座序号(例如,5):5 14 11
双子座(9802)的生日是 5 月 21 日至 6 月 21 日之间
输入星座序号有误!
射手座(9808)的生日是 11 月 23 日至 12 月 21 日之间
请输入星座序号(例如,5):
提示:建议使用本机提供的 Python 集成开发环境 IDLE 编写、调试及验证程序。
题库素材
文件 1:py301-1.py
# 以下代码为提示框架
# 请在...处使用一行或多行代码替换
# 请在______处使用一行代码替换
#
# 注意:提示框架代码可以任意修改,以完成程序功能为准
...
ls = []
...
print("{}的生日位于{}-{}之间".format(______))
复制代码
文件 2:py301-2.py
# 以下代码为提示框架
# 请在...处使用一行或多行代码替换
#
# 注意:提示框架代码可以任意修改,以完成程序功能为准
...
ls = []
...
print("{}({})的生日是{}月{}日至{}月{}日之间".format(______))
复制代码
文件 3:py301-3.py
# 以下代码为提示框架
# 请在...处使用一行或多行代码替换
#
# 注意:提示框架代码可以任意修改,以完成程序功能为准
...
ls = []
...
print("{}({})的生日是{}月{}日至{}月{}日之间".format(______))
...
if flag == False:
print("输入星座序号有误!")
...
复制代码
参考答案
第 1 小题
f = open("PY301-SunSign.csv")
name = input("请输入星座中文名称")
for line in f.read().split("\n"):
ls = []
if name in line:
ls = line.split(",")
print("{}的生日位于{}-{}之间".format(ls[1],ls[2],ls[3]))
f.close()
复制代码
第 2 小题
f=open("py301-sunsign.csv","r")
x=input("请输入星座序号(例如,5):")
ls = []
for line in f:
ls.append(line.strip('\n').split(','))
num=x.split()
for i in num:
for row in ls:
if row[0]==i:
if len(row[2])==3:
m1=row[2][0]
d1=row[2][1:3]
else:
m1=row[2][0:2]
d1=row[2][2:4]
if len(row[3])==3:
m2=row[3][0]
d2=row[3][1:3]
else:
m2=row[3][0:2]
d2=row[3][2:4]
print("{}({})的生日是{}月{}日至{}月{}日之间".format(row[1],row[4],m1,d1,m2,d2))
f.close()
复制代码
第 3 小题
f=open("py301-sunsign.csv",'r')
ls = []
for line in f:
ls.append(line.strip(' \n').split(','))
f.close()
x=input("请输入星座序号(例如,5):")
num=x.strip(' \n').split()
for i in num:
if 0<int(i)<len(ls):
for row in ls:
if row[0]==i:
m1=row[2][0] if len(row[2])==3 else row[2][0:2]
d1=row[2][1:3] if len(row[2])==3 else row[2][2:4]
m2=row[3][0] if len(row[2])==3 else row[3][0:2]
d2=row[3][1:3] if len(row[2])==3 else row[3][2:4]
print("{}({})的生日是{}月{}日至{}月{}日之间".format(row[1],row[4],m1,d1,m2,d2))
else:
print("输入星座序号有误!")
复制代码
第 4 套题
4、考生文件夹下有 4 个文件,其中,3 个 Python 源文件,分别对应以下 3 个问题,1 个文本文件,作为本题目输入数据。
《命运》是著名科幻作家倪匡的作品。考生文件夹中,给出《命运》的一个网络版本文件,文本文件名为“命运.txt”。
请分别按照 3 个源文件内部说明修改代码,实现以下功能:
问题 1(5 分):统计最高字符及其频次并输出。要求:在 PY301-1.py 文件中修改代码,对“命运.txt”文件进行字符频次统计,屏幕输出频次最高的中文字符(不包含标点符号)及其频次,字符与频次之间采用英文冒号":"分隔,示例格式如下:
理:224
问题 2(5 分):输出前 10 个最高字符及其频次。要求:在 PY301-2.py 文件中修改代码,对“命运.txt”文件进行字符频次统计,按照频次由高到低,屏幕连续输出前 10 个频次最高的字符(字符之间不包含回车符,且字符之间无间隔),示例格式如下:
理斯卫...(后略,共 10 个字符)
问题 3(10 分):统计字符频次并将结果输出到新的文本文件中。要求:在 PY301-3.py 文件中修改代码,对“命运.txt”文件进行字符频次统计,将所有字符按照频次从高到低排序,字符包括中文、标点、英文等符号,但不包含空格和回车。将排序后的字符及频次输出到考生文件夹下,文件名为“命运-频次排序.txt”。字符与频次之间采用英文冒号":"分隔,各字符之间采用英文逗号","分隔,参考 CSV 格式,最后无逗号,文件内部示例格式如下:
理:224,斯:120,卫:100
提示:建议使用本机提供的 Python 集成开发环境 IDLE 编写、调试及验证程序。
题库素材
文件 1:py301-1.py
# 以下代码为提示框架
# 请在...处使用一行或多行代码替换
# 请在______处使用一行代码替换
#
# 注意:提示框架代码可以任意修改,以完成程序功能为准
...
d = {}
...
print("{}:{}".format(______))
复制代码
文件 2:py301-2.py
# 以下代码为提示框架
# 请在...处使用一行或多行代码替换
#
# 注意:提示框架代码可以任意修改,以完成程序功能为准
...
d = {}
...
ls = list(d.items())
ls.sort(key=lambda x:x[1], reverse=True) # 此行可以按照词频由高到低排序
...
复制代码
文件 3:py301-3.py
# 以下代码为提示框架
# 请在...处使用一行或多行代码替换
#
# 注意:提示框架代码可以任意修改,以完成程序功能为准
...
d = {}
...
ls = list(d.items())
ls.sort(key=lambda x:x[1], reverse=True) # 此行可以按照词频由高到低排序
...
复制代码
参考答案
第 1 小题
f = open('命运.txt','r')
d = {}
for i in f.read():
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 小题
f = open('命运.txt','r')
d = {}
for i in f.read():
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 i in range(10):
print(ls[i][0], end = "")
f.close()
复制代码
第 3 小题
f = open('命运.txt','r')
fi = open('命运-频次排序.txt','w')
d = {}
for i in f.read():
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()
复制代码
第 5 套题
5、考生文件夹下,有 3 个文件。其中 2 个 python 源文件分别对应两个问题,1 个文本文件为两个问题的数据文件。
《三国演义》是中国古典四大名著之一,曹操是其中主要人物,在文本文件中,给出了《三国演义》简介。请分别修改 2 个 Python 源文件,按照以下要求,解决以下 2 个问题:
问题 1(10 分):将文本分词并输出到结果文件中。要求:打开 PY301-1.py,补充代码完成程序。用 Python 语言中文分词第三方库 jieba 对文件 data.txt 进行分词,并将结果写入文件 out.txt 中,要求每行一个词。示例如下:
内容简介
编辑
整个
故事
在
东汉
…
问题 2(10 分):统计曹操出现次数并打印输出。要求:打开 PY301-2.py,补充其中代码,对问题 1 中输出的文本文件 out.txt 中的结果进行分析,并屏幕打印输出曹操出现的次数。
提示:建议使用本机提供的 Python 集成开发环境 IDLE 编写、调试及验证程序。
题库素材
文件 1:py301-1.py
# 请在______处使用一行代码或表达式替换
#
# 注意:请不要修改其他已给出代码
import jieba
f = open('data.txt','r')
lines = f.readlines()
f.close()
f = open('out.txt','w')
for line in lines:
line = ______(1)______ #删除每行首尾可能出现的空格
wordList = ______(2)______ #用结巴分词,对每行内容进行分词
f.writelines('\n'.______(3)______) #将分词结果存到文件out.txt中
f.close()
复制代码
文件 2:py301-2.py
# 请在______处使用一行代码或表达式替换
#
# 注意:请不要修改其他已给出代码
import jieba
f = open('out.txt','r') #以读的方式打开文件
words = f.readlines()
f.close()
D={}
for w in _______(1)_________: #词频统计
D[w[:-1]]=_______(2)_________ + 1
print("曹操出现次数为:{} ".format(_______(3)_________))
复制代码
参考答案
第 1 小题
import jieba
f = open('data.txt','r')
lines = f.readlines()
f.close()
f = open('out.txt','w')
for line in lines:
line = line.strip(' ') #删除每行首尾可能出现的空格
wordList = jieba.lcut(line) #用结巴分词,对每行内容进行分词
f.writelines('\n'.join(wordList)) #将分词结果存到文件out.txt中
f.close()
复制代码
第 2 小题
import jieba
f = open('out.txt','r') #以读的方式打开文件
words = f.readlines()
f.close()
D={}
for w in words: #词频统计
D[w[:-1]]=D.get(w[:-1],0) + 1
print("曹操出现次数为:{} ".format(D["曹操"]))
复制代码
第 6 套题
6、考生文件夹下存在 2 个 Python 源文件和 1 个文本文件,分别对应 2 个问题,文件 data.txt 是一个来源于网上的技术信息资料,请按照文件内说明修改代码,实现以下功能。
问题 1(10 分):提取关键词。要求:在 PY301-1.py 文件中修改代码,用中文分词第三方库 jieba 对文件 data.txt 进行分词,并选择长度不少于 3 个字符的关键词,写入文件 out1.txt,每行 1 个关键词,各行关键词不重复,对输出顺序不做要求。示例如下:
人工智能
科幻小说
…(略)
问题 2(10 分):统计词频按高低顺序输出。要求:在 PY301-2.py 文件中修改代码,对文件 data.txt 进行分词,对长度不少于 3 个字符的关键词,统计出现的次数,按照出现次数由大到小的顺序输出到文件 out2.txt,每行为 1 个关键词及其出现次数,关键词和次数之间用冒号分隔。示例如下:
科学家:2
达特茅斯:1
...(略)
提示:建议使用本机提供的 Python 集成开发环境 IDLE 编写、调试及验证程序。
题库素材
文件 1:py301-1.py
# 请在...处使用多行代码替换
#
# 注意:其他已给出代码仅作为提示,可以修改
... #此处可多行
f = open('out1.txt','w')
... #此处可用多行
f.close()
复制代码
文件 2:py301-2.py
# 请在...处使用多行代码替换
#
# 注意:其他已给出代码仅作为提示,可以修改
... # 此处可多行
d = {}
... # 此处可多行
ls = list(d.items())
ls.sort(key=lambda x:x[1], reverse=True) # 此行可以按照词频由高到低排序
... # 此处可多行
复制代码
参考答案
第 1 小题
import jieba
fi = open('data.txt','r')
f = open('out1.txt','w')
words = []
for line in fi.readlines():
line = line.strip('\n')
wordlist = jieba.lcut(line) #每一行都是一个list,并且list里已经分词
for word in wordlist:
if len(word)>=3 and (word not in words):
words.append(word)
for word in words:
f.write(word+'\n')
fi.close()
f.close()
复制代码
第 2 小题
import jieba
fi = open('data.txt','r')
fo = open('out2.txt','w')
words = []
for line in fi.readlines():
line = line.strip('\n')
wordlist = jieba.lcut(line) #每一行都是一个list,并且list里已经分词
for word in wordlist:
if len(word)>=3:
words.append(word)
d = {}
for word in words:
d[word] = d.get(word,0) + 1
ls = list(d.items())
ls.sort(key=lambda x:x[1], reverse=True) # 此行可以按照词频由高到低排序
s = ''
for i in ls:
s = '{}:{}'.format(i[0],i[1])
fo.write(s+'\n')
fi.close()
fo.close()
复制代码
第 7 套题
7、在考生文件夹下存在 2 个 Python 源文件 PY301-1.py、PY301-2.py 和素材文件 score301.txt。
score301.txt 文件是某班学生评选一等奖学金的 10 门主干课成绩信息。每行一个学生的信息,包含学生学号、姓名以及 10 门课成绩,格式如下:
1820161043 郑珉镐 68 66 83 77 56 73 61 69 66 78
1820161044 沈红伟 91 70 81 91 96 80 78 91 89 94
...(略)
打开 PY301-1.py,编程完成以下功能:
问题 1(10 分):读取 score301.txt 中的学生成绩数据,计算出每名学生的总成绩,将总成绩从高到低排序。将前 10 名学生信息写入文件 cand301.txt 中。每行记录一名学生的信息,包括学生学号、姓名以及 10 门课的成绩。示例如下:
...(略)
1010112161 张三 100 92 94 88 91 96 59 84 96 64
1010112938 王五 91 70 81 91 96 80 78 91 89 94
...(略)
打开 PY301-2.py,编程完成以下功能:
问题 2(10 分):读取文件 cand301.txt,在学生中选出一等奖学金候选人,必须满足 2 个条件:1)总成绩排名在前 10 名;2)10 门课程的成绩都大于等于 60。
将候选人学号和姓名写入文件 best301.txt。格式示例如下:
1010112161 张三
1010112728 李四
...(略)
提示:建议使用本机提供的 Python 集成开发环境 IDLE 编写、调试及验证程序。
题库素材
文件 1:py301-1.py
# 请在...处使用多行代码替换
#
# 注意:其他已给出代码仅作为提示,可以修改
L=[] #L中的元素是学生原始成绩和总成绩
... #此处可多行
L.sort(key=lambda x:x[-1],reverse=True) #按学生总成绩从大到小排序
... #此处可多行
复制代码
文件 2:py301-2.py
'''
输入文件 : cand301.txt
输出文件 : best301.txt
'''
复制代码
参考答案
第 1 小题
fi=open("score301.txt")
L=[]
for f in fi:
st=f.strip("\n").split()
grade=sum(list(map(lambda x:eval(x),st[2:])))
st.append(grade)
L.append(st)
L.sort(key=lambda x:x[-1],reverse=True)
fo=open("cand301.txt","w")
for s in L[0:10]:
fo.write(" ".join(s[:-1])+"\n")
fi.close()
fo.close()
复制代码
第 2 小题
fi=open("cand301.txt","r")
fo=open("best301.txt","w")
for i in fi:
s=i.strip("\n").split()
if min(list(map(lambda x:eval(x),s[2:])))>=60:
fo.write(" ".join(s[:2])+"\n")
fi.close()
fo.close()
复制代码
第 8 套题
8、考生文件夹下存在 2 个 Python 源文件和 1 个文本文件。2 个 Python 源文件分别对应 2 个问题,1 个文本文件 data.txt 是教育部爱课程网中国大学 M00C 平台的某个 HTML 页面源文件,包含了我国参与 M00C 建设的一批大学或机构列表。请分别修改 2 个 Python 源文件,实现以下功能。
问题 1(10 分):数据清洗。要求:修改 PY301-1.py 文件中代码,从 data.txt 中提取大学或机构名称列表,将结果写入文件 univ.txt,每行一个大学或机构名称,并按照大学或机构在 data.txt 出现的先后顺序输出,样例如下:
...
北京理工大学
...(略)
北京师范大学
...
提示:所有大学名称在 data.txt 文件中以 alt="北京理工大学"形式存在。
问题 2(10 分):数据统计。要求:修改 PY301-2.py 文件中代码,从 univ.txt 文件中进一步筛选,去掉机构名称,筛选出大学名称。这里定义:大学名称均包含“大学”或“学院”字样,但不包括“大学生”等字样。请将筛选后的大学名称输出在屏幕上,大学各行之间没有空行,最后请分别给出包含“大学”和“学院”名称的数量。同时包含“大学”和“学院”的名称当作“大学”处理,不计为“学院”。样例如下(样例中数量不是真实结果):
...
北京理工大学
...(略)
长沙师范学院
...
包含大学的名称数量是 10
包含学院的名称数量是 10
提示:建议使用本机提供的 Python 集成开发环境 IDLE 编写、调试及验证程序。
题库素材
文件 1:py301-1.py
# 请在______处使用一行或多行代码替换
#
# 注意:其他已给出代码仅作为提示,可以修改
____________ # 此处可多行
f = open("univ.txt", "w")
____________ # 此处可多行
f.close()
复制代码
文件 2:py301-2.py
# 请在______处使用一行或多行代码替换
#
# 注意:其他已给出代码仅作为提示,可以修改
n = 0
f = open("univ.txt", "r")
____________ # 此处可多行
f.close()
print("包含大学的名称数量是{}".format(n))
复制代码
参考答案
第 1 小题
fo = open('data.txt', 'r')
lines = fo.read().split('\n')
fo.close()
L = []
for line in lines:
if "alt=" in line:
L.append(line)
S = []
for line in L:
point_start = line.find('alt=') + 5
point_end = line.find('"', point_start, -1)
S.append(line[point_start:point_end])
f = open("univ.txt", "w")
for school in S:
f.write(school)
f.write('\n')
f.close()
复制代码
第 2 小题
n = 0
k = 0
f = open("univ.txt", "r")
lines = f.read().split('\n')
f.close()
for school in lines:
if (("大学" in school) or ("学院" in school)) and ("大学生" not in school):
print(school)
if "大学" in school:
n += 1
elif "学院" in school:
k += 1
print("包含大学的名称数量是{}".format(n))
print("包含学院的名称数量是{}".format(k))
复制代码
第 9 套题
9、考生文件夹下存在 2 个 Python 源文件和 2 个文本文件。其中,2 个 Python 源文件对应 2 个问题,2 个文本文件分别摘自 2019 年和 2018 年的政府工作报告。请分别补充 2 个 Python 源文件,实现以下功能。
问题 1(10 分):数据统计。要求:修改 PY301-1.py 文件中代码,分别统计两个文件中出现次数最多的 10 词语,作为主题词,要求词语不少于 2 个字符,打印输出在屏幕上,输出示例如下:(示例词语非答案)
2019:改革:10,企业:9,…(略),深化:2
2018:改革:11,效益:7,…(略),深化:1
注意:输出格式采用英文冒号和英文逗号,标点符号前后无空格,各词语间用逗号分隔,最后一个词语后无逗号。
问题 2(10 分):数据关联。要求:修改 PY301-2.py 文件中代码,对比两组主题词的差异,输出两组的共有词语和分别的特有词语。输出示例如下:(示例词语非答案)
共有词语:改革,...(略),深化
2019 特有:企业,...(略),加强
2018 特有:效益,...(略),创新
注意:输出格式采用英文冒号和英文逗号,标点符号前后无空格,各词语间用逗号分隔,最后一个词语后无逗号。
提示:建议使用本机提供的 Python 集成开发环境 IDLE 编写、调试及验证程序。
题库素材
文件 1:py301-1.py
#
# 以下代码仅供参考。
#
d = {}
lt = list(d.items())
lt.sort(key = lambda x:x[1],reverse = True)
复制代码
文件 2:py301-2.py
#
# 以下代码仅供参考。
#
......
d = {}
......
lt = list(d.items())
lt.sort(key = lambda x:x[1],reverse = True)
......
复制代码
参考答案
第 1 小题
import jieba
f2018 = open('data2018.txt', 'r')
line2018 = f2018.read().split('\n')
f2018.close()
f2019 = open('data2019.txt', 'r')
line2019 = f2019.read().split('\n')
f2019.close()
d = {}
for i in line2018:
word = jieba.lcut(i)
for j in word:
if len(j) >= 2:
d[j] = d.get(j,0) + 1
lt = list(d.items())
lt.sort(key = lambda x:x[1],reverse = True)
print('2018:',end='')
for i in range(9):
print('{}:{}'.format(lt[i][0], lt[i][1]), end = '')
print(',',end = '')
print('{}:{}'.format(lt[9][0], lt[9][1]))
d = {}
for i in line2019:
word = jieba.lcut(i)
for j in word:
if len(j) >= 2:
d[j] = d.get(j,0) + 1
lt = list(d.items())
lt.sort(key = lambda x:x[1],reverse = True)
print('2019:',end='')
for i in range(9):
print('{}:{}'.format(lt[i][0], lt[i][1]), end = '')
print(',',end = '')
print('{}:{}'.format(lt[9][0], lt[9][1]))
复制代码
第 2 小题
import jieba
f2018 = open('data2018.txt', 'r')
line2018 = f2018.read().split('\n')
f2018.close()
f2019 = open('data2019.txt', 'r')
line2019 = f2019.read().split('\n')
f2019.close()
d = {}
for i in line2018:
word = jieba.lcut(i)
for j in word:
if len(j) >= 2:
d[j] = d.get(j,0) + 1
lt = list(d.items())
lt.sort(key = lambda x:x[1],reverse = True)
ls2018 = []
for i in range(10):
ls2018.append(lt[i][0])
d = {}
for i in line2019:
word = jieba.lcut(i)
for j in word:
if len(j) >= 2:
d[j] = d.get(j,0) + 1
lt = list(d.items())
lt.sort(key = lambda x:x[1],reverse = True)
ls2019 = []
for i in range(10):
ls2019.append(lt[i][0])
lslike = []
for i in ls2018:
if i in ls2019:
lslike.append(i)
for i in lslike:
ls2018.remove(i)
ls2019.remove(i)
print('共有词语:', end = '')
for i in lslike[:-1]:
print(i, end = ',')
print(lslike[-1])
print('2019特有:', end = '')
for i in ls2019[:-1]:
print(i, end = ',')
print(ls2019[-1])
print('2018特有:', end = '')
for i in ls2018[:-1]:
print(i, end = ',')
print(ls2018[-1])
复制代码
第 10 套题
10、在考生文件夹下存在 2 个 Python 源文件 PY301-1.py、PY301-2.py 和素材文件 data.txt。
data.txt 文件包含关于“德国工业 4.0 战略规划实施建议摘要”的内容。
打开 PY301-1.py,编程完成以下功能:
问题 1(10 分):清理 data.txt 文件里的内容,去除中文标点符号、换行符和中英文空格,只保留中文字符、英文字符、数字、英文标点符号等符号,将结果输出到文件 clean.txt 中。示例如下:
德国工业 4.0 战略计划实施建议摘编机械工业信息研究院战略与规化研究所—德国实施工业… (略)
打开 PY301-2.py,编程完成以下功能:
问题 2(10 分):提取 clean.txt 文件中长度不少于 3 个字符的词并统计其词频,输出词频最高的 10 个词及其词频。词与词频之间用英文冒号隔开;每个词之间用英文逗号隔开;标点符号前后无空格,最后一个词后无逗号。示例如下:
4.0:10,制造业:9,…(略)
提示:建议使用本机提供的 Python 集成开发环境 IDLE 编写、调试及验证程序。
题库素材
文件 1:py301-1.py
文件 2:py301-2.py
#
# 以下代码仅供参考。
#
import jieba
d = {}
lt = list(d.items())
lt.sort(key = lambda x:x[1],reverse = True)
复制代码
参考答案
第 1 小题
import jieba
f=open('data.txt','r')
data=f.read()
f.close()
f=open('clean.txt','w')
s=''
x=',。?、‘’“”;:、 )\n(!'
for i in data:
if i not in x:
s+=i
f.write(s)
f.close()
复制代码
第 2 小题
#
# 以下代码仅供参考。
#
import jieba
f=open('clean.txt','r')
data=f.read()
l=jieba.lcut(data)
d = {}
for i in l:
if len(i)>=3:
d[i] = d.get(i,0)+1
lt = list(d.items())
lt.sort(key = lambda x:x[1],reverse = True)
for i in lt[:9]:
print(i[0],':',i[1],end=',',sep='')
print(lt[9][0],':',lt[9][1],sep='')
f.close()
复制代码
第 11 套题
11、在考生文件夹下存在 3 个文件,1 个 Python 源文件和 2 个文本文件。其中,文本文件“红楼梦.txt”中包含了《红楼梦》小说前 20 章内容,“停用词.txt”包含了需要排除的词语。请修改 Python 源文件"PY301.py",实现以下功能。
问题(20 分):词频统计并输出。要求如下:
(1)对“红楼梦.txt”中文本进行分词,并对人物名称进行归一化处理,仅归一化以下内容:凤姐、凤姐儿、凤丫头归一为凤姐;宝玉、二爷、宝二爷归一为宝玉;黛玉、颦儿、林妹妹、黛玉道归一为黛玉;宝钗、宝丫头归一为宝钗;贾母、老祖宗归一为贾母;袭人、袭人道归一为袭人;贾政、贾政道归一为贾政;贾琏、琏二爷归一为贾琏。
(2)不统计“停用词.txt”文件中包含词语的词频。
(3)提取出场次数不少于 40 次的人物名称,将人物名称及其出场次数按照递减排序,保存到 result.csv 文件中,出场次数相同的,则按照人物名称的字符顺序排序。示例如下:
宝玉,123
凤姐,101
...(略)
其中,人物名称与出场次数之间采用英文逗号分隔,无空格,每组信息一行。
提示:建议使用本机提供的 Python 集成开发环境 IDLE 编写、调试及验证程序。
题库素材
文件 1:py301-1.py
# 请在......处写多行代码
# 建议不修改其他代码
import jieba
f = "红楼梦.txt"
sf = "停用词.txt"
......
# items.sort(key=lambda x:x[1], reverse=True)
# 此行语句可以对items列表进行递减排序
复制代码
参考答案
第 1 小题
import jieba
f = "红楼梦.txt"
sf = "停用词.txt"
fi = open(f, 'r', encoding = 'utf-8')
data = fi.read()
words = jieba.lcut(data)
fi.close()
sw = open(sf, 'r', encoding = 'utf-8')
stopword = sw.read().split('\n')
sw.close()
namelist = [['凤姐','凤姐儿','凤丫头'],['宝玉','二爷','宝二爷'],['黛玉','颦儿','林妹妹','黛玉道'],['宝钗','宝丫头'],['贾母','老祖宗'],['袭人','袭人道'],['贾政','贾政道'],['贾琏','琏二爷']]
for i in range(len(words)):
if words[i] in stopword:# 去除停用词
words[i] = ''
for j in range(8): # 归一化
if words[i] in namelist[j]:
words[i] = namelist[j][0]
d = {}
for i in words:
d[i] = d.get(i,0) + 1
lt = list(d.items())
lt.sort(key=lambda x:x[1], reverse=True)
fo = open('result.csv','w')
for i in range(len(lt)):
if lt[i][1] >= 40 and len(lt[i][0])>=2:
fo.write('{},{}'.format(lt[i][0],lt[i][1]))
fo.write('\n')
fo.close()
复制代码
第 12 套题
12、考生文件夹下存在 2 个 Python 源文件和 1 个文本文件,分别对应 2 个问题,其中,文本文件“八十天环游地球.txt”是法国作家儒勒·凡尔纳《八十天环游地球》长篇小说的网络版本,请修改源文件实现以下功能。
问题 1(10 分):提取章节题目并输出到文件。要求:在 PY301-1.py 中补充代码,提取“八十天环游地球.txt”中所有章节的题目,并且将提取后的题目输出到“八十天环游地球-章节.txt”文件中,每行一个标题,示例如下:
第一章 斐利亚·福克和路路通建立主仆关系
...(略)
问题 2(10 分):统计每章节的高频词并打印输出。要求:在 PY301-2.py 中补充代码,统计“八十天环游地球.txt”中每一章的标题和内容中,出现次数最多的词语(词语长度不少于 2 个字符)及其次数,输出格式为章节名、词语及其出现的次数,以空格分隔,示例如下:
第一章 斐利亚 21
第二章 路路通 12
...(略)
提示:建议使用本机提供的 Python 集成开发环境 IDLE 编写、调试及验证程序。
题库素材
文件 1:py301-1.py
#请在.....处填写多行表达式或语句
#可以修改其他代码
f = open("八十天环游地球.txt")
.....
f.close()
复制代码
文件 2:py301-2.py
#请在.....处填写多行表达式或语句
#可以修改其他代码
import jieba
.....
复制代码
参考答案
第 1 小题
f = open("八十天环游地球.txt",'r')
words = f.read().split('\n')
f.close()
fo = open("八十天环游地球-章节.txt",'w')
for i in words:
if '第' in i and '章' in i and len(i)<50: # len(i)<50去除异常段落
fo.write(i)
fo.write('\n')
fo.close()
复制代码
第 2 小题
import jieba
fi1 = open("八十天环游地球-章节.txt",'r')
zjm = fi1.read().split('\n')
fi1.close()
fi2 = open("八十天环游地球.txt",'r')
nr = fi2.read().split('\n')
fi2.close()
n = 0
k = 1
tem = []
for i in nr:
if i in zjm:
n += 1
if n == k:
newword = jieba.lcut(i)
for i in newword:
tem.append(i)
else:
d = {}
for i in tem:
if len(i) >= 2:
d[i] = d.get(i, 0) +1
lt = list(d.items())
lt.sort(key=lambda x:x[1], reverse = True)
chapter = zjm[k-1].split(' ')
print('{} {} {}'.format(chapter[0], lt[0][0], lt[0][1]))
k += 1
tem = []
复制代码
第 13 套题
13、在考生文件夹下存在 3 个 Python 源文件 PY301-1.py、PY301-2.py、PY301-3.py 和素材文件 data.txt。
data.txt 是由学生信息构成的数据文件,每行是一个学生的相关信息,包括姓名、班级和分数。姓名和其他信息之间用英文冒号隔开,班级和分数之间用英文逗号隔开,班级由“系名+班级序号”组成,如“计算 191”。示例如下:
王一:计算 191,340
张二:经济 191,450
…(略)
打开 PY301-1.py,编程实现如下功能:
(1)读取 data.txt,输出学生的姓名和分数到文件 studs.txt,每行一条记录,姓名和分数用英文冒号隔开,示例如下:
王一:340
李四:450
…(略)
打开 PY301-2.py,编程实现如下功能:
(2)选出分数最高的学生,打印输出学生的姓名和分数,中间用英文冒号隔开,示例如下:
李四:450
打开 PY301-3.py,编程实现如下功能:
(3)计算每个班级的平均分,打印输出班级和平均分,平均分小数点后保留 2 位,中间用英文冒号隔开,示例如下:
计算 191:447.55
经济 191:460.08
…(略)
提示:建议使用本机提供的 Python 集成开发环境 IDLE 填写,调试及验证程序。
题库素材
文件 1:py301-1.py
文件 2:py301-2.py
文件 3:py301-3.py
参考答案
第 1 小题
fi = open('data.txt','r')
grade = fi.read().strip().split('\n') # strip 用来去除前后的空行
fi.close()
fo = open('studs.txt','w')
name = []
for i in grade:
tem = i.split(',')
name = tem[0].split(':')
fo.write('{}:{}'.format(name[0],tem[1]))
fo.write('\n')
fo.close()
复制代码
第 2 小题
fi = open('studs.txt','r')
grade = fi.read().strip().split('\n')
fi.close()
names = []
for i in grade:
tem = i.split(':')
names.append(tem)
d = {}
for i in names:
d[i[0]] = i[1]
lt = list(d.items())
lt.sort(key=lambda x:x[1], reverse=True)
print('{}:{}'.format(lt[0][0],lt[0][1]))
复制代码
第 3 小题
fi = open('data.txt','r')
grade = fi.read().strip().split('\n') # strip 用来去除前后的空行
fi.close()
studentclass = []
grades = []
for i in grade: # 统计出现的班级
tem1 = i.split(',')
tem2 = tem1[0].split(':')
if tem2[1] not in studentclass:
studentclass.append(tem2[1])
n = 0
num = 0
for i in studentclass:
for j in grade:
tem1 = j.split(',')
if i in tem1[0]:
n += eval(tem1[1]) # 求班级平均分
num += 1 #计算学生人数
print('{}:{:.2f}'.format(i,n/num))
n = 0
num = 0
复制代码
第 14 套题
14、在考生文件夹下存在 2 个 Python 源文件 PY301-1.py、PY301-2.py 和素材文件 webpage.txt。
webpage.txt 保存了某网站一个网页的 HTML 格式源代码。在该文件中,JPG 图片以一个完整的 URL 表示,示例如下:
其中,与是一对组合,表示包含一个 URL 链接;<img ...(略)... />表示包含一个 JPG 图像文件的 URL,每个 URL 用 src=开头,以 JPG 图像文件名结束,如 538.JPG 表示 JPG 图像文件。
打开 PY301-1.py,编程实现如下功能:
(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
...(略)
提示:建议使用本机提供的 Python 集成开发环境 IDLE 填写,调试及验证程序。
题库素材
文件 1:py301-1.py
文件 2:py301-2.py
参考答案
第 1 小题
fi = open('webpage.txt','r')
pic = fi.read().split('\n')
fi.close()
n = 0
for i in pic:
if '.JPG' in i:
n += 1
print(n)
复制代码
第 2 小题
fi = open('webpage.txt','r')
pic = fi.read().strip().split('\n')
fi.close()
fo = open('images.txt','w')
for i in pic:
if '.JPG' in i:
start = i.index('src=')+5
end = i.index('.JPG')+4
fo.write(i[start:end])
fo.write('\n')
fo.close()
复制代码
第 15 套题
15、在考生文件夹下存在 2 个 Python 源文件 PY301-1.py、PY301-2.py 和素材文件 data.txt。
data.txt 文件内容示例如下:
商业模式价值链由三个环节组成:产品、工具、社区。我们团队以一站式系统开发为当前主要产品,利用 XAMPP,PHPSTORM,微信开发者工具等软件根据客户要求提供合适的一体化管理系统。
…(略)
打开 PY301-1.py,编程实现如下功能:
(1)统计文件中出现词频最多的前 10 个长度不小于 2 个字符的词语,将词语及其出现的词频数按照词频数递减排序后显示在屏幕上,每行显示一个词语,用英文冒号连接词语及其词频。示例如下:
我们:5
系统:3
微信:3
…(略)
打开 PY301-2.py,编程实现如下功能:
(2)将文档以中文逗号及中文句号为分隔符分割成短句,将包含最高词频的词语的句子,输出到文件 out.txt 中,每句一行,示例如下:
以此为我们吸引更多的商机
同时普及我们的一站式开发技术
…(略)
提示:建议使用本机提供的 Python 集成开发环境 IDLE 填写,调试及验证程序。
题库素材
文件 1:py301-1.py
文件 2:py301-2.py
参考答案
第 1 小题
import jieba
fi = open('data.txt','r')
lines = fi.readlines()
words = []
for i in lines:
tem = jieba.lcut(i)
for j in tem:
words.append(j)
d = {}
for i in words:
if len(i) >= 2:
d[i] = d.get(i,0) + 1
ls = list(d.items())
ls.sort(key=lambda s:s[1],reverse = True)
for i in range(10):
print('{}:{}'.format(ls[i][0],ls[i][1]))
fi.close()
复制代码
第 2 小题
fi = open('data.txt','r')
lines = []
line = fi.read().strip().split('。')
for i in line:
tem = i.strip().split(',')
for j in tem:
if '我们' in j:
print(lines)
lines.append(j)
fi.close()
fo = open('out.txt','w')
for i in lines:
fo.write(i)
fo.write('\n')
fo.close()
复制代码
第 16 套题
16、在考生文件夹下存在 2 个 Python 源文件 PY301-1.py、PY301-2.py 和素材文件 data301.txt。
data301.txt 文件是 2020 年 5 月 2 日的一个 HTML 页面源文件,里面包含了若干个地区的新冠确诊人数统计数据、地区及人数。
格式如下所示(其中数据仅用于示意):
...(略)
{ "name":"Montserrat", "value":0},
{ "name":"Saint Helena", "value":0},
{ "name":"Falkland Islands", "value":0},
...(略)
打开 PY301-1.py,编程实现下面功能:
问题 1(10 分):从 data301.txt 中提取地区名称及新冠确诊人数,输出地区的总数。
示例如下(其中数据仅用于示意):
一共有 1000 个地区
将地区名称和人数结果写入文件 result301.txt,每行一个地区的信息。
示例如下:
...(略)
Germany:183979
Thailand:3112
United Kingdom:284868
France:153634
...(略)
打开 PY301-2.py,编程实现下面功能
问题 2(10 分):读取问题 1 输出的文件 result301.txt,对确诊人数进行排序,输出确诊人数最多的地区名称和人数。
示例如下(其中数据仅用于示意):
新冠确诊人数最多的地区是 United States,人数是 1900000
新冠确诊人数超过 1W 的地区有 20 个
新冠确诊人数为 0 的地区有 40 个
提示:建议使用本机提供的 Python 集成开发环境 IDLE 填写,调试及验证程序。
题库素材
文件 1:py301-1.py
#
# 在____________上补充代码 (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. ____________
flag = 1
elif '"value":' in line and flag == 1:
dx = line. ____________
cnumd[name] = dx
flag = 0
_____________
for d in cnumd.items():
f.write("{}:{}\n".format(d[0],d[1]))
print("一共有{}个国家".format(count))
f.close()
fi.close()
复制代码
文件 2:py301-2.py
#
# 在____________上补充代码 (12根短线)
# 在……上补充一行或多行代码 (6个点)
#
lcnum = []
with open("result301.txt", "r") as fi:
for line in fi:
……
lcnum.sort(key=lambda x:x[1], reverse= True)
lz = 0
lw = 0
for l in lcnum:
……
print("新冠确诊人数最多的国家是{},人数是{}".format(lcnum[0][0],lcnum[0][1] ))
print("新冠确诊人数超过1W的国家有{}个".format(lw))
print("新冠确诊人数为0的国家有{}个".format(lz))
复制代码
参考答案
第 1 小题
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(':')[1][2:-3]
flag = 1
elif '"value":' in line and flag == 1:
dx = line.split(':')[1][0:-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()
复制代码
第 2 小题
lcnum = []
with open("result301.txt", "r") as fi:
for line in fi:
country = line.split(':')
country[1] = eval(country[1]) # 将人数格式转成int
lcnum.append(country)
lcnum.sort(key=lambda x:x[1], reverse= True)
lz = 0
lw = 0
for l in lcnum:
if l[1]>10000:
lw += 1
elif l[1] == 0:
lz += 1
print("新冠确诊人数最多的地区是{},人数是{}".format(lcnum[0][0],lcnum[0][1] ))
print("新冠确诊人数超过1W的地区有{}个".format(lw))
print("新冠确诊人数为0的地区有{}个".format(lz))
复制代码
第 17 套题
17、在考生文件夹下存在 1 个 Python 源文件 PY301.py 和 1 个数据文件 data_yiqing.csv。在文件 data_yiqing.csv 里,第一行是标题,第二行起是各省份地区新型冠状病毒肺炎疫情的数据,包括各省区名称、确诊、死亡、治愈 4 列。每行是一个省区的一组数据信息,代表疫情期间确诊人数、死亡人数、治愈人数。各列数据之间用英文逗号隔开。
示例如下(其中数据仅用于示意):
省区,确诊,死亡,治愈
香港,2505,18,1455
新疆,213,3,73
…(略)
打开 PY301.py 文件,编程实现如下功能:
问题 1(10 分):显示部分数据。读取 data_yiqing.csv 文件的前 5 行的信息,输出在屏幕上;标题行为“省区,确诊,死亡,治愈”,每个省区的数据写一行,行内数据之间用英文逗号分隔。
示例如下(其中数据仅用于示意):
省区,确诊,死亡,治愈
香港,2505,18,1455
新疆,213,3,73
北京,929,9,878
...(略)
问题 2(10 分):统计并保存结果。读取所有省区数据,统计所有省区的确诊,死亡,治愈人数的平均值、最大值、最小值,保存至 tongji.csv 文件中。其中,标题行为“统计,确诊,死亡,治愈”,平均值、最大值、最小值数据分别写一行,行内数据之间用英文逗号分隔。
示例如下(其中数据仅用于示意):
统计,确诊,死亡,治愈
平均值,156.5,20.0,136.5
最大值,3500.0,400.0,3100.0
...(略)
提示:建议使用本机提供的 Python 集成开发环境 IDLE 填写,调试及验证程序。
题库素材
文件 1:py301.py
#PY301-1.py
#请在.....处填写多行表达式或语句
#可以修改其他代码
def ravg(lst):
sum=0
for i in lst:
sum+=eval(i)
return round(sum/len(lst),1)
qzlst=[]
swlst=[]
zylst=[]
with open("data_yiqing.csv","r") as f:
……
avglst=["平均值",ravg(qzlst),ravg(swlst),ravg(zylst)]
maxlst=["最大值",max(qzlst),max(swlst),max(zylst)]
minlst=["最小值",min(qzlst),min(swlst),min(zylst)]
with open("tongji.csv","w") as f:
……
复制代码
参考答案
第 1 小题
#PY301-1.py
#请在.....处填写多行表达式或语句
#可以修改其他代码
def ravg(lst):
sum=0
for i in lst:
sum+=eval(i)
return round(sum/len(lst),1)
qzlst=[]
swlst=[]
zylst=[]
with open("data_yiqing.csv","r") as f:
num = f.read().strip().split('\n')
print(num)
for i in num[1:]:
qzlst.append(i.split(',')[1])
swlst.append(i.split(',')[2])
zylst.append(i.split(',')[3])
for i in range(5):
print(num[i])
# 题目说可以修改其他代码,所以此答案直接修改已有的代码的格式,方便输出
avglst=["平均值",ravg(qzlst),ravg(swlst),ravg(zylst)]
maxlst=["最大值",max(qzlst),max(swlst),max(zylst)]
minlst=["最小值",min(qzlst),min(swlst),min(zylst)]
with open("tongji.csv","w") as f:
f.write("统计,确诊,死亡,治愈"+"\n")
f.write(avglst[0]+','+str(avglst[1])+','+str(avglst[2])+','+str(avglst[3])+"\n")
f.write(maxlst[0]+','+str(maxlst[1])+','+str(maxlst[2])+','+str(maxlst[3])+"\n")
f.write(minlst[0]+','+str(minlst[1])+','+str(minlst[2])+','+str(minlst[3])+"\n")
复制代码
第 18 套题
18、在考生文件夹下存在一个 Python 源文件 py301.py,请编写代码替换横线,可修改其他代码,实现下面功能:
附件文件 data.txt 是新书《规模》的书评文章,去除换行符后形成了一个连续字符串,里面包含了中文及中文字符,文件内容示例如下:
世间万物既有其存在与发展的内在逻辑,也有其相联、相通的外在逻辑。21 世纪科学所面临的一个重大挑战是,.……(略)
问题 1:请编写程序,从 data.txt 中提取词语长度大于等于 2 的中文词语,将每种词语长度的中文词语的总数输出显示在屏幕上,换行之后,将这种长度的其中 10 个词语,以空格分隔输出显示在屏幕上。示例如下(其中数据仅用于示意):
2 字词有 20 个,其中包括:
世间 万物 既有 存在 发展 内在 …… (略)
3 字词有 27 个,其中包括:
复杂性 物理学 生物学 物理学 生物学 社会学 …… (略)
问题 2:在上一问题的程序基础上,创建一个文件 words.txt,将每种词语长度的中文词语字符串,以逗号隔开写入到文件中,每种词语长度的词构成一行,示例如下(其中数据仅用于示意):
世间 万物 既有 …… (略)
复杂性 物理学 生物学 …… (略)
推而广之 计算结果 1000 哺乳动物 生态系统 生活节奏 …… (略)
数以百万计 10000 …… (略)
在屏幕上显示输出这种词语的长度、个数和写入文件的个数,示例如下:
2 字词有 20 个,写入文件 20 个
3 字词有 27 个,写入文件 27 个
提示:建议使用本机提供的 Python 集成开发环境 IDLE 填写,调试及验证程序。
题库素材
文件 1:py301.py
#
# 在____________上补充代码
# 在……上补充一行或多行代码
# 可以修改其他代码
#
# 问题1素材:
import jieba as j
ds = {}
fs = open("data.txt","r")
lss = fs.read()
fs.close()
…….
print("{}字词有{}个, 其中包括:".format(k, len(ds[k])))
…….
#问题2素材:
fo = open("words.txt","w")
……
print("{0:}字词有{1:}个,写入文件{1:}个:".format(k, ____________)))
fo.close()
复制代码
参考答案
第 1 小题
#
# 在____________上补充代码
# 在……上补充一行或多行代码
# 可以修改其他代码
#
# 问题1素材:
import jieba as j
ds = {}
fs = open("data.txt","r")
lss = fs.read()
fs.close()
word = j.lcut(lss)
# ds = {2:[大头,小头...]}
for i in word:
if len(i) >= 2:
tem = ds.get(len(i),[])
tem.append(i)
ds[len(i)] = tem
for k in ds.keys():
print("{}字词有{}个, 其中包括:".format(k, len(ds[k])))
if len(ds[k]) >= 10:
for i in range(10):
print(ds[k][i],end=" ")
print()
else:
for i in range(len(ds[k])):
print(ds[k][i],end=" ")
print()
#问题2素材:
fo = open("words.txt","w")
for k in ds.keys():
fo.write(" ".join(ds[k]))
fo.write('\n')
print("{0:}字词有{1:}个,写入文件{1:}个:".format(k, len(ds[k])))
fo.close()
复制代码
第 18 套题
题库素材
19、在考生文件夹下存在一个 Python 源文件 py301.py,请写代码替换横线,可修改其他代码,实现下面功能:在文件 talks.txt 里有一些聊天记录,每行对应一个人的发言,英文冒号前面是发言人的名字,冒号后面是发言的内容,由中文字符组成;
文件内容示例如下:
alice:与此同时它们需要建立起烦琐的行政机构和管理组织
bill:规模经济和亚线性规模缩放下的创新思想最终导致了公司的停滞与衰亡
…(略)
编写程序统计聊天记录中出现的词语情况。具体要求如下:
读取该文件里每个人的发言,将同一个人的发言合并成一个字符串;将发言内容分词,统计出现次数最多的 5 个词语,连同发言人的名字、发言的词语总数,显示输出在屏幕上,示例如下:
bill 说了 30 个词,其中 top5 是:
(’规模’,3)(’停滞’,2)(’秩序’,2)(’平衡’,2)(’经济’,1)
jone 说了 15 个词,其中 top5 是:
(’肌肉’,3)(’胖子’,1)(’一步’,1)(’需要’,1)(’协调’,1)
…(略)
提示:建议使用本机提供的 Python 集成开发环境 IDLE 填写,调试及验证程序。
文件 1:py301.py
#
# 在____________上补充代码
# 在……上补充一行或多行代码
#
import jieba as j
fs = open("talks.txt", "r")
lss = fs.readlines()
fs.close()
ts = {}
for ls in lss:
……
for r in ts:
wd = {}
……
wdl = list(wd.items())
wdl.sort(key=lambda x: x[1], reverse=True)
print("{}说了{}个词, 其中top5是:".format(r, len(ls)))
……
复制代码
参考答案
第 1 小题
#
# 在____________上补充代码
# 在……上补充一行或多行代码
#
import jieba as j
fs = open("talks.txt", "r")
lss = fs.readlines()
fs.close()
ts = {}
for ls in lss:
if ls != "\n":
tem = ls.strip().split(":")
ts[tem[0]] = ts.get(tem[0],"") + tem[1]
ts = list(ts.items())
for i in ts: # ts
ls = j.lcut(i[1])
wd = {} # 统计词频
for k in ls:
wd[k] = wd.get(k,0)+1
r = i[0]
wdl = list(wd.items())
wdl.sort(key=lambda x: x[1], reverse=True)
print("{}说了{}个词, 其中top5是:".format(r, len(ls)))
for k in range(5):
print(wdl[k],end="")
print()
复制代码
评论