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

阅读: 评论:0

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

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

目录

一、题干

二、问题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 unt("【注释】")==0 unt("【原文】")==0:line = line.strip(" n")if line.strip():#判断line是否为空串fo.write('{}n'.format(line))unt("【原文】")>0:a=unt("【注释】")>0:a=0
fi.close()
fo.close()

2. 个人优化版

用not in 来替换unt(),用line.strip()=="【原文】"来替换unt("【原文】")>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 = 1if 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&#place('(' + 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()

四、注意事项

  1. 用正则替换较为简单,而且re是内置的模块,不需要额外安装。
  2. 在网上做题时可以不用添加encoding = "utf-8"这个参数,但是在考试时必须要用。
  3. 用with open()的方式来打开文件更方便一些。定义句柄的方法也可以,但是一定要注意最后要关闭。

本文发布于:2024-02-04 22:08:34,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170717512860042.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:论语   应用题   Python
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23