高效作业8 第8课 字符串2——字符串应用-【精彩三年】2024-2025学年高中信息技术选择性必修1课程探究与巩固Word教参(浙教版2019)

2025-08-08
| 17页
| 37人阅读
| 1人下载
浙江良品图书有限公司
进店逛逛

资源信息

学段 高中
学科 信息技术
教材版本 高中信息技术浙教版选修1 数据与数据结构
年级 高二
章节 3.1 字符串
类型 作业-同步练
知识点 字符串的概念与特性,字符串的基本操作
使用场景 同步教学-新授课
学年 2024-2025
地区(省份) 全国
地区(市) -
地区(区县) -
文件格式 DOCX
文件大小 3.12 MB
发布时间 2025-08-08
更新时间 2025-08-08
作者 浙江良品图书有限公司
品牌系列 精彩三年·高中同步课程探究与巩固
审核时间 2025-07-11
下载链接 https://m.zxxk.com/soft/52989638.html
价格 3.00储值(1储值=1元)
来源 学科网

内容正文:

高效作业8[第8课 字符串2——字符串应用](见学生用书P196) 【A级 新教材落实与巩固】 1.小王编写了一个“查找最长区间”的 Python 程序,功能如下:依次输入各个区间的起点和终点(数据均为整数,都用逗号分隔并以逗号结尾),程序运行之后显示最长的区间。例如,三个区间为(1,6),(10,23),(21,29),输入格式和程序运行界面如图所示。 (1)实现上述功能的Python程序如下,请在横线处填入合适的代码。 s=input() i=0;maxn=0;r=0 k=0;temp=0;l=0 while i<len(s): ①__ch=s[i]__ if ch>=”0”and ch<=”9”: temp=temp*10+int(ch) else: k=k+1 if k%2==1: l=temp else: r=temp if maxn < r-l+1: ②__maxn=r-l+1__ ans=r temp=0 ③__i=i+1____ print(”最长的区间是”+str(ans-maxn+1)+”到”+str(ans)) (2)若输入内容的结束符缺失(即输入内容为 1,6,10,23,21,29),则执行该程序后,变量 r 的值为__23__。 【解析】 (1)①从前往后遍历字符串s,提取第i个字符放在ch中,故填入ch=s[i]。②统计长度,结尾减去开头,r是结尾处,所以要加1。③temp用来存储当前提取出的连续数据,k用来统计提取出的连续数据的个数,l表示当前区间的左端点值,r代表当前区间的右端点值,maxn表示最长区间的长度,ans表示最长区间的右端点值,最后循环变量i变化,提取下一个字符,循环重复上述过程,故填入i=i+1。 (2)数字29后面没有“,”,当遍历到最后一个字符时,执行第2个else下面的表达式,temp=29,没有给当前区间的右端点赋值,此时r是上一个区间的右端点值,故r=23。 2. 某Python 程序的功能如下:输入由大小写字母组成的字符串s,将s中的字符按照大小写重新组合,大写字母在左,小写字母在右,且同类大小写字母间保持原相对顺序,输出一个新的字符串res,并计算大小写字母个数相差的绝对值。如图所示: 请输入字符串: bcdkAABJk 转换后:AABJbcdkk 大小写字母个数相差1个 (1)如果输入“abcAABBab”,则转换后新的字符串为__AABBabcab__。 (2)某同学尝试了两种思路,分别处理大写字母和小写字母,请在横线处填入合适的代码。 s=input(”请输入字符串: ”) idx=[] c=0 res=”” for ch in s: if ”A”<=ch<=”Z”: idx.append(c) else: res=①__res+ch__ #拼接小写字母 c+=1 delta=②__abs(len(res)-len(idx))__或__abs(len(idx)-len(res))__ #计算大小写字母个数相差的绝对值 for i in idx[-1::-1]:  #拼接大写字母 res=③__s[i]+res__ print(”转换后: ”,res) print(”大小写字母个数相差”,delta,”个”) 【解析】 (1)由题干描述结合题图可知,大写字母按照原相对顺序全部写在左边,小写字母全部写在右边。 (2)根据if条件和中文提示可知,要拼接字符和求长度差的绝对值。根据range的参数是从后往前可知,应该逆向向左拼接大写。 3.商店每个月的收入与支出数据用“收入-支出”格式表示, 依序给定一年12个月的“收入-支出”数据,中间用逗号隔开,如图所示。小李通过编写Python程序, 求“四个季度中季度净收入的最高值”。实现该功能的Python程序段如下, 请在横线处填入合适的代码。 请输入一年12个月的数据: 142-27,849-767,661-372,89-85,663-169, 908-244,764-255,241-128,900-488,458- 356,929-747,397-377 季度净收入的最高值是: 1162 #求出某个月的净收入 def mon(s): i=0 while i<len(s) and s[i]!=”-”: i+=1 ①__income=int(s[:i])__或__income=int(s[0:i])__ expense=int(s[i+1:]) return income-expense #求出某个季度的净收入 def quar(begin,end): values=0 section=s[begin:end].split(”,”) for i in range(len(section)): ②__values=values+mon(section[i])__ return values s=input(”请输入一年12个月的数据: ”) k=start=totmax=total=0 for i in range(len(s)): if i==len(s)-1: total=quar(start,len(s)) elif s[i]==”,”: ③__k+=1或k=k+1或其他等价答案__ if k%3==0: ④__total=quar(start,i)或其他等价答案__ start=i+1 if total>totmax: totmax=total print(”季度净收入的最高值是: ”,totmax) 【解析】 ①函数mon()用于统计每月的差值,传入的参数结构为“xxx-yyy”,例如“142-27”,利用循环找到“-”的位置,分别提取收入和支出,收入income=int(s[:i]),支出expense=int(s[i+1:])。 ②函数quar()用于统计季度和,传入的参数begin和end为该季度的开始和结束位置,section=[“xxx-yyy”,“xxx-yyy”,“xxx-yyy”],在循环中调用函数mon(),并将返回值累加到values中。 ③对月份进行计数,每遇到新月份,k+=1。 ④k%3==0,则表示一个季度结束,调用函数quar()对季度进行统计。 4.2023·义乌中学检测某同学设计了一种加密算法,加密规则如下: ①若待加密字符中出现大写字母,就将其转换为它在字母表中的次序,如A→1,B→2,Y→25,Z→26; ②若待加密字符中连续出现小写字母,将这些小写字母反向添加进密码中,如出现“aeiou”将转换为“uoiea”; ③若待加密字符中出现数字,那么将数字0~9分别转换为字母A-J,如0→A,1→B,…,9→J; ④所有的密码之间用空格隔开。 例如: 输入要加密的字符串: ABCasdf12DZX 1 2 3 f d s a B C 4 26 24 实现该算法的部分Python程序代码如下,请回答下列问题。 s=input(”输入要加密的字符串: ”) ans='' temp='' for ①__i__in__s__: if 'a'<=i<='z': temp=i+” ”+temp elif 'A'<=i<='Z': ans=ans+temp t=str(ord(i)-65+1) temp='' elif '0'<=i<='9': ans=ans+temp t=②__chr(int(i)+65)__或__chr(int(i)+ord('A'))__ temp='' ③__ans=ans+temp(如果写了+””之类的也给分)____ print(ans) (1)若待加密字符串为“ThuVMe50”,那么运行程序后输出的结果是__20__u__h__22__13__e__F__A__。 (2)程序中两处加框代码出现相同的错误,请改正:__ans=ans+t+''__。 (3)请在横线处填入合适的代码。 【解析】 (1)T h u V M e 5 0 20 u h 22 13  e F   A (2)需要空格隔开。 (3)①每个字符都要转换,结合“'a'<=i<='z'”可知,填i in s;②将逆序的小写字符加入结果;③将数字转换为对应的ASCII字符。 5.若从字符串中删除一些字符后,剩余的字符仍保持原顺序,则由剩余字符组成的新字符序列,我们称之为原字符串的子序列。例如:原始字符串“abcde”可以通过删除字符“b”“e”得到目标字符串“acd”,则“acd”为“abcde”的子序列;而原始字符串“abcde”通过删除字符无法得到目标字符串“ebd”,则“ebd”不是“abcde”的子序列。 根据对问题的分析,设计子序列的判断算法如下: 输入数据:原始字符串bg、目标字符串ed。 处理数据: ①从目标字符串ed 中依次读取字符; ②所取字符与原始字符串中仍未参与比较的字符逐位比较; ③若比较过程中存在相同字符,则转到①继续执行;若目标字符串已读取完毕,则转到⑤执行; ④若原始字符串中所有字符皆参与比较后,仍未出现相同字符,则终止判断,确定目标字符串不是原始字符串的子序列; ⑤上述过程执行后,目标字符串中所有字符都有序存在于原始字符串中,则确定目标字符串是原始字符串的子序列。 输出数据:子序列判断结果。 现根据该算法编写了如下Python 程序,运行界面如图所示。请结合算法和程序,回答下列问题。 def cgs(s,t): ①__pos=0__ for x in t: while pos<len(s) and ②__s[pos]!=x__: pos+=1 if pos==len(s): return 1 pos+=1 return 0 jg=[”是”,”不是”] bg=input(”请输入原始字符串: ”) ed=input(”请输入目标字符串: ”) print(ed,③__jg[cgs(bg,ed)]__,bg,”的子序列!”) (1)请在横线处填入合适的代码。 (2)若输入原始字符串和目标字符串均为“abcde”,程序中函数调用返回的值为__0__。 【解析】 (1)①初始化位置变量pos,初始值pos=0。②若比较过程中不存在相同字符,从目标字符串ed 中依次读取字符,答案为s[pos]!=x。③利用函数cgs()返回值,得到列表jg的索引,答案为jg[cgs(bg,ed)]。 (2)“adcde”是“abcde”的子序列,故函数的返回值为0。 6.学校举办了“语文作文现场赛”,参赛同学的成绩存储在文本文件“gra.txt”中,如图1 所示(每一行记录一名同学的姓名和成绩,以“: ”分隔)。陈老师利用Python 程序对作文成绩进行处理,统计出各个分数等级的人数,并输出结果。程序运行界面如图2所示。 实现上述功能的Python 程序如下,请在横线处填入合适的代码。 def cla(x): #判断成绩等级 if x>=50: return ”A” elif x>=40: return ”B” elif x>=30: return ”C” else: return ”D” gra=[] #存储各个整数型成绩 num=[0]*4 f=open(”gra.txt”) lines=f.readlines() #将对象f 的数据按行存入列表lines 中 f.close() #关闭文件 for line in lines: #循环读取列表lines 中的每个元素,并做相应处理 a=line.strip().split(”: ”) #去除结尾的换行符并以冒号为分割符进行分割返回列表 gra.append(①__int(a[1])__或int(a[-1])__ ) for i in range(len(gra)): #统计各等级人数 t=②__cla(gra[i])__ num[ord(t)-65]+=1 print(”成绩分布如下: ”) for i in range(len(num)): #输出统计结果 print(chr(i+65)+”等级有”+③__str(num[i])__+”人”) 【解析】 ①由代码注释中可知,gra列表存储的为各个整数型成绩,所以使用append()函数添加的也是整数型成绩,列表a(正向索引)第0号索引的元素为同学姓名(字符串型)、第1号索引的元素为同学成绩(字符串型);a列表(负向索引)第-2号索引的元素为同学姓名(字符串型)、第-1号索引的元素为同学成绩(字符串型),要将成绩加入列表gra中,故应该为int(a[1])或int(a[-1])。②由“num[ord(t)-65]+=1”可得,t应该为当前学生成绩对应的等级,所以需要从gra列表中取出每名同学的整数型成绩作为参数传入自定义函数cla()中返回对应的等级,故应该为cla(gra[i])。③由题干可知同学成绩对应的等级有A、B、C、D共4种等级,num列表存储4种等级对应的人数并且为整型,程序最后数据的结果为字符串的“+”拼接,故应该为str(num[i])。 7.2023·绍兴鲁迅中学检测判断两个字符串是否相等:规定字符“?”为万能字符,即可与任意一个字符相等,在忽略字符串中空格以及不区分大小写的前提下,判断两个字符串是否相同。Python 程序运行界面如图所示。 (1)根据以上规则,字符串“?? ad?? dadwd”和字符串“a? ?? c?d?d? d”__相同__(选填:相同/不相同)。 (2)实现上述功能的Python 程序段如下,请在横线处填入合适的代码。 s1=input(”请输入一个字符串: ”) s2=input(”请输入另一个字符串: ”) s1=s1.upper() s2=s2.upper() s=”” for i in s1: #将字符串s1 中的空格去掉 if i!=” ”: ①__s=s+i__ s1=s #同上,将字符串s2 中的空格去掉,代码略 i=0 if len(s1)!=len(s2):  print(”两个字符串不相同”) else: while i<len(s1): c1=s1[i];c2=s2[i] if c1==c2: ②__i=i+1__或i+=1__ else: if ③__c1==”?”__or__c2==”?”__: i+=1 else: break if i==len(s1):  print(”两个字符串相同”) else: print(”两个字符串不相同”) 【解析】 本题主要考查字符串的综合应用。(1)依照题意可知,“?”作为万能字符与任意字符相等,问题中的两个字符串依次比较是相同的。(2)填空①处实现去掉字符串s1的空格,所以遍历字符串时为非空的时候,进行字符的连接;填空②处当遍历至相同位置的字样相等时,则进行下一个位置的字符比较;填空③处当两个相同位置的字符不相等时,则考虑“?”作为万能字符的情况。 【B级 素养形成与评价】 8.某学校餐厅实行学生点餐系统, 每餐提供荤素搭配营养丰富的五个套餐(分别是A、B、C、D、E)让大家选择。小明根据所学知识,在班级同学均已完成点餐的情况下,对某一次的原始点餐数据(包含学号和套餐名称,部分界面如图1所示)进行了一系列处理,分析最受同学欢迎的套餐及其点餐率,便于向学校餐厅提出更好的建议。小明编写了以下程序, 运行结果的部分截图如图2所示。 图1         图2 请在横线处填入合适的代码。 #从文件”meal.txt”读取学生原始点餐数据,存储于列表text中 f=open(”meal.txt”,encoding=”utf——8”) #打开文件 text=[] s=”ABCDE” sno=”” line=f.readline( ) while line:  #从文件中读取一行 for i in range(len(line)): if line[i] in s: ①__meal=line[i]__ break elif ”0”<=line[i]<=”9”: sno=sno+line[i] elif line[i]==””: i+=1 text.append ([sno,meal]) sno=”” line=f.readline( ) f.close () #查找最受欢迎的套餐, 并统计其点餐率 maxn=0 num={”A”:0,”B”:0,”C”:0,”D”:0,”E”:0} ②__n=len(text)__ for i in range(n): x=text[i][1] ③__num[x]+=1__ if num[x]>maxn: maxn=num[x] mealn=x rate=round(maxn/n*100,2) print(”最受欢迎的套餐是: ”,mealn) print(”点餐率为: ”,rate,”%”) 【解析】 从“if num[x]>maxn:”语句可以看出num[x]代表某个套餐的数量。从下面的程序可以看出num是一个字典。在初值里放置各个套餐的数量为0。因此在num初值与if语句之间应该要对字典num记录的各个套餐数量进行统计, 统计的方式应该是出现一种套餐, 该套餐的数量要加1。从上下语句来看只有变量x才会可能是套餐的类别。因此③处填num[x]+=1。x代表套餐名,则text[i][1]代表套餐名。再向上查看text列表的产生过程。text列表的数据通过“text.append([sno,meal])”来产生,因此变量meal代表套餐名,而且meal变量值在前面没有产生过, 因此在①处必然填对变量meal的赋值语句。学生点餐的原始数据是从文件“meal.txt”读进来的,从语句“if line[i] in s”可以看出line[i]就是套餐名,因此①处填meal=line[i]。在统计各个套餐数量时, 必须全体参与。在“for i in range(n)”语句中, 变量n的值还没有初值,因此②处填n=len(text)。 9.2023·宁波中学检测某字符串加密程序的功能是:输入一个仅由小写英文字母组成的字符串,输出加密后的密文,加密规则如下: ①将明文字符串分成3个字符一组,对每组字符进行②③处理,剩余不足3个的字符不做处理。 ②随机产生由26个不重复的小写英文字母组成的密文串,将明文中的每组字符分别替换为密文串中对应的字符,若密文串如表1所示,则明文“abcdefghijkl”替换为“jpgntkwmaery”。 小写字母 a b c d e f g h i j k l m 密文串 j p g n t k w m a e r y l n o p q r s t u v w x y z d c q f i x u h z b o v s 表1 ③输入一串数字密钥(由1~9数字组成),密钥中每个数字依次为每组字符向右旋转次数,若密钥长度不足,则重复使用密钥,数字与对应旋转次数见表2。例如,数字密钥为“45”,则将第1组字符向右旋转1次,如“jpg”→“gjp”,将第2组字符向右旋转2次,如“ntk”→“knt”→“tkn”,第3组字符向右旋转1次,第4组字符向右旋转2次,依次类推。 数字 1 2 3 4 5 6 7 8 9 旋转次数 1 2 3 1 2 3 1 2 3 表2 ④将每组处理后的字符串顺序连接,每组之间用“*”作为间隔符号,再将分组剩余的字符倒序连接,得到密文。 程序运行结果如下: (1)若明文为“abc”,随机产生的密文串如图所示,数字密钥为“13”,则密文为__omg*__。 (2)实现上述功能的Python程序如下,请在横线处填入合适的代码。 def jmdic(): #随机生成由26个不重复的小写英文字母组成的密文串 #返回密文字符串,代码略 def rotate(array,k): #旋转 for i in range(k): temp=array[len(array)-1] for j in range(①__len(array)-2,-1,-1__ ): array[j+1]=array[j] array[0]=temp ming=input(”请输入明文: ”) mkey=input(”请输入一串数字密钥: ”) n=len(ming);m=len(mkey) a=[] dic=jmdic() print(”26个小写字母对应的密文串: ”,dic) for i in range(n//3): #对每组字符进行处理 a.append([])#append():在列表末尾添加元素 for j in range(3): a[i].append(dic[ ]) keynum=②__int(mkey[i%m])__ k=(keynum-1)%3+1 rotate(a[i],k) ans=”” for i in range(n//3): #将每组字符进行连接 for j in range(3): ③__ans+=a[i][j]__ ans+=”*”*(i+1) ans=ming[i*3+3:]+ans print(”密文为: ”,ans) (3)加框处代码有误,请改正:__ord(ming[i*3+j])-97__或__ord(ming[i*3+j])-ord(”a”)__。 【解析】 (1)先在密文串中找到密文字符mgo;再根据数字密钥为“13”可知,向右旋转1次,结果为omg;最后每组之间用“*”作为间隔符号,得到结果。 (2)①调用rotate(a[i],k),将每组进行k次选择;rotate()函数中,先将最后1个位置值记下,并将其余字符后移,最后把记下的值放置在第1个位置;循环从后往前进行移动;②根据组号获取相应的数字密文,并转换成整数型;③每3个一组将密文相连,i为组号,j为组内列号。 (3)明文3个1组,类似矩阵,i为行号,j为列号,求解下标。 10.某简易加密算法设计如下: ①在输入的字符串中从前往后提取英文字母,作为需要加密的明文(明文字符数必须为3 的倍数,不足3 位的字符舍去); ②将明文ASCII 码分成3 个字节(3 个英文字母)一组,一次连接后得到24 位二进制数; ③将得到的24 位二进制数字按每6 位一组分成4 组; ④将③中得到的4 组二进制数分别转换为4 个十进制数; ⑤将④中得到的十进制数之间用随机产生的大写字母连接起来,以大写字母结尾并输出。 按照上述规则,小张设计了一个加密Python 程序,程序运行结果如图所示。 (1)观察上面运行结果,字符串“one”的密文为:__27V54F57D37A__。 (2)请在横线处填入合适的代码。 from random import randint s=input(”请输入字符串: ”) a=[];n=0 for ch in s: if ch>=”a” and ch<=”z” or ch>=”A” and ch<=”Z”: a.append(ord(ch)) n=n+1 for i in range(n-1): print(a[i],end=” ”) print(a[n-1]) k=n//3 b=[0]*4*k for i in range(k): b[i*4+0]=a[i*3+0]//4 b[i*4+1]=①__a[i*3+0]%4*16+a[i*3+1]//16__ b[i*4+2]=a[i*3+1]%16*4+a[i*3+2]//64 b[i*4+3]=a[i*3+2]%64 mw=”” for i in range(4*k): mw=mw+str(b[i])+②__chr(randint(65,90))__或__chr(randint(0,25)+65)__或__chr(randint(1,26)+64)__或其他等价答案__ # 利用randint() 函数随机产生大写字母 print(”加密后的密文为 :  ”+mw) 【解析】 (1)one是第三组,故在密文中将数字4个分为一组, 找到对应的第三组,带上每个数之后的字母,故答案为27V54F57D37A。 (2)第一个for循环取出所有字母,转成ASCII 码后放入列表a 的末尾。第二个for 循环输出所有字母的ASCII码,并在最后一个后面换行。a列表中的元素3个一组,每个8位二进制,共k组。b列表存放不包含字母的结果,4个一组,每个6位二进制,共k组。第三个for 循环把每组a 中3 个8 位二进制转换成b 中4 个6 位二进制,i为组号,从0 开始,R=2。 X*Rn:把X表示成R进制后,后面添加n个零。 X//Rn:把X表示成R进制后,去掉低位n个。 X%Rn: 把X表示成R进制后,取出低位n个。 第四个for循环,添加随机字母,即随机生成65~90之间的整数。randint()函数生成两个参数之间的闭区间的整数,单独导入,直接写即可。 11.在单一密码表的基础上,维吉尼亚密码引入了一个26×26 的英文字母方阵密表(如下图所示),结合密钥,对信息加密。比如明文为“THEbookANDTHEpencil”,密钥为“BIG”,加密时,以明文为行,密钥为列,行和列交叉得到密文“UPKcwulITEBNFxkokom”。当密钥长度小于明文长度时,密钥循环使用。请编写一个Python程序,输入明文(仅有字母)和密钥,输出“维吉尼亚”密文。 (1)若输入明文“Python”,密钥“BIG”,则加密后的密文为__Qgziwt__。 (2)实现上述功能的程序段如下,请在横线处填入合适的代码。 mingwen=input(”请输入明文: ”) miyao=input(”请输入密钥: ”) miyao=miyao.upper() #将密钥的小写字母转为大写字母 print(”密文为: ”,end=””) for i in range(len(mingwen)): ①__ch=mingwen[i]__ if ord(ch)<65 or ord(ch)>90 and ord(ch)<97 or ord(ch)>122: print(ch,end=””) continue # continue 跳出本次循环 flag=False if ord(ch)>=97 and ord(ch)<=122: #将明文的小写字母转为大写字母 flag=True ch=ch.upper() ②__p=i%len(miyao)__ ch2=miyao[p] newp=③__(ord(ch)-65+ord(ch2)-65)%26+65__ #加密处理 if ④__flag__或__'a'<=mingwen[i]<='z'__:  newp=newp+32 print(chr(newp),end=””) 【解析】 (1)明文:P y t h o n 密钥:B I G B I G 密文:Q g z i w t (2)①提取每个明文字符。②p 为密钥的位置,由于密钥长度小于明文,需要循环使用,利用明文位置转换为密钥位置。③根据维吉尼亚密码表转换密文,首先将明文和密钥都转换为英文字母表的位置,再将明文的位置后移密钥的位置数,移动时采用约瑟夫环形式。④将原来是小写的转换为小写,通过flag判断原来是否为小写。 12.甲、乙双方进行一场球类比赛,一局计分的规则是:赢1球得1分,用“1”表示;输一球失1分,用“0”表示。当任一方得分大于等于6分,且领先对方2分及以上,领先方赢一局。如甲选手一局比赛数据为“101110101”,表示甲选手得6分失3分,局比分6∶3。 小王用一个字符串记录了甲选手多局比赛数据,其中有一处错误,位于连续多个“0”的最后一个。为了找出错误,小王的处理方法如图1所示,对示例中疑似错误的位置6和20分别进行数据修改,并统计每局比分。他编写了Python程序,功能如下:输入记录数据,输出修改位置以及修改后每局的比分。程序运行界面如图2所示。 实现上述功能的Python程序如下,请回答下列问题: rec=input("请输入记录数据: ") s=list(rec) ①__n=len(rec)__或__n=len(s)__ k=m=i=0 pos=[] while i<n: k=i while s[i]=="0"and i<n: i=i+1 if ②__i-k>=2__:  m+=1  pos.append(i-1) i=i+1 print("分析结果为: ") print("修改位置以及修改后每局的比分: ") for i in range(m): f1=f2=0 k=pos[i] s[k]="1" sp=""+str(k)+"" for j in range(n): if s[j]=="1": f1+=1 else: f2+=1 if : sp=sp+"/"+str(f1)+":"+str(f2) f1=f2=0 if f1+f2>0: sp=sp+"/"+str(f1)+":"+str(f2) print(sp) ③__s[k]="0"__ (1)请在横线处填入合适的代码。 (2)程序中加框处代码有误,请改正:__(f1>=6__or__f2>=6)__and__abs(f1-f2)>=2__。 【解析】 (1)本题的算法思想是首先找出01串中连续两个及以上“0”的位置(在列表中的索引位置),然后根据记录的位置,分别将记录的位置上的“0”修改为“1”,统计比分,记得统计好比分后,应将记录位置上的字符恢复为“0”。横线①处的功能是求01串中字符的个数,因此代码为n=len(rec),等价于n=len(s);②处代码的功能是判断连续“0”的个数是否为2个及以上,k为连续“0”字符串中的起始位置,i为连续“0”字符串后的第1个“1”的位置,则连续“0”的个数为i-k,因此②处代码为i-k>=2;③处代码的功能是恢复s[k]元素的值为“0”,因此代码为s[k]="0"。 (2)加框处的代码表示一局比赛结束的条件,根据题意可知当任一方得分大于等于6分,且领先对方2分及以上时一局比赛结束,因此加框处语句应修改为(f1>=6 or f2>=6) and abs(f1-f2)>=2。 13. 2023·金华一中检测在战场上发送的电报,通常需要加密成密文电报。现截获一份由小写字母和空格标点符号组成的敌军密文电报,需要对其进行解密。已知截获敌军的数据加密规则如下: 第一步,对数据进行栅栏密码加密,加密方法如下: 把明文按N 个字符为一栏进行拆分,剩余字符不足N 个也自成一栏,依次取每栏相同位置的字符生成N 组新的字符串,将这些字符串连在一起,得到栅栏密码加密的数据。 例如:明文M=“xinxijishu”,每栏个数N=3,进行栅栏密码加密: 明文 xinxijishu 每3个一栏 xin xij ish u 取字符 每栏第1个字符 每栏第2 个字符 每栏第3个字符 xxiu iis njh 将3组字符串按顺序链接得到栅栏加密的密文: xxiuiisnjh 第二步,将第一步得到的数据进行维吉尼亚密码加密,加密方法如下: 对密文中的每一个小写字母,进行字母后移K 位操作,如K=3 时,a→d,b→e,…,x→a,y→b,z→c。 栅栏加密后的数据 x x i u i i s n j h 每字母后移K=3之后 a a l x l l v q m k 最终得到密文:aalxllvqmk (1)已知栅栏密码的每栏个数N=2,密钥K=3,则明文”mevlqk”按照上述算法加密后的密文为__python__。 (2)小明根据上述加密算法,设计了一个解密程序,运行界面如下: 由于解密时不知道加密时采用的N、K 等参数,小明设定为,当解密结果中出现2 个以上常见英文单词(如“the”“is”……)时,就作为一个解密结果输出,虽然程序运行时可能有多个输出结果,但也不会太多,因此不再考虑继续优化参数,改为人工处理。 其Python程序如下,请在横线处填入合适的代码。 (3)程序中加框处代码有误,请改正:__dest=dest[:p]+tmps[i]+dest[p+1:]__或其他等价答案__。 Num=2 KeyWords=[”the”,”is”,”to”,”of”,”in”,”not”,”and”,”for”,”that”] def check(s,n,words): for word in words: if (” ”+word+” ” in s) or (word+” ” in s) or (” ”+word in s):     n-=1 elif (” ”+word+”,” in s) or (” ”+word+”.” in s) or (word+”,” in s) or (word+”.” in s):      n-=1 elif (”.”+word+” ” in s) or (”,”+word+” ” in s) or (”.”+word in s) or (”,”+word in s):      n-=1 return ①__n<0__或其他等价答案__ def decypt(src): result=[] for N in range(1,10): #假定每栏最多9 个 for K in range(26): tmps=”” for i in range(len(src)): if ”a”<=src[i]<=”z”: ②__tmps=tmps+chr((ord(src[i])-97-K)%26+97)__或__tmps=tmps+chr((ord(src[i])-97+K)%26+97)__或其他等价答案__ else: tmps=tmps+src[i] dest=” ”*len(tmps) p=0 for i in range(len(tmps)): p=p+N if p>=len(tmps): ③__p=p%N+1__或其他等价答案__ if check(dest,Num,KeyWords): result.append(dest) return result f=open(”密文.txt”) in_str=f.read() f.close() print(”待解密密文: ”,in_str) out_str=[] out_str=decypt(in_str) print(f”解密候选结果有{len(out_str)}个,分别为: ”) for i in range(len(out_str)): print(f”[原文{i+1}]”,out_str[i]) 【解析】 (1)栅栏密码的每栏个数N=2,则为mvqelk,小写字母在字母表循环后移k 个位置,答案为python。 (2)①由函数的调用位置可判断,返回的是逻辑值,由解密的附加条件可知,当常见英文单词出现2 个以上时,作为解密结果输出,确定为当n 小于0 时返回True,否则返回False 确定答案为n<0;②将字母循环前移k 个位置,固定写法,确定答案为tmps=tmps+chr((ord(src[i])-97-K)%26+97);③由栅栏加密规则,可以推导p 的取值规律为0369,147,258,可得出答案为p=p%N+1。 (3)将字符替换到p 位置上字符,由于字符串为不可变序列,不能使用dest[i]=tmps[p]语句,使用方法为切片取出p 位置前所有字符dest[:p],连接要替换字符tmps[i],然后连接p 以后所有字符dest[p+1:],确定答案为dest=dest[:p]+tmps[i]+dest[p+1:] 或其他等价答案。 学科网(北京)股份有限公司 $$

资源预览图

高效作业8 第8课 字符串2——字符串应用-【精彩三年】2024-2025学年高中信息技术选择性必修1课程探究与巩固Word教参(浙教版2019)
1
高效作业8 第8课 字符串2——字符串应用-【精彩三年】2024-2025学年高中信息技术选择性必修1课程探究与巩固Word教参(浙教版2019)
2
高效作业8 第8课 字符串2——字符串应用-【精彩三年】2024-2025学年高中信息技术选择性必修1课程探究与巩固Word教参(浙教版2019)
3
所属专辑
相关资源
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。