2026届高中信息技术二轮专题复习 4.4 字符串 学案(含解析)

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

2026届高中信息技术二轮专题复习 4.4 字符串 学案(含解析)

资源简介

4.4 字符串
学习目标 
1.通过问题解决,理解字符串的概念和特性。
2.掌握字符串的基本操作,并能编程实现。
(2024年1月浙江选考)若字符串s的值为"abcde",执行如下程序段后,变量res的值不可能是(  )
from random import randint
res=" "
i,j=0,len(s)-1
while i=i:
  if randint(0,1)==0: #randint(0,1)随机生成0或1
    res+=s[i]
    i+=1
  else:
    res+=s[j]
    j-=1
A."abced" B."aecbd"
C."aedbc" D."edcba"
  字符串是由零个或多个字符来自ASCII、GB2312等多种字符集组成的有限序列。字符串是一种线性表结构,除第一个和最后一个元素外,其他元素都有一个唯一的前驱和后继,可以用元素在字符串中的相对位置作为标号来访问每个元素。在用Python实现的字符串中,有正索引标号和负索引标号,字符串的操作可以实现从字符串中提取子串、将字符串转换成小写或大写、字符串匹配等。实际应用中,基本的操作有子串判断、求子串、字符串的连接等。
例1 有如下Python程序段:
s1="schoolroom";s2="oo"
i=0;m=0
while i<=len(s1)-len(s2):
  if s1[i:i+len(s2)]!=s2:
    i+=1
  else:
    i+=len(s2)
  m+=1
该程序段执行后,m的值为(  )
A.6 B.7
C.8 D.9
变式1 编写一个计算字符串中最多连续相同字符个数的Python程序段如下:
s=input("请输入字符串:")
k=1;maxlen=0
for i in range(1,len(s)):
  if s[i]==s[i-1]:
    k=k+1
  else:
    if k>maxlen:
      maxlen=k
    k=1
print("最多连续相同字符个数为:",maxlen)
用以下输入数据测试该程序段,能测出程序错误的是(  )
A.AAABBCCD B.AABBBCDD
C.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,i
B.①1,n//2+1  ②i,n
C.①1,n//2   ②i,n
D.①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+=1
m=cnt
for 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+=1
if s[i-k+1] in v:
  cnt-=1
B.if s[i] in v:
  cnt+=1
if s[i-k] in v:
  cnt -=1
C.if s[i] in v:
  cnt+=1
if s[i-k] in v:
  cnt+=1
D.if s[i] not in v:
  cnt -=1
if s[i-k+1] in v:
  cnt+=1
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.①②③④
2.正读和反读都一样的字符串称为“回文字符串”,现要判断某非空字符串s是否为“回文字符串”。实现该功能的程序段如下,划线处应填入的正确代码为(  )
s=input("请输入字符串:")
n=len(s);k=n//2
if       :
  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=0
while i        
st=s[0:i]+ch+s[i:n]
A.if ch>=s[i]:
  i+=1
else:
  break
B.if ch  i+=1
else:
  break
C.if ch  break
else:
  i+=1
D.if ch>s[i]:
  break
else:
  i+=1
4.以下Python程序是统计字符串s1中存在子串s2的个数。例如:字符串s1的值为“abcabcb字符串s2的值为“abc”,程序运行结果为“2”。
s1="abcabcbabc";s2="abc"
n1=len(s1);n2=len(s2)
i,num=0,0
while i<=n1-n2:
  if ①      :
    num=num+1
    ②     
  i=i+1
