内容正文:
作业 算法专项练——程序综合练
1.[2023·杭二高一]古书中的文章是按照从右向左竖向排版的。编程实现将一段从左到右横向排版的文字,去掉标点符号后按古风排版输出,输出结果如图所示。
程序代码如下,请回答下面的问题。
(1)请在画线处填入合适的代码。
import math
n=int(input(”请输入每一列的字符数:”))
old=input(”请输入一段文字:”)
new=””
delw=[”,”,”:”,”;”,”“”,”””,”!”,”?”,”《”,”》”,”。”,”、”]
i=j=0
while i<len(old):
if old[i] in delw:
new=①________
j=i+1
i+=1
if old[-1] not in delw:
new+=old[j:]
for i in range(n):
temp=””
②________
while p<len(new):
③________
p+=n
print(temp.rjust(k,chr(12288)))
#输出字符串temp 右对齐,并使用空格填充至长度为k 的新字符串,如样例中k=6
(2)加框处代码有误,请填入正确代码:______。
2.[2023·余姚中学高一]某校举行趣味运动赛,共有n 个比赛项目,每班派n 位学生参加,每位同学分别参加一个项目。
某班有n 位选手报名参加比赛,现需要依据他们平时练习中各个项目的平均得分,找出最佳参赛组合,查找规则为各项目得分总和最大,例:图a 所示的数据中,最佳参赛组合是“唐昌新:跳绳,胡鹏:飞镖,杨胜超:颠球,陈伟:套圈”。
编写如下Python 程序,实现查找最佳参赛组合,运行界面如图b,请在画线处填入合适的代码。
def check(s): #判断s 中是否有重复值
f=[0]*len(s)
for i in s:
①________
if f[i]>1:
return False
return True
a=[]
f=open(”cj.txt”,”r”)
title=f.readline().split() #读取标题行
for line in f.readlines():
line=line.split()
a.append(line)
n=len(a);max=0
for i in range(0,n**n):
k=i;s=[0]*n;p=0
while k!=0:
s[p]=k%n
k=②________
p=p+1
if check(s)==True:
sum=0
for i in range(len(s)):
sum+=int(③________)
if sum>max:
④________
ss=s
print(”最佳参赛组合:”)
for i in range(n):
print(a[i][0],title[ss[i]+1])
3.查找与替换。从键盘上分别输入要查找和替换的字符串,对文本文件进行查找与替换,替换后保存到新的文本文件中。完成查找与替换功能的思路是:首先可从待检索文本文件“in.txt”逐行读取文本内容到列表text,然后从键盘上输入查找的字符串key和替换的字符串new,对列表text中的元素逐个进行查找并替换,结果保存到列表result,最后将result 写入文件“out. txt”。
(1)主程序。
text = readfile(”in.txt”) #读入文件 key = input(”请输入要查找的字符串:”)
new = input(”请输入要替换的字符串:”)
result = []
for line in text:
newline = replace(key, new, line) #替换
result.append(newline) #添加到列表
writefile(”out.txt”,result) #写入文件
该程序段采用的算法是________(单选,填字母:A.解析算法 / B.枚举算法)。
(2)读写文本文件,如下的readfile函数,逐行读取文本文件数据存入列表并返回。请在画线处填入合适的代码。
def readfile(filename):
f=open(filename,encoding = ”utf-8”) #打开文件
text = []
line = f.readline() #从文件中读取一行
while line:
text.append(line) #添加到列表
line = f.readline()
f.close()
return________
def w