高效作业8 第8课 字符串2——字符串应用-【精彩三年】2024-2025学年高中信息技术选择性必修1课程探究与巩固Word教参(浙教版2019)
高效作业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;
④所有的密码之间用空格隔开。
学科网(北京)股份有限公司