计算机二级python真题
一、八十天环游世界(综合题)
附件中保存1个文本文件,分别对应2个问题
其中,文本文件“八十天环游地球.txt”是法国作家儒勒. 凡尔纳《八十天环游地球》长篇小说的网络版本,请修改源文件实现以下功能。
二、八十天环游世界 问题一
问题1:提取章节题目并输出到文件。
要求:在模板中补充代码, 提取“八十天环游地球. txt” 中所有章节的题目,并且将提取后的题目输出到“八十天环游地球-章节. txt"文件中,每行一一个标题,示例如下:
第一章 斐利亚·福克和路路通建立主仆关系
第二章 路路通认为他总算找到了理想的工作
第三章 一场可能使福克先生破财的争论
第四章 斐利亚·福克把路路通吓得目瞪口呆
第五章 伦敦市场上出现了一种新的股票
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()
二、八十天环游世界 问题二
问题2:统计每章节的高频词并打印输出。
要求:在模板补充代码,统计“八十天环游地球. txt”中每一章的标题和内容中,出现次数最多的词语(词语长度不少于2个字符)及其次数,输出格式为章节名、 词语及其出现的次数,以空格分隔,示例如下:
第一章 福克 25
第二章 路路通 17
第三章 福克 26
第四章 福克 27
第五章 福克 31
import jieba
import re
strf = '八十天环游地球.txt'
with open(strf, encoding='utf-8') as f:
lines = f.read()
t = re.findall('(第.{1,3}章.*)', lines)
with open(strf, encoding='utf-8') as f:
lines = f.read()
s = re.sub('(第.{1,3}章.*)', '$', lines)
x = s.split('$')
x = x[1:]
# 计算词频并输出结果。
for i, j in zip(t, x):
counts = {}
txt = jieba.lcut(i+j)
for word in txt:
if len(word) >= 2:
counts[word] = counts.get(word, 0) + 1
li = list(counts.items())
li.sort(key=lambda x: x[1], reverse=True)
word_max, count_max = li[0]
chapter = re.findall('(第.*章)', i)[0]
print(chapter + ' ' + word_max + ' ' + str(count_max))
Python re模块:https://www.cnblogs.com/shenjianping/p/11647473.html
Python zip()函数:https://www.runoob.com/python/python-func-zip.html
代码 2
import jieba
fi1 = open("D:/Code/PythonCode/八十天环游地球-章节 (1).txt","r")
chapter = fi1.read().split("\n") #这里存放的是章节名
fi1.close()
fi2 = open("D:/Code/PythonCode/八十天环游地球.txt","r")
content = fi2.read().split("\n") #这里存放的是文本内容
fi2.close()
ch = 0 #章节名对应的变量
co = 1 #用来判断内容所在的章节数
ls = [] #用来存储每个章节内容和标题分词的结果
for i in content:
if i in chapter:
ch+=1
if ch == co:
words = jieba.lcut(i)
for word in words:
ls.append(word)
else:
d={}
for word in ls:
if len(word)>=2:
d[word]=d.get(word,0)+fi1
lt=list(d.items())
lt.sort(key=lambda x:x[1], reverse=True)
title = chapter[co-1].split(" ")
print("{} {} {}".format(title[0],lt[0][0],lt[0][1]))
k +=1
ls = []
四、统计操作时间(简单应用)
描述
在省略号处填写一行或多行代码,完成如下功能。
同时,out.txt,其中有一些数据库操作功能的执行时间信息,如下所示:
示例
starting,0.000037,2.102
After opening tables,0.000008,0.455
System lock,e.000004,0.227
其中第1列是操作的名字,第2列是操作所花费的时间,单位是秒,第3列是操作时间占全部过程的百分比,字段之间用逗号,隔开。
读取out.txt文件里的内容,统计所有操作所花费的时间总和,并输出操作时间百分比最多的三个操作所占百分比的值,及其对应的操作名称,显示在屏幕上,如下所示:
示例
the total execute time is 0.001724
the top 0 percentage time is 46.023, spent in “Filling schema table” operation
the top 1 percentage time is 36.932, spent in “Sending data” operation
sumtime = 0
percls = []
ts = {}
with open('out.txt', 'r') as f:
for line in f:
percls.append(line.strip('\n').split(","))
n=[x[1] for x in percls]
for i in range(len(n)):
sumtime+=eval(n[i])
ts={x[0]:x[2] for x in percls}
print('the total execute time is ', sumtime)
tns = list(ts.items())
tns.sort(key=lambda x: x[1], reverse=True)
for i in range(3):
print('the top {} percentage time is {}, spent in "{}" operation'.format(i, tns[i][1],tns[i][0]))
Python列表推导式:https://www.runoob.com/python3/python-comprehensions.html
Python列表推导式:https://www.codenong.com/20639180/