高中信息技术浙教版(2019)选修1:3.1 字符串-课后练习(2份,含答案)

资源下载
  1. 二一教育资源

高中信息技术浙教版(2019)选修1:3.1 字符串-课后练习(2份,含答案)

资源简介

作业练习
课程基本信息
学科 信息技术 年级 高二 学期 春季
课题 字符串
教科书 书 名:数据与数据结构 出版社:浙江教育出版社
学生信息
姓名 学校 班级 学号
作业练习
字符串的长度是指 A.字符串中所含不同字母的个数 B.字符串中所含字符的个数 C.字符串中所含不同字符的个数 D.字符串中所含非空格字符的个数 获取字符串x长度的方法是 A.x.len() B.x.length() C.len(x) D.length(x) 有Python程序段如下: count=0 L=["one","two","three","four","five","six"] for i in L[1:4]: count=count+len(i) print(count) 执行该程序段后,输出的结果是 A.11 B.12 C.16 D.19 有Python程序段如下: n="p2y8t1h7o3n5";p="" for i in n: if "0"<=i<="9": if p=="": p+=i elif i>=p[-1]: p+=i elif i课程基本信息
学科 信息技术 年级 高二 学期 春季
课题 字符串的应用
教科书 书 名:数据与数据结构 出版社:浙江教育出版社
学生信息
姓名 学校 班级 学号
作业练习
(22.04 宁波金兰教育组织高二技术)已知某数据加密方法如下:将字符的内码以字节为单位进行加密。将每个字节的后5位转换为十进制数,后面跟上“,”和该字节的前3个二进制位转换为十进制数,形成该字节的加密形式。例如: 内码(十六进制)AFD2二进制1010111111010010后5位十进制1518前3位十进制56加密结果15,5,18,6
按照上述规则,小陈设计了一个Python的解密程序如下所示。请回答下列问题: (1)若加密结果为“3,6,5,6”,则原来十六进制内码为 。 (2)完成划线处程序代码。 def dtoh(x): s1="0123456789ABCDEF" str="" while x>0: str=s1[x%16]+str ① return str a=[0]*50 k=0;p=0 jm="" s=input("请输入密文:") for i in range(len(s)): ch=s[i] if "0"<=ch<="9": ② else: if k%2==1: a[k]=p*32+a[k-1] else: ③ k+=1;p=0 a[k]=p*32+a[k-1] for j in range(1,k+1,2): jm+=dtoh(a[j]) print(jm) (22.08 A9协作体暑假返校联考)字符串分段。输入一串仅由小写字母组成的字符串 s,将这个字符串划分为尽可能多的小片段, 要求同一个字母只出现在其中的一个片段中,并按照分段顺序逐行输出分段结果。程序运行界面如下图所示。 (1)实现上述功能的 Python 程序如下,请在划线处填入合适的代码。 s = input("请输入一串仅包含小写字母的字符串:") c = 0 p = [-1]*52 #数组 p 用来记录各个小写字母出现的起始位置和结束位置 #a[0]记录 a 出现的起始位置,a[1]记录 a 出现的结束位置,依次类推 for i in range(0,len(s)): #记录各字符第一次和最后一次出现的位置 a = ① if p[2*a] == -1: p[2*a] = i else: p[2*a+1] = i for i in range(0,26): if p[2*i] > p[2*i+1]: p[2*i+1] = p[2*i] #只出现一次的字符,起始位置就是结束位置 if p[2*i] != -1: c += 1 for i in range(0,c): #将字符位置按照出现的起始位置升序排序 for j in range(25,i,-1): if p[2*j] > -1 : if p[2*(j-1)] > p[2*j] or ② : p[2*(j-1)],p[2*j] = p[2*j],p[2*(j-1)] p[2*(j-1)+1],p[2*j+1] = p[2*j+1],p[2*(j-1)+1] t1,t2 = p[0],p[1] #字符串分段 for i in range(1,c): if p[2*i] < t2 and p[2*i+1] > t2: ③ elif p[2*i] > t2: print(s[t1:t2+1]) t1,t2= p[2*i],p[2*i+1] print(s[t1:t2+1]) (2)运行程序后,若输入的字符串 s 为“hshjhqueeqabaa”,输出的结果一共有 行,其中,第二行显示结果为 。
【参考答案】 【答案】(1)C3C5 (2)①x//=16 或其他等价答案 ②p =p*10 +int(ch)或其他等价答案 ③a[k]=p或其他等价答案 【解析】(1)由题可知每两个数字构成一个字节,按照题目要求,第二个数字变换成二进制需要在后面添加5个0,也就是扩大32倍。再加上第一个数字就是该字节的10进制。按照该要求对3,6,5,6进行计算可得其16进制为C3C5。 (2)①当前将数值转成16进制,上面已经取得余数,接着需要将该数整除16,因此该空答案为x//=16。②p做为当前该数的临时存储变量存在,用于临时存储当前这一位的数值。其答案为p =p*10 +int(ch)。③当k为偶数,说明这是第一个数,从题目可知,第一个数是做为后几位二进制存在,其数值不需要转换,直接进行存储即可。其答案为a[k]=p。 【答案】(1)①ord(s[i])-97 或 ord(s[i])-ord("a") ②p[2*(j-1)] == -1 ③t2 = p[2*i+1] (2)3;queeq 【解析】本题考察算法的综合应用,涉及的知识点有程序的基础知识、程序结构、字符串的处理、顺序查找、冒泡排序等。 (1)①根据注释:记录各字符第一次和最后一次出现的位置和相应的代码 if p[2*a] == -1: p[2*a] = i,此处代码应该是将相应字符转换为对应的数组索引(下标)a = ord(s[i])-97。②程序代码采用冒泡排序。根据题意和前后代码,此时除了按起始位置升序排序外,还应该将没有出现过的字符通过排序,放到数组的尾部。所以往后移动的除了 p[2*(j-1)] > p[2*j]外,另外满足 p[2*(j-1)] == -1(没有出现过的字符)也要后移。③根据题意,再根据输出语句print(s[t1:t2+1])和输出条件:p[2*i] > t2,此处代码是要确定某个片段的起点 t1 和终点 t2。而题目中对某个片段的要求是:同一个字母只出现在其中的一个片段中!所以当片段的终点 t2,介于后一个字符起点和终点之间时,要将片段的结束位置更新为后一个字符的结束位置:t2=p[i*2+1],依次类推。直到 t2 小于下一个字符的起点(p[i*2]>t2),此时输出片段,更新下一个片段的起点和终点。 (2)根据题意要求,字符串“hshjhqueeqabaa”,可以分成三段:“hshjh”、“queeq”、“abaa”,第 2 段是:“queeq”。

展开更多......

收起↑

资源列表