Python二级综合应用题:《论语》

您所在的位置:网站首页 计算机二级python基本操作题答案解析 Python二级综合应用题:《论语》

Python二级综合应用题:《论语》

2024-06-24 22:40| 来源: 网络整理| 查看: 265

目录

一、题干

二、问题1的解答

1. 官方给出的解法

2. 个人优化版

3. 正则表达式解法

二、问题2的解答

1.官方解法:用replace来替换

2. 个人解法:用re.sub()来替换

四、注意事项

一、题干

附件中有 2 个 Python 源文件和 3 个文本文件,分别对应两个问题,请参考编程模板的py文件,修改其中代码,实现以下功能: 《论语》是儒家学派的经典著作之一,主要记录了孔子及其弟子言行。这里给出了一个网络版本的《论语》,文件名称为“论语.txt”,其内容采用逐句“原文”与逐句“注释”相结合的形式组织,通过【原文】标记《论语》原文内容,通过【注释】标记《论语》注释内容,具体文件格式框架请参考“论语.txt”文件。(本题共计2问,本地回答第一问)‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬

问题1:在PY301-1.py文件中修改代码,提取“论语.txt”文件中的原文内容,输出保存到考生文件夹下,文件名为“论语-原文.txt”。具体要求:仅保留“论语.txt”文件中所有【原文】标签下面的内容,不保留标签,并去掉每行行首空格及行尾空格,无空行。原文小括号及内部数字是源文件中注释项的标记,请保留。示例输出文件格式请参考“论语-原文-输出示例.txt”文件。注意:示例输出文件仅帮助了解输出格式,不作它用。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬

问题2:在PY301-2.py文件中修改代码,对“论语-原文.txt”或“论语.txt”文件进一步提纯,去掉每行文字中所有小括号及内部数字,保存为“论文-提纯原文.txt”文件。示例输出文件格式请参考“论语-提纯原文-输出示例.txt”文件。注意:示例输出文件仅帮助了解输出格式,不作它用。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬

提示:建议使用Python集成开发环境IDLE编写、调试及验证程序

二、问题1的解答 1. 官方给出的解法

问题1提取【原文】后面区域的内容,与单行提取不同,区域提取文本需要处理若干行,为此,需建立一个标记即a参数。当遇到"【原文】"字样时,将a标记为1,后续读入该区域其他行时,按照【原文】对应区域块的文本进行处理。当遇到【注释】标记时,则将a标记为0,表示程序已离开了【原文】区域。根据a变量值,确定是否将文本内容输出到新的文件中。

# -*- coding:utf-8 -*- ''' This is a python123.io file. ''' fi = open("论语.txt", "r") fo = open("论语-原文.txt", "w") a=0 for line in fi: if a==1 and line.count("【注释】")==0 and line.count("【原文】")==0: line = line.strip(" \n") if line.strip():#判断line是否为空串 fo.write('{}\n'.format(line)) if line.count("【原文】")>0: a=1 if line.count("【注释】")>0: a=0 fi.close() fo.close() 2. 个人优化版

用not in 来替换line.count(),用line.strip()=="【原文】"来替换line.count("【原文】")>0,优化后版本如下:

fi = open("论语.txt", "r",encoding="utf-8") fo = open("论语-原文.txt", "w") flag = 0 for line in fi: if flag == 1 and "【原文】" not in line and "【注释】" not in line : line = line.strip(" \n") if line.strip(): fo.write(line.strip()+"\n") if line.strip() == "【原文】": flag = 1 if line.strip() == "【注释】": flag = 0 fi.close() fo.close() 3. 正则表达式解法

我们用正则表达式中的re.findall()来查找【原文】和【注释】之间的内容,然后再格式化后输出,代码如下:

import re with open("论语.txt", "r",encoding="utf-8") as fi, open("论语-原文.txt", "w",encoding="utf-8") as f: text = re.findall("(原文】)(.*?)(【)",fi.read(),re.S) for sen in text: lst = list(sen[1:-1]) for elm in lst: f.write(elm.strip()+"\n") 二、问题2的解答

要求是去除括号和数字,相比上一题比较简单

1.官方解法:用replace来替换 fi = open("论语-原文.txt",'r') fo = open("论语-提纯原文.txt",'w') for line in fi: for k in range(100): line=line.replace('(' + str(k) + ')', '') fo.write(line) fi.close() fo.close() 2. 个人解法:用re.sub()来替换

直接用re.sub(pattern,replacement,string)来把带括号的数字替换为空,代码如下:

import re fi = open("论语-原文.txt",'r',encoding="utf-8") fo = open("论语-提纯原文.txt",'w',encoding="utf-8") text = re.sub("\(\d+\)","",fi.read()) fi.close() fo.close() 四、注意事项 用正则替换较为简单,而且re是内置的模块,不需要额外安装。在网上做题时可以不用添加encoding = "utf-8"这个参数,但是在考试时必须要用。用with open()的方式来打开文件更方便一些。定义句柄的方法也可以,但是一定要注意最后要关闭。


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3