目录
文章目录
目录背景问题一及其解答问题解答一总程序框图子程序1子程序2子程序3程序代码程序解释解答二总程序框图子程序1子程序2子程序3程序代码解答三总程序框图子程序1子程序2子程序3程序代码问题二及其解答问题解答一程序框图程序代码解答二程序框图程序代码知识点总结背景
《论语》是儒家学派的经典著作之一,主要记录了孔子及其弟子的言行。网络上有很多《论语》文本版本。这里给出了一个版本,文件名称为“论语-网络版.txt”,其内容采用如下格式组织:
【原文】
1.11子曰:“父在,观其(1)志;父没,观其行(2);三年(3)无改于父之道(4),可谓孝矣。”
【注释】
(略)
【译文】
(略)
【评析】
(略)
该版本通过【原文】标记《论语》原文内容,采用【注释】、【译文】和【评析】标记对原文的注释、译文和评析。
问题一及其解答
问题
请编写程序,提取《论语》文档中所有原文内容,输出保存到“论语-提取版.txt”文件。输出文件格式要求:去掉文章中原文部分每行行首空格及如“1.11”等的数字标志,行尾无空格、无空行。参考格式如下(原文中括号及内部数字是对应源文件中注释项的标记):
子曰(1):“学(2)而时习(3)之,不亦说(4)乎?有朋(5)自远方来,不亦乐(6)乎?人不知(7),而不愠(8),不亦君子(9)乎?”
有子(1)曰:“其为人也孝弟(2),而好犯上者(3),鲜(4)矣;不好犯上,而好作乱者,未之有也(5)。君子务本(6),本立而道生(7)。孝弟也者,其为人之本与(8)?”
子曰:“巧言令色(1),鲜(2)仁矣。”
(略)
解答一
总程序框图
子程序1
子程序2
子程序3
程序代码
with open("论语-网络版.txt", "r", encoding = "UTF-8") as fi:lines = fi.readlines()# 1.去掉文章中原文部分每行行首空格,行尾无空格、无空行# 并将修改后的字符串保存在列表ls中ls = []flag = 2 # 用整型变量作为标记for line in lines:# 定位【原文】在txt文档中的位置:if line == " 【原文】\n":flag = 0elif line == " 【注释】\n" or line == " 【译文】\n" or line == " 【评析】\n":flag = 1else:flag += 1# 将【原文】下面的内容赋给列表ls:if flag == 2:if line !="\n":ls.append(line.strip(" "))# 2. 去掉文章中原文部分每行数字标志,并将修改后的字符串# 保存内容至列表ls1ls1 = []for line in ls:####### 将行首的数字全部转换为* #########for i in range(25):for j in range(25):line = line.replace("{}·{}".format(i,j),"**")for i in range(10):line = line.replace("{}*".format(i),"")for i in range(10):line = line.replace("*{}".format(i),"")#########################################line = line.replace("*","") # 替换*为空字符ls1.append(line)## 3. 将列表ls1保存在文件中with open("论语-提取版.txt", "w", encoding = "UTF-8") as fo:fo.writelines(ls1)
程序解释
下面从程序的形态和功能、构造、特征和性质、关系四个方面来解释程序。
形态和功能:上述代码是一组由字符、符号等以离散形式表示的能够实现提取《论语》文本功能的明确的规则体系。
构造:程序代码共分为三大部分:利用第一部分代码可以去掉《论语》原文的行首空格、行尾回车和行尾空格,处理后的文本保存在列表中;利用第二部分代码可以进一步去掉《论语》原文中的数字标志,处理后的文本保存在列表中;利用第三部分代码将经过上述两步处理后的文本保存在文件中。
特征和性质:上述代码具有唯一确定性、标准化和可通用性、可扩充性与稳定性、便于识别和记忆、力求短小和格式统一以及容易修改等特点。
关系:代码和源程序的概念相同。源程序是指未经编译的,按照一定程序设计语言规范书写的可读文本文件,包括算法和数据结构。源程序加上说明文档可以构成软件。
解答二
解答方案二和方案一的不同点在于子程序1。在方案一中,通过整型变量定位【原文】内容,在方案二中,通过布尔变量定位【原文】内容。
总程序框图
子程序1
子程序2
子程序3
程序代码
with open("论语-网络版.txt", "r", encoding = "UTF-8") as fi:lines = fi.readlines()# 1.去掉文章中原文部分每行行首空格,行尾无空格、无空行# 并将修改后的字符串保存在列表ls中ls = []flag = False # 用Boolean变量作为标记for line in lines:# 定位【原文】在txt文档中的位置if "【" in line: #遇到【时,说明已经到了新的区域,写标记为Falseflag = Falseif "【原文】" in line: #遇到【原文】时,设置写标记为Trueflag = True continueif flag == True: ls.append(line.strip(" ")) # 去除字符串中的空格和回车if line !="\n":fo.writelines(line)for element in ls: ls.remove("") # 去除列表中的空字符串 ls.remove(x)将列表ls中出现的第一个元素x删除# 2. 去掉文章中原文部分每行数字标志,并将修改后的字符串# 保存内容至列表ls1ls1 = []for line in ls:####### 将行首的数字全部转换为* #########for i in range(10):for j in range(10):line = line.replace("{}·{}".format(i,j),"**")for i in range(10):line = line.replace("{}*".format(i),"")for i in range(10):line = line.replace("*{}".format(i),"")#########################################line = line.replace("*","") # 替换*为空字符ls1.append(line)## 3. 将列表ls1保存在文件中with open("论语-提取版.txt", "w", encoding = "UTF-8") as fo:fo.writelines(ls1)
解答三
总程序框图
子程序1
子程序2
子程序3
程序代码
with open("论语-网络版.txt", "r", encoding = "UTF-8") as fi:lines = fi.readlines()# 1.去掉文章中原文部分每行行首空格,行尾无空格、无空行# 并将修改后的字符串保存在列表ls中ls = []flag = False # 用Boolean变量作为标记for line in lines:# 定位【原文】在txt文档中的位置if "【" in line: #遇到【时,说明已经到了新的区域,写标记为Falseflag = Falseif "【原文】" in line: #遇到【原文】时,设置写标记为Trueflag = True continueif flag == True:if line !="\n":line = line.strip(" ")ls.append(line) # 去除字符串中的空格和回车# 2. 去掉文章中原文部分每行数字标志,并将修改后的字符串# 保存内容至列表ls1ls1 = []for line in ls:####### 将行首的数字全部转换为* #########for i in range(10):for j in range(10):line = line.replace("{}·{}".format(i,j),"**")for i in range(10):line = line.replace("{}*".format(i),"")for i in range(10):line = line.replace("*{}".format(i),"")#########################################line = line.replace("*","") # 替换*为空字符ls1.append(line)## 3. 将列表ls1保存在文件中with open("论语-提取版.txt", "w", encoding = "UTF-8") as fo:fo.writelines(ls1)
问题二及其解答
问题
请编写程序,在“论语-提取版.txt”基础上,进一步去掉每行文字中所有括号及其内部数字,保存为“论文-原文.txt”文件。参考格式如下:
子曰:“学而时习之,不亦说乎?有朋自远方来,不亦乐乎?人不知,而不愠,不亦君子乎?”
有子曰:“其为人也孝弟,而好犯上者,鲜矣;不好犯上,而好作乱者,未之有也。君子务本,本立而道生。孝弟也者,其为人之本与?”
子曰:巧言令色,鲜仁矣。”
(略)
本题暂不支持自动评分,print(“我已掌握”),即可得分
解答一
程序框图
程序代码
with open("论语-提取版.txt","r",encoding = "UTF-8") as fi:lines = fi.readlines() #############分别替换左括号、右括号和数字##########ls = []for line in lines:line = line.replace("(","") #替换左括号line = line.replace(")","") #替换右括号for c in line:if c.isnumeric():line = line.replace(c,"") #替换数字ls.append(line)############################################## with open("论文-原文.txt","w",encoding = "UTF-8") as fo:fo.write(line)
解答二
程序框图
程序代码
with open("论语-提取版.txt","r",encoding = "UTF-8") as fi:lines = fi.readlines()###################方法二#################################先将括号以及括号里面的数字替换成*号,########然后再将*替换成空字符串##########ls = []for line in lines:for i in range(25):line = line.replace("({})".format(i),"*") # 利用format确定指定格式的字符串line = line.replace("*","")ls.append(line)############################################with open("论文-原文.txt","w",encoding = "UTF-8") as fo:fo.writelines(ls)
知识点总结
掌握if语句、if-else语句和if-elif-else语句的语法区别和使用方法。
掌握文件读写操作,包括常规的open函数,with…as…语句。
掌握字符串的操作:
3.1. 字符串的提取
学会利用标记(flag)字符(可以是boolean类型或者整型变量)查找特定的字符串。
3.2. 字符串中指定字符的替换
学会利用replace()函数替换字符串中的指定字符,注意replace()返回值是原字符串的副本。
3.3. 字符串中特定字符的删除(空格、回车)
学会利用strip()函数删除字符串中的指定字符,注意strip()返回值是原字符串的副本。
理解str方法isnumeric()的用法,如果字符串中所有字符均是数字,那么isnumeric()返回True,注意不要忘记参数括号“()”。
会利用format确定指定格式的字符串。