print(num)
要正确实现程序功能,划线处填写的代码为(  )
A.①s1[i:i+n2]==s2 ②i+=n2-1
B.①s1[i:n2]==s2  ②i+=n2
C.①s1[i:i+n2]==s2 ②i+=n2
D.①s1[i:n2]==s2  ②i+=n2-1
5.有下列Python程序段:
s1="pytorch";s2="python";s=""
i=0;j=0
while 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+x
print(ans)
执行该程序后,输入"A1b2D3"输出的结果为(  )
A.2b1BF B.B1b2F3
C.B3e3F6 D.6F3e3B
7.有如下Python程序段:
s1="ababccabc";s2="abc"
i=0;m=0
while 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的值为-2
C.m的值为2
D.s1的值为"abc"
8.某Python程序如下:
s=input("请输入数字字符串:")
m1,m2,r=0,0,0
i=0
while 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+1
print(r)
程序运行时,若输入“4753”,则输出的结果是(  )
A.1 B.8
C.9 D.10
9.有如下Python函数:
k=1
ch=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=2
while 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]]=i
i=0
while 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.yiy
C.iybi D.yiybi
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"
4.有如下程序段:
p=0
for 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]=pt
print(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.eScert
C.retSec D.ceSter
6.有如下Python程序:
import random
def 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.avvvovc
C.aovoooc D.acvcocc
7.有如下Python程序段:
s=input("输入字符串:")
n=len(s);result=""
i,j=0,n-1
while 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-=1
print(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:
      break
print(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=True
for 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+result
print(result)
输出的结果为(  )
A.Wz02LHt B.tHL02zW
C.WZ02LHT D.THL02ZW
10.有如下程序段:
s="aabbbccdd"
n=len(s);i=3
while 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 random
s1="abcde";s2="12345";res=""
i,j=0,len(s2)-1
while 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-=1
print(res)
执行程序后,变量res不可能的是(  )
A.ab4c321d5 B.4a32b1cde
C.5abc321 D.ab4cd3e
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)-1
if pos:
  print("位置:",pos)
else:
  print("找不到")
运行该程序段,下列描述正确的是(  )
A.①所在行执行3次
B.②所在行执行1次
C.i的值为8
D.输出结果为“位置:[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+s1
print(s1)
若输入的字符为“ZJ2024sk”,执行上述程序后输出的内容为(  )
A.bf2024sk B.592024sk
C.ks4202fb D.ks420295
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+4
print(c)
执行该程序段后,变量c的值是(  )
A."firenldy" B."firendly"
C."frienldy" D."friendly"
15.有如下Python程序段:
a=b=""
k=0
s=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=0
print(a)
运行后若输入“3.803.93.520.888”(不包括引号),则输出是(  )
A.803 B.93
C.520 D.888
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 result
msg=input("请输入明文:")
key=int(input("请输入密钥:"))
re=encode(msg,key)
print(re)
程序运行后,输入msg的值为“1a2b3c”,key=2,输出的结果是(  )
A.edc901 B.edc345
C.9c0d1e D.3c4d5e4.4 字符串
学习目标 
1.通过问题解决,理解字符串的概念和特性。
2.掌握字符串的基本操作,并能编程实现。
(2024年1月浙江选考)若字符串s的值为"abcde",执行如下程序段后,变量res的值不可能是(  )
from random import randint
res=" "
i,j=0,len(s)-1
while i=i:
  if randint(0,1)==0: #randint(0,1)随机生成0或1
    res+=s[i]
    i+=1
  else:
    res+=s[j]
    j-=1
A."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=0
while i<=len(s1)-len(s2):
  if s1[i:i+len(s2)]!=s2:
    i+=1
  else:
    i+=len(s2)
  m+=1
该程序段执行后,m的值为(  )
A.6 B.7
C.8 D.9
思维点拨
明考向 本题考查顺序查找算法
精点拨 在字符串s1中查找s2出现的次数,如果找到s2,则跳过该子串。重点是关注循环结束的位置,为了保障s1[i:i+len(s2)]不越界,i的终值不能超出最后一个“o”的位置
答案 B
变式1 编写一个计算字符串中最多连续相同字符个数的Python程序段如下:
s=input("请输入字符串:")
k=1;maxlen=0
for i in range(1,len(s)):
  if s[i]==s[i-1]:
    k=k+1
  else:
    if k>maxlen:
      maxlen=k
    k=1
print("最多连续相同字符个数为:",maxlen)
用以下输入数据测试该程序段,能测出程序错误的是(  )
A.AAABBCCD B.AABBBCDD
C.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,i
B.①1,n//2+1  ②i,n
C.①1,n//2   ②i,n
D.①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+=1
m=cnt
for 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+=1
if s[i-k+1] in v:
  cnt-=1
B.if s[i] in v:
  cnt+=1
if s[i-k] in v:
  cnt -=1
C.if s[i] in v:
  cnt+=1
if s[i-k] in v:
  cnt+=1
D.if s[i] not in v:
  cnt -=1
if 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//2
if       :
  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=0
while i        
st=s[0:i]+ch+s[i:n]
A.if ch>=s[i]:
  i+=1
else:
  break
B.if ch  i+=1
else:
  break
C.if ch  break
else:
  i+=1
D.if ch>s[i]:
  break
else:
  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,0
while i<=n1-n2:
  if ①      :
    num=num+1
    ②     
  i=i+1
print(num)
要正确实现程序功能,划线处填写的代码为(  )
A.①s1[i:i+n2]==s2 ②i+=n2-1
B.①s1[i:n2]==s2  ②i+=n2
C.①s1[i:i+n2]==s2 ②i+=n2
D.①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=0
while 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+x
print(ans)
执行该程序后,输入"A1b2D3"输出的结果为(  )
A.2b1BF B.B1b2F3
C.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=0
while 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的值为-2
C.m的值为2
D.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,0
i=0
while 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+1
print(r)
程序运行时,若输入“4753”,则输出的结果是(  )
A.1 B.8
C.9 D.10
答案 C
解析 用变量i依次遍历字符串s各个位置,当i的值是偶数时,将当前位置上数字累加到m1中,否则累加到m2中。最后m1的值为9,m2的值为10,不满足条件m1>m2,因此r的值为9。
9.有如下Python函数:
k=1
ch=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=2
while 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]]=i
i=0
while 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.yiy
C.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=0
for 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]=pt
print(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.eScert
C.retSec D.ceSter
答案 B
解析 变量m在数组t索引中循环,即m的依次为0,1,2,0,1,2。程序的功能是将字符串s分成两组,每组将原来0,1,2位置依次存储1,0,2的位置。
6.有如下Python程序:
import random
def 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.avvvovc
C.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-1
while 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-=1
print(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:
      break
print(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=True
for 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+result
print(result)
输出的结果为(  )
A.Wz02LHt B.tHL02zW
C.WZ02LHT D.THL02ZW
答案 B
解析 所有小写字母中,每隔一个变大写,共有wzht,应此WH变大写,数字循环向后移动一个,19变为20。
10.有如下程序段:
s="aabbbccdd"
n=len(s);i=3
while 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 random
s1="abcde";s2="12345";res=""
i,j=0,len(s2)-1
while 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-=1
print(res)
执行程序后,变量res不可能的是(  )
A.ab4c321d5 B.4a32b1cde
C.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)-1
if pos:
  print("位置:",pos)
else:
  print("找不到")
运行该程序段,下列描述正确的是(  )
A.①所在行执行3次
B.②所在行执行1次
C.i的值为8
D.输出结果为“位置:[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+s1
print(s1)
若输入的字符为“ZJ2024sk”,执行上述程序后输出的内容为(  )
A.bf2024sk B.592024sk
C.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+4
print(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=0
s=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=0
print(a)
运行后若输入“3.803.93.520.888”(不包括引号),则输出是(  )
A.803 B.93
C.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 result
msg=input("请输入明文:")
key=int(input("请输入密钥:"))
re=encode(msg,key)
print(re)
程序运行后,输入msg的值为“1a2b3c”,key=2,输出的结果是(  )
A.edc901 B.edc345
C.9c0d1e D.3c4d5e
答案 A
解析 如果是小写字母,将该字母循环后移key个字母,并反向连接到result;如果是数字,将该数字循环前移key个位置,并正向连接到result。因此“abc”转换为“cde”,反向为“edc”。数字“123”转换为“901”,连接result的后面。

展开更多......

收起↑

资源列表