资源简介 4.4 字符串学习目标 1.通过问题解决,理解字符串的概念和特性。2.掌握字符串的基本操作,并能编程实现。(2024年1月浙江选考)若字符串s的值为"abcde",执行如下程序段后,变量res的值不可能是( )from random import randintres=" "i,j=0,len(s)-1while i=i: if randint(0,1)==0: #randint(0,1)随机生成0或1 res+=s[i] i+=1 else: res+=s[j] j-=1A."abced" B."aecbd"C."aedbc" D."edcba" 字符串是由零个或多个字符来自ASCII、GB2312等多种字符集组成的有限序列。字符串是一种线性表结构,除第一个和最后一个元素外,其他元素都有一个唯一的前驱和后继,可以用元素在字符串中的相对位置作为标号来访问每个元素。在用Python实现的字符串中,有正索引标号和负索引标号,字符串的操作可以实现从字符串中提取子串、将字符串转换成小写或大写、字符串匹配等。实际应用中,基本的操作有子串判断、求子串、字符串的连接等。例1 有如下Python程序段:s1="schoolroom";s2="oo"i=0;m=0while i<=len(s1)-len(s2): if s1[i:i+len(s2)]!=s2: i+=1 else: i+=len(s2) m+=1该程序段执行后,m的值为( )A.6 B.7C.8 D.9变式1 编写一个计算字符串中最多连续相同字符个数的Python程序段如下:s=input("请输入字符串:")k=1;maxlen=0for i in range(1,len(s)): if s[i]==s[i-1]: k=k+1 else: if k>maxlen: maxlen=k k=1print("最多连续相同字符个数为:",maxlen)用以下输入数据测试该程序段,能测出程序错误的是( )A.AAABBCCD B.AABBBCDDC.AABCCCDD D.ABBCCDDD例2 某字符串s是由一个原始字符串反复重叠形成的。例如字符串"abcababcababcab"是由原始字符串"abcab"重叠而成。检测的算法:将该字符串划分成若干段,若字符串每一段与第一段相同,则认为该字符串是由这段字符重叠而成。为查找字符串s的原始字符串,有如下程序段:s="abcababcababcababcababcab"n=len(s);ans=""for i in range(① ): if n %i==0: for j in range(② ): if s[j:j+i]!=s[:i]: break else: ans=s[:i]print("原始串是:",ans)则划线处应填写的语句是( )A.①1,n//2 ②i,n,iB.①1,n//2+1 ②i,nC.①1,n//2 ②i,nD.①1,n//2+1 ②i,n,i变式2 找出字符串s中长度为k,包含元音字母数最多的子串。例如:当k=3,s="trouble"时,结果是"rou"。实现该功能的部分程序段如下,方框中应填入的正确代码为( )v="aeiouAEIOU"cnt=0;res=s[:k]for i in range(k): if s[i] in v: cnt+=1m=cntfor i in range(k,len(s)): if cnt>m: m=cnt;res=s[i-k+1:i+1]print(res)A.if s[i] in v: cnt+=1if s[i-k+1] in v: cnt-=1B.if s[i] in v: cnt+=1if s[i-k] in v: cnt -=1C.if s[i] in v: cnt+=1if s[i-k] in v: cnt+=1D.if s[i] not in v: cnt -=1if s[i-k+1] in v: cnt+=11.已知字符串s="python",现要将s中的第一个字符改为大写字母,以下操作方法可行的是( )①s[0]="P"②s[0]=chr(ord(s[0])-ord("a")+ord("A"))③s="P"+s[1:]④s=s[0].upper()+s[1:]A.①② B.③④C.①②③ D.①②③④2.正读和反读都一样的字符串称为“回文字符串”,现要判断某非空字符串s是否为“回文字符串”。实现该功能的程序段如下,划线处应填入的正确代码为( )s=input("请输入字符串:")n=len(s);k=n//2if : print("字符串:",s,"是回文字符串")else: print("字符串:",s,"不是回文字符串")A.s[:k]==s[k+1:][::-1]B.s[:k]==s[n-k:][::-1]C.s[:k+1]==s[(n+1)//2:][::-1]D.s[:k+1]==s[k+n%2:][::-1]3.字符串s由数字字符组成,且首位不为"0"。现需要在s中某一位置插入1位数字字符,得到新s,使新s的值最大。例如s串为"975463",插入字符"8"后,得到最大值"9875463"。实现该功能的程序段如下,方框中应填入的正确代码为( )#输入字符串s,长度为n;输入字符串ch,长度为1,代码略。i=0while i st=s[0:i]+ch+s[i:n]A.if ch>=s[i]: i+=1else: breakB.if ch i+=1else: breakC.if ch breakelse: i+=1D.if ch>s[i]: breakelse: i+=14.以下Python程序是统计字符串s1中存在子串s2的个数。例如:字符串s1的值为“abcabcb字符串s2的值为“abc”,程序运行结果为“2”。s1="abcabcbabc";s2="abc"n1=len(s1);n2=len(s2)i,num=0,0while i<=n1-n2: if ① : num=num+1 ② i=i+1print(num)要正确实现程序功能,划线处填写的代码为( )A.①s1[i:i+n2]==s2 ②i+=n2-1B.①s1[i:n2]==s2 ②i+=n2C.①s1[i:i+n2]==s2 ②i+=n2D.①s1[i:n2]==s2 ②i+=n2-15.有下列Python程序段:s1="pytorch";s2="python";s=""i=0;j=0while i if s1[i]>s2[j]: s=s+s1[i] else: j+=1 i+=1执行以上程序段后,s中的值是( )A."or" B."ch"C."on" D."to"6.某Python程序如下:s=input("请输入字符串:")ans="";a=[1,2,3]for i in range(len(s)): x=s[i] key=a[i%3] if "A"<=s[i]<="Z": ans=ans+chr((ord(x)-65+key)%26+65) else: ans=ans+xprint(ans)执行该程序后,输入"A1b2D3"输出的结果为( )A.2b1BF B.B1b2F3C.B3e3F6 D.6F3e3B7.有如下Python程序段:s1="ababccabc";s2="abc"i=0;m=0while i<=len(s1)-len(s2): if s1[i:i+len(s2)]!=s2: #① i+=1 else: s1=s1[:i]+s1[i+len(s2):] i=i-len(s2)+1 m+=1该程序段执行后,下列描述正确的是( )A.①所在行的条件将会被判断5次B.i的值为-2C.m的值为2D.s1的值为"abc"8.某Python程序如下:s=input("请输入数字字符串:")m1,m2,r=0,0,0i=0while i if i%2==0: m1=m1+int(s[i]) else: m2=m2+int(s[i]) r=m1 if m1>m2: r=m2 i=i+1print(r)程序运行时,若输入“4753”,则输出的结果是( )A.1 B.8C.9 D.109.有如下Python函数:k=1ch=s[0]for i in range(1,len(s)): if ch==s[i]: k+=1 else: if k==0: ch=s[i] k=1 else: k-=1变量s分别取下列值并运行后,变量ch的值不为"a"的是( )A."aaasd" B."asdsa"C."asads" D."ssdaa"1.有如下Python程序段:s="红橙黄绿青蓝紫"x=2while len(s)>1: x=(x+3)%len(s) s=s[:x]+s[x+1:]print(s)执行该程序段后,输出的内容是( )A.红 B.橙C.绿 D.蓝2.有如下Python程序段:p={};s=input()for i in range(len(s)): p[s[i]]=ii=0while i n=p[s[i]] j=i+1 while j<=n: if p[s[j]]>n: n=p[s[j]] j=j+1 print(s[i:j]) i=j若输入“arrayiybi”,则输出结果的最后一行内容是( )A.arra B.yiyC.iybi D.yiybi3.有如下Python程序s1="0312";s2="ABCDEFGH"m=0;c=""for i in range(len(s2)): k=int(s1[i%4]) m=4*(i//4) c+=s2[k+m]执行该程序段后,变量c的值是( )A."ADBCADBC" B."ABCDEFGH"C."AHBGCFDE" D."ADBCEHFG"4.有如下程序段:p=0for i in range(len(a)): if not("a"<=a[i]<="z"): j=i;pt=a[i] while j>p: a[j]=a[j-1] j=j-1 p=j;a[j]=ptprint(a[4])若列表a=["-","p","y","-","t","h","o","n","-"],则运行该程序段后,输出的值为( )A."-" B."p"C."y" D."t"5.有如下Python程序段:s="Secret";t=[1,0,2]r=[""]*len(s)for i in range (len(s)): m=t[i % len(t)] if i r[m]=s[i] else: r[m+len(t)]=s[i]print ("".join(r)) #将列表r中的元素连接起来,并返回一个新字符串运行该程序段后,输出的结果是( )A.Secret B.eScertC.retSec D.ceSter6.有如下Python程序:import randomdef f(s): i,j=0,len(s)-1 k=random.randint(1,3) ans="";flag=True while i<=j: if flag or s[i]<=s[j]: ans+=s[i];i+=1 else: ans+=s[k];j-=1 flag=not flag return ans执行语句print(f("avocado"))后,下列输出结果不可能的是( )A.aavaoac B.avvvovcC.aovoooc D.acvcocc7.有如下Python程序段:s=input("输入字符串:")n=len(s);result=""i,j=0,n-1while i=n//2: if s[i]>s[j]: result+=s[i];j-=1 elif s[i] result+=s[j];i+=1 else: i+=1;j-=1print(result)执行该程序段,分别输入下列选项中的字符串,输出结果不为“555”的是( )A."51234" B."12535"C."54321" D."55123"8.有如下Python程序段:s="Love me,love my dog. Please love my everything."key=[".","love","o","m"]word_n={};s0=""for i in range(len(key)): s0=s word_n[key[i]]=0 while len(s0)>0: if ① : word_n[key[i]]+=1 p=s0.find(key[i]) #查找key[i]在s0中出现的起始索引 s0=② else: breakprint(word_n)执行该程序段后,结果为:{'.':2,'love':2,'o':4,'m':3},则上述程序段划线处的代码分别是( )A.①key[i] in s0 ②s0[p:p+len(key[i]+1)]B.①key[i] in word_n ②s0[p+len(key[i]):]C.①key[i] in s0 ②s0[p+len(key[i]):]D.①key[i] in word_n ②s0[p:p+len(key[i]+1):]9.执行如下程序段后,s="wz19Lht"result=ch=""flag=Truefor i in range(len(s)): ch=s[i] if 'a'<=ch<='z': if flag: ch=chr(ord(ch)-ord('a')+ord('A')) flag=not flag elif '0'<=ch<='9': ch=str((int(ch)+1)%10) result=ch+resultprint(result)输出的结果为( )A.Wz02LHt B.tHL02zWC.WZ02LHT D.THL02ZW10.有如下程序段:s="aabbbccdd"n=len(s);i=3while i if s[i]==s[i-1] and s[i-2]==s[i-3]: s=s[:i]+s[i+1:] else: i+=1执行该程序段后,变量s的值是( )A."abcd" B."aabbcd"C."aabcd" D."aabccd"11.有如下Python程序:import randoms1="abcde";s2="12345";res=""i,j=0,len(s2)-1while i<=len(s1)-1 and j>=0: k=random.randint(0,1) if k==0: res+=s1[i+k] i+=1 else: res+=s2[j-k] j-=1print(res)执行程序后,变量res不可能的是( )A.ab4c321d5 B.4a32b1cdeC.5abc321 D.ab4cd3e12.有如下Python程序段:s1="babababa";s2="aba"i=0;pos=[]while i<=len(s1)-len(s2): #① if s1[i:i+len(s2)]!=s2: i+=1 #② else: pos.append(i) i=i+len(s2)-1if pos: print("位置:",pos)else: print("找不到")运行该程序段,下列描述正确的是( )A.①所在行执行3次B.②所在行执行1次C.i的值为8D.输出结果为“位置:[1,5]”13.有如下Python程序段:s=input()s1=""for i in range(len(s)): c=s[i] if "A"<=c<="Z": c=chr((ord(c)-ord("A"))%10+ord("0")) if "5"<=c<="9": c=chr(ord(c)-ord("5")+ord("a")+1) s1=c+s1print(s1)若输入的字符为“ZJ2024sk”,执行上述程序后输出的内容为( )A.bf2024sk B.592024skC.ks4202fb D.ks42029514.有如下Python程序段:s1="1324";s2="friendly"j=0;m=0;c=""for i in range(len(s2)): k=int(s1[j]) c=c+s2[m+k-1] j=j+1 if j>3: j=0 m=m+4print(c)执行该程序段后,变量c的值是( )A."firenldy" B."firendly"C."frienldy" D."friendly"15.有如下Python程序段:a=b=""k=0s=input().strip()for i in range(len(s)): if '0'<=s[i]<='9': k+=1 else: b=s[i-k:i] if a a=b k=0print(a)运行后若输入“3.803.93.520.888”(不包括引号),则输出是( )A.803 B.93C.520 D.88816.某Python程序如下:def encode(msg,key): result="" for i in range(0,len(msg)): c=msg[i] if "a"<=c<="z": result=chr((ord(c)+key-ord("a"))%26+ord("a"))+result elif "0"<=c<="9": result=result+chr((ord(c)-key-ord("0"))%10+ord("0")) return resultmsg=input("请输入明文:")key=int(input("请输入密钥:"))re=encode(msg,key)print(re)程序运行后,输入msg的值为“1a2b3c”,key=2,输出的结果是( )A.edc901 B.edc345C.9c0d1e D.3c4d5e4.4 字符串学习目标 1.通过问题解决,理解字符串的概念和特性。2.掌握字符串的基本操作,并能编程实现。(2024年1月浙江选考)若字符串s的值为"abcde",执行如下程序段后,变量res的值不可能是( )from random import randintres=" "i,j=0,len(s)-1while i=i: if randint(0,1)==0: #randint(0,1)随机生成0或1 res+=s[i] i+=1 else: res+=s[j] j-=1A."abced" B."aecbd"C."aedbc" D."edcba"答案 B解析 本题考查字符串的遍历。变量i和j从两端向中间遍历,当i大于j时结束循环。若产生随机数为0,将s[i]连接到res中,向后移动i,否则将s[j]连接到res中,向前移动j。A选项产生的随机数为0,0,0,1,0。B选项产生"ae",i和j分别指向b和d,因此不可能连接到c。C选项产生的随机数为0,1,1,0,0或0,1,1,0,1。D选项产生的随机数均为1或1,1,1,1,0。 字符串是由零个或多个字符来自ASCII、GB2312等多种字符集组成的有限序列。字符串是一种线性表结构,除第一个和最后一个元素外,其他元素都有一个唯一的前驱和后继,可以用元素在字符串中的相对位置作为标号来访问每个元素。在用Python实现的字符串中,有正索引标号和负索引标号,字符串的操作可以实现从字符串中提取子串、将字符串转换成小写或大写、字符串匹配等。实际应用中,基本的操作有子串判断、求子串、字符串的连接等。例1 有如下Python程序段:s1="schoolroom";s2="oo"i=0;m=0while i<=len(s1)-len(s2): if s1[i:i+len(s2)]!=s2: i+=1 else: i+=len(s2) m+=1该程序段执行后,m的值为( )A.6 B.7C.8 D.9思维点拨明考向 本题考查顺序查找算法精点拨 在字符串s1中查找s2出现的次数,如果找到s2,则跳过该子串。重点是关注循环结束的位置,为了保障s1[i:i+len(s2)]不越界,i的终值不能超出最后一个“o”的位置答案 B变式1 编写一个计算字符串中最多连续相同字符个数的Python程序段如下:s=input("请输入字符串:")k=1;maxlen=0for i in range(1,len(s)): if s[i]==s[i-1]: k=k+1 else: if k>maxlen: maxlen=k k=1print("最多连续相同字符个数为:",maxlen)用以下输入数据测试该程序段,能测出程序错误的是( )A.AAABBCCD B.AABBBCDDC.AABCCCDD D.ABBCCDDD答案 D解析 本题考查顺序查找算法。遍历字符,当相邻两个字符相同时k 累计相同字符个数,相邻字符不同时才会进入else比较和更新最多连续相同字符个数,因此当最多连续相字符个数出现在最后时,将无法正确记录。A选项连续最多的为3个A,出现在前面,可以检测出来。B选项连续最多的为3个B,也可以检测出来。C选项连续最多的为3个C,可以检测出来。D选项ABBCCDDD 最多连续相同字符是DDD,个数为3,出现在最后,但按照代码运行,没有执行else部分代码,最多连续相同字符个数为2。例2 某字符串s是由一个原始字符串反复重叠形成的。例如字符串"abcababcababcab"是由原始字符串"abcab"重叠而成。检测的算法:将该字符串划分成若干段,若字符串每一段与第一段相同,则认为该字符串是由这段字符重叠而成。为查找字符串s的原始字符串,有如下程序段:s="abcababcababcababcababcab"n=len(s);ans=""for i in range(① ): if n %i==0: for j in range(② ): if s[j:j+i]!=s[:i]: break else: ans=s[:i]print("原始串是:",ans)则划线处应填写的语句是( )A.①1,n//2 ②i,n,iB.①1,n//2+1 ②i,nC.①1,n//2 ②i,nD.①1,n//2+1 ②i,n,i思维点拨明考向 本题考查双重遍历的算法思想以及字符串的遍历精点拨 一个原始字符串反复重叠,该原始字符串长度必定能被n整除,条件n %i==0成立表示该长度i是n的因子,可能是原始字符串s[:i+1]的长度,字符串s从第0个位置开始,到i-1位置是原始字符串,从i开始,每i个长度的字符串s[j:j+i]是否是原始字符串,如果不是说明这段中不符合原始字符串。A选项检测的最大长度达不到n的一半。B选项以长度i为一段,步长不能为1。C选项检测的最大长度和步长不对。D选项每段从第1个字符枚举到n//2,每段的长度为i答案 D变式2 找出字符串s中长度为k,包含元音字母数最多的子串。例如:当k=3,s="trouble"时,结果是"rou"。实现该功能的部分程序段如下,方框中应填入的正确代码为( )v="aeiouAEIOU"cnt=0;res=s[:k]for i in range(k): if s[i] in v: cnt+=1m=cntfor i in range(k,len(s)): if cnt>m: m=cnt;res=s[i-k+1:i+1]print(res)A.if s[i] in v: cnt+=1if s[i-k+1] in v: cnt-=1B.if s[i] in v: cnt+=1if s[i-k] in v: cnt -=1C.if s[i] in v: cnt+=1if s[i-k] in v: cnt+=1D.if s[i] not in v: cnt -=1if s[i-k+1] in v: cnt+=1答案 B解析 本题考查字符串的遍历。首先统计前k个字符中元音字母数量,再依次遍历剩余的字符,此时s[i-k]不在连续的k个字符中,如果这个字符是元音,计数cnt要自减1。A选项i-k+1超出了长度k。B选项符合要求。C选项在这个长度范围内再次出现需要减少。D选项条件s[i] not in v统计的不是元音字母。1.已知字符串s="python",现要将s中的第一个字符改为大写字母,以下操作方法可行的是( )①s[0]="P"②s[0]=chr(ord(s[0])-ord("a")+ord("A"))③s="P"+s[1:]④s=s[0].upper()+s[1:]A.①② B.③④C.①②③ D.①②③④答案 B解析 字符串不能修改某个位置的值,只能通过重量连接生成新串的方法改变原串内容。2.正读和反读都一样的字符串称为“回文字符串”,现要判断某非空字符串s是否为“回文字符串”。实现该功能的程序段如下,划线处应填入的正确代码为( )s=input("请输入字符串:")n=len(s);k=n//2if : print("字符串:",s,"是回文字符串")else: print("字符串:",s,"不是回文字符串")A.s[:k]==s[k+1:][::-1]B.s[:k]==s[n-k:][::-1]C.s[:k+1]==s[(n+1)//2:][::-1]D.s[:k+1]==s[k+n%2:][::-1]答案 B解析 依次以s为"abba"和"abCba"为例,k表示字符串长度的一半,值为2。s[:k]可以取出对称部分的左边部分的字符串,两个不同的s对应的n-k的值依次为2和3,分别是对称部分的右边部分的字符串的开始索引,s[n-k:]可以得到该部分的字符串,s[n-k:][::-1]是将该部分进行左右翻转。3.字符串s由数字字符组成,且首位不为"0"。现需要在s中某一位置插入1位数字字符,得到新s,使新s的值最大。例如s串为"975463",插入字符"8"后,得到最大值"9875463"。实现该功能的程序段如下,方框中应填入的正确代码为( )#输入字符串s,长度为n;输入字符串ch,长度为1,代码略。i=0while i st=s[0:i]+ch+s[i:n]A.if ch>=s[i]: i+=1else: breakB.if ch i+=1else: breakC.if ch breakelse: i+=1D.if ch>s[i]: breakelse: i+=1答案 D解析 若要得到一个值最大的数字串,则数字串最前面的应该是最大的,因此需从左向右找到第1个比ch小或相等的位置,将ch插入到该位置。4.以下Python程序是统计字符串s1中存在子串s2的个数。例如:字符串s1的值为“abcabcb字符串s2的值为“abc”,程序运行结果为“2”。s1="abcabcbabc";s2="abc"n1=len(s1);n2=len(s2)i,num=0,0while i<=n1-n2: if ① : num=num+1 ② i=i+1print(num)要正确实现程序功能,划线处填写的代码为( )A.①s1[i:i+n2]==s2 ②i+=n2-1B.①s1[i:n2]==s2 ②i+=n2C.①s1[i:i+n2]==s2 ②i+=n2D.①s1[i:n2]==s2 ②i+=n2-1答案 A解析 变量i从索引位置0遍历到n1-n2,每次取出字符串s1[i:i+n2]与s2进行比较,若相等,则包含子串数量加1,同时i移动到i+n2处,由于下方有语句i=i+1,因此②的填写为i+=n2-1。5.有下列Python程序段:s1="pytorch";s2="python";s=""i=0;j=0while i if s1[i]>s2[j]: s=s+s1[i] else: j+=1 i+=1执行以上程序段后,s中的值是( )A."or" B."ch"C."on" D."to"答案 A解析 用指针i和j分别遍历字符串s1和s2,只要有一个字符串遍历完了,就结束循环。每次遍历,指针i均向后移动,指针j只有在s1[i]小于或等于s2[j]时,向后移动,否则就将s1[i]加入到字符串s中。前面3个字符相同,"o"大于"h","r"大于"o",s的值为"or"。"c"小于"n",完成遍历。6.某Python程序如下:s=input("请输入字符串:")ans="";a=[1,2,3]for i in range(len(s)): x=s[i] key=a[i%3] if "A"<=s[i]<="Z": ans=ans+chr((ord(x)-65+key)%26+65) else: ans=ans+xprint(ans)执行该程序后,输入"A1b2D3"输出的结果为( )A.2b1BF B.B1b2F3C.B3e3F6 D.6F3e3B答案 B解析 遍历字符串s,如果当前字符s[i]为大写字母,则将该字母向后循环后移key个位置后加入到ans中,如果是小写字母或数学,直接加入到ans中。字母A转换成B,字母D索引为4,对应的a[4%3]值为2,转换成F。其余字符不变。7.有如下Python程序段:s1="ababccabc";s2="abc"i=0;m=0while i<=len(s1)-len(s2): if s1[i:i+len(s2)]!=s2: #① i+=1 else: s1=s1[:i]+s1[i+len(s2):] i=i-len(s2)+1 m+=1该程序段执行后,下列描述正确的是( )A.①所在行的条件将会被判断5次B.i的值为-2C.m的值为2D.s1的值为"abc"答案 B解析 条件s1[i:i+len(s2)]!=s2表示从i开始的字符串与s2不相同,向右遍历。否则将把这段文字删除,同时i向前移动len(s2)-1个位置。s1从"abcabc"→"abc"→"",变量i的值依次为0,1,2,0,-2,-1,0,-2,因此i的值最终为-2,m的值为3,s1的值为"",循环了7次判断了7次。8.某Python程序如下:s=input("请输入数字字符串:")m1,m2,r=0,0,0i=0while i if i%2==0: m1=m1+int(s[i]) else: m2=m2+int(s[i]) r=m1 if m1>m2: r=m2 i=i+1print(r)程序运行时,若输入“4753”,则输出的结果是( )A.1 B.8C.9 D.10答案 C解析 用变量i依次遍历字符串s各个位置,当i的值是偶数时,将当前位置上数字累加到m1中,否则累加到m2中。最后m1的值为9,m2的值为10,不满足条件m1>m2,因此r的值为9。9.有如下Python函数:k=1ch=s[0]for i in range(1,len(s)): if ch==s[i]: k+=1 else: if k==0: ch=s[i] k=1 else: k-=1变量s分别取下列值并运行后,变量ch的值不为"a"的是( )A."aaasd" B."asdsa"C."asads" D."ssdaa"答案 C解析 从头开始遍历字符串,记忆碰到的字符ch,如果后续碰到的字符相同,就累计个数k;如果碰到不同的字符串,就减少累计个数k,一旦累计个数减为0,则重新记忆字符ch。C选项i为1时,a和s不相等,k的值为0;i为2时,s和a不相等,ch更新为a,k的值为1;i为3时,d和a不相等,k的值为0;i为4时,d和s不相等,ch更新为s。1.有如下Python程序段:s="红橙黄绿青蓝紫"x=2while len(s)>1: x=(x+3)%len(s) s=s[:x]+s[x+1:]print(s)执行该程序段后,输出的内容是( )A.红 B.橙C.绿 D.蓝答案 C解析 表达式s[:x]+s[x+1:]的功能是去除索引x位置的字符。x的值依次为2,5,2,0,3,0。第1次去除蓝,值为“红橙黄绿青紫”,第2次去除黄,值为“红橙绿青紫”,s的值依次为:“橙绿青紫”、“橙绿青”、“绿青”、“绿”。2.有如下Python程序段:p={};s=input()for i in range(len(s)): p[s[i]]=ii=0while i n=p[s[i]] j=i+1 while j<=n: if p[s[j]]>n: n=p[s[j]] j=j+1 print(s[i:j]) i=j若输入“arrayiybi”,则输出结果的最后一行内容是( )A.arra B.yiyC.iybi D.yiybi答案 D解析 将输入的字符串划分为几个子串,同一个字母只出现在同一个子串中并分段输出。字典p记录每种字母的最大索引值,字符串“arrayiybi”分成“arra”和“yiybi”2个子串。3.有如下Python程序s1="0312";s2="ABCDEFGH"m=0;c=""for i in range(len(s2)): k=int(s1[i%4]) m=4*(i//4) c+=s2[k+m]执行该程序段后,变量c的值是( )A."ADBCADBC" B."ABCDEFGH"C."AHBGCFDE" D."ADBCEHFG"答案 D解析 遍历字符串s2各个位置,当i为0至3时,m的值为0,其余m的值为4,即把字符串s2分成"ABCD"和"EFGH"两段,每段分别取出偏移位置为0,3,1,2的字符。4.有如下程序段:p=0for i in range(len(a)): if not("a"<=a[i]<="z"): j=i;pt=a[i] while j>p: a[j]=a[j-1] j=j-1 p=j;a[j]=ptprint(a[4])若列表a=["-","p","y","-","t","h","o","n","-"],则运行该程序段后,输出的值为( )A."-" B."p"C."y" D."t"答案 C解析 程序功能是将所有非小写字母字符向前移动,到所有小写字母以前,且小写字母相对位置不发生改变。故a运行结果为['-','-','-','p','y','t','h','o','n']。5.有如下Python程序段:s="Secret";t=[1,0,2]r=[""]*len(s)for i in range (len(s)): m=t[i % len(t)] if i r[m]=s[i] else: r[m+len(t)]=s[i]print ("".join(r)) #将列表r中的元素连接起来,并返回一个新字符串运行该程序段后,输出的结果是( )A.Secret B.eScertC.retSec D.ceSter答案 B解析 变量m在数组t索引中循环,即m的依次为0,1,2,0,1,2。程序的功能是将字符串s分成两组,每组将原来0,1,2位置依次存储1,0,2的位置。6.有如下Python程序:import randomdef f(s): i,j=0,len(s)-1 k=random.randint(1,3) ans="";flag=True while i<=j: if flag or s[i]<=s[j]: ans+=s[i];i+=1 else: ans+=s[k];j-=1 flag=not flag return ans执行语句print(f("avocado"))后,下列输出结果不可能的是( )A.aavaoac B.avvvovcC.aovoooc D.acvcocc答案 A解析 若k的值为1,输出avvvovc。若k的值为2,输出aovoooc。若k的值为3,输出acvcocc。7.有如下Python程序段:s=input("输入字符串:")n=len(s);result=""i,j=0,n-1while i=n//2: if s[i]>s[j]: result+=s[i];j-=1 elif s[i] result+=s[j];i+=1 else: i+=1;j-=1print(result)执行该程序段,分别输入下列选项中的字符串,输出结果不为“555”的是( )A."51234" B."12535"C."54321" D."55123"答案 B解析 本题考查字符串的操作。该程序段的作用是将字符串s中左半部分与右半部分按照从大到小的顺序交替排列,生成一个新的字符串result。输入s字符串为12535时,输出结果为55。8.有如下Python程序段:s="Love me,love my dog. Please love my everything."key=[".","love","o","m"]word_n={};s0=""for i in range(len(key)): s0=s word_n[key[i]]=0 while len(s0)>0: if ① : word_n[key[i]]+=1 p=s0.find(key[i]) #查找key[i]在s0中出现的起始索引 s0=② else: breakprint(word_n)执行该程序段后,结果为:{'.':2,'love':2,'o':4,'m':3},则上述程序段划线处的代码分别是( )A.①key[i] in s0 ②s0[p:p+len(key[i]+1)]B.①key[i] in word_n ②s0[p+len(key[i]):]C.①key[i] in s0 ②s0[p+len(key[i]):]D.①key[i] in word_n ②s0[p:p+len(key[i]+1):]答案 C解析 程序的功能是查找key中各个字符串出现的次数。遍历列表key,语句word_n[key[i]]=0的功能是创建一个键为key[i],值为0。若key[i]存在于s0中,查找key[i]在s0中出现的起始索引p,更新s0为原s0索引p后面加上长度为key[i]到最后的所有字符。9.执行如下程序段后,s="wz19Lht"result=ch=""flag=Truefor i in range(len(s)): ch=s[i] if 'a'<=ch<='z': if flag: ch=chr(ord(ch)-ord('a')+ord('A')) flag=not flag elif '0'<=ch<='9': ch=str((int(ch)+1)%10) result=ch+resultprint(result)输出的结果为( )A.Wz02LHt B.tHL02zWC.WZ02LHT D.THL02ZW答案 B解析 所有小写字母中,每隔一个变大写,共有wzht,应此WH变大写,数字循环向后移动一个,19变为20。10.有如下程序段:s="aabbbccdd"n=len(s);i=3while i if s[i]==s[i-1] and s[i-2]==s[i-3]: s=s[:i]+s[i+1:] else: i+=1执行该程序段后,变量s的值是( )A."abcd" B."aabbcd"C."aabcd" D."aabccd"答案 D解析 从索引位置3开始遍历字符串s,若该字符与他前面一个字符相等并且前面第2个与前面第3个字符也相同,则删除该位置的字符,否则继续向后遍历。子串"aabb"符合条件,删除"b",得到新字符串s为"aabbccdd",子串"aabb"和"ccdd"满足条件,分别删除最后的字符。11.有如下Python程序:import randoms1="abcde";s2="12345";res=""i,j=0,len(s2)-1while i<=len(s1)-1 and j>=0: k=random.randint(0,1) if k==0: res+=s1[i+k] i+=1 else: res+=s2[j-k] j-=1print(res)执行程序后,变量res不可能的是( )A.ab4c321d5 B.4a32b1cdeC.5abc321 D.ab4cd3e答案 C解析 当产生随机数k为1时,将s2[j-k]连接到res中,因此第1个字符不可能是5,即一定是43215的顺序,当s1全部连入res,程序就结束了。12.有如下Python程序段:s1="babababa";s2="aba"i=0;pos=[]while i<=len(s1)-len(s2): #① if s1[i:i+len(s2)]!=s2: i+=1 #② else: pos.append(i) i=i+len(s2)-1if pos: print("位置:",pos)else: print("找不到")运行该程序段,下列描述正确的是( )A.①所在行执行3次B.②所在行执行1次C.i的值为8D.输出结果为“位置:[1,5]”答案 B解析 A选项①处代码执行次数即i值的变化次数,即8-3是5次;B选项当i的值为0时,不符合条件。C选项i的值最终为7;D选项:从表格中可得出最后pos的值为[1,3,5],所以输出结果为“位置:[1,3,5]”。此题需注意当查找到s2时,i的位置跳转至i+len(s2)-1,而非i+len(s2)。13.有如下Python程序段:s=input()s1=""for i in range(len(s)): c=s[i] if "A"<=c<="Z": c=chr((ord(c)-ord("A"))%10+ord("0")) if "5"<=c<="9": c=chr(ord(c)-ord("5")+ord("a")+1) s1=c+s1print(s1)若输入的字符为“ZJ2024sk”,执行上述程序后输出的内容为( )A.bf2024sk B.592024skC.ks4202fb D.ks420295答案 C解析 字符Z先转换为数字5,5再次转换为字符“b”,将该字符反向连接到结果中,因此结果最后一个字符为b。14.有如下Python程序段:s1="1324";s2="friendly"j=0;m=0;c=""for i in range(len(s2)): k=int(s1[j]) c=c+s2[m+k-1] j=j+1 if j>3: j=0 m=m+4print(c)执行该程序段后,变量c的值是( )A."firenldy" B."firendly"C."frienldy" D."friendly"答案 A解析 本题考查字符串操作。内循环变量j从0到3,j重新从0开始,同时m的值加4。可以把字符串s2按4个一组,每组第2个与第3个字符交换。15.有如下Python程序段:a=b=""k=0s=input().strip()for i in range(len(s)): if '0'<=s[i]<='9': k+=1 else: b=s[i-k:i] if a a=b k=0print(a)运行后若输入“3.803.93.520.888”(不包括引号),则输出是( )A.803 B.93C.520 D.888答案 B解析 本题考查Python程序的理解。变量k统计了数字字符的个数,变量b保存点号间的整个数字字符串,第9行进行字符串大小比较,将更大的字符串b保存与变量a中,程序功能是将字符串中最大的数字字符串输出。16.某Python程序如下:def encode(msg,key): result="" for i in range(0,len(msg)): c=msg[i] if "a"<=c<="z": result=chr((ord(c)+key-ord("a"))%26+ord("a"))+result elif "0"<=c<="9": result=result+chr((ord(c)-key-ord("0"))%10+ord("0")) return resultmsg=input("请输入明文:")key=int(input("请输入密钥:"))re=encode(msg,key)print(re)程序运行后,输入msg的值为“1a2b3c”,key=2,输出的结果是( )A.edc901 B.edc345C.9c0d1e D.3c4d5e答案 A解析 如果是小写字母,将该字母循环后移key个字母,并反向连接到result;如果是数字,将该数字循环前移key个位置,并正向连接到result。因此“abc”转换为“cde”,反向为“edc”。数字“123”转换为“901”,连接result的后面。 展开更多...... 收起↑ 资源列表 4.4 字符串.docx 4.4 字符串无答案.docx