内容正文:
高效作业7[第7课 字符串1——初识字符串](见学生用书P191)
【A级 新教材落实与巩固】
1.下列关于字符串的概念和特性的说法中,正确的是( B )
A.空串和空格串是相同的
B.如果两个字符串相同,则必然长度相同且对应位置的字符必须相同
C.因为GB2312字符集分别使用1字节和2字节来表示英文和中文,故字符串“我爱Python”的长度为10
D.一个字符串中只能包含一种字符集字符
【解析】 空串表示没有字符,空格串中的空格也是字符,字符串相同表示长度和对应位置字符都相同,字符串长度是由字符个数决定的,一个字符串可以包含多种字符集,选项B正确。
2.下列关于字符串的说法中,不正确的是( C )
A.字符串是字符的有限序列
B.字符串也可以比较大小
C.字符串是一种非线性表结构
D.字符串的存储既可以采用顺序存储结构,也可以采用链式存储结构
【解析】 字符串数据结构是一种线性表结构,选项C错误。
3.有如下Python程序段:
s=”Good-Luck-2022!”
n=0;m=0;k=0
for i in range(len(s)):
ch=s[i]
if ch>=”0” and ch<=”9”:
m=m+1
elif ch>=”a” and ch<=”z”:
n=n+1
else:
k=k+l
执行该程序段后, 变量k的值为( D )
A. 2 B. 3 C.4 D.5
【解析】 遍历字符串,判断不同类型字符的个数,k为大写字母或符号的个数,选项D正确。
4.有如下Python程序段:
m=”p25y3t12h8n5”
sum=t=0
flag=True
for ch in m:
if ”0”<=ch<=”9”:
t=t*10+int(ch)
else:
if flag==True:
sum+=t
t=0
flag=not flag
print(sum)
执行该程序段后,变量sum 的值为( D )
A.53 B.48 C.32 D.11
【解析】 将字符串中的数字串间隔取出,并转换成数字累加;利用flag实现间隔提取,选项D正确。
5.有如下Python程序段:
s=input()
t=0
sum=0
for i in range(len(s)-1,-1,-1):
c=s[i]
if c>=”0” and c<=”9”:
t=t*10+int(c)
elif c>=”a” and c<=”z”:
sum=sum+t
else:
t=0
print(str(sum))
若输入“123aBc456”,则执行该程序段后,输出的结果是( B )
A.456 B.654 C.579 D.975
【解析】 从后往前遍历字符串s,提取第i个字符放在c中,若c是数字字符,将int(c)与t*10累加,故t用来统计当前提取出的连续数字,若c是小写字母,则将t累加在sum中;若c是其他字符,则将t清零,选项B正确。
6.2023·湖州中学检测有如下Python程序段:
s=input(”请输入任意字符串: ”)
st=””
for n in s:
if '0'<=n<='9':
st=st+n
elif 'A'<=n<='Z':
st=n+st
print(st)
若输入“Happy5New2Year9!”,则输出的结果是 ( D )
A. 9Y2N5H B. 741YNH
C. H5N2Y9 D.YNH529
【解析】 将字符串中的数字字符正序连接,大写字符逆序连接,其余字符舍去,选项D正确。
7.有如下Python程序段:
s=input()
t=0;sum=0
for i in s:
if '0'<=i<='9':
t=t*10+int(i)
elif 'a'<=i<='z':
sum+=t
else:
t=0
print(sum)
若键盘输入“123sAw34”(不包括引号),则执行该程序段后,输出的结果是( A )
A.123 B.246 C.157 D.321
【解析】 依次实现对字符串的遍历,截取数字字符串转变为数值存入变量t中,当遇到小写字母后累加到sum中,遇到除数字及小写字母外的字符,将t清零,故sum的结果为123,选项A正确。
8.某字符串加密算法的Python程序段如下:
s=”TXAB1234”;ans=””
i=j=0
n=len(s)
for t in s[0:n//2]:
j=int(s[n-i-1])
ans=chr((ord(t)+j-65)%26+65)+ans
#字符“A”的ASCII 码值为65
i+=1
print(ans)
执行该程序段后,输出的结果是( C )
A.XACC B.UZDF
C.CCAX D.FDZU
【解析】 关键是理解chr((ord(t)+j-65)%26+65)的作用,它先将大写字母转换为[0,25]的整数,再向后移动t 位,最后转换为对应的大写字母,如T 在大写字母表上后移4 位为X,X 后移3 位为A,以此类推,选项C正确。
9. 某加密的Python程序段如下:
s1=input(”请输入明文: ”)
q=”1357902468”;s2=””
for ch in s1:
if ”0”<=ch<=”9”:
s2+=q[int(ch)]
elif ”a”<=ch<=”z”:
s2+=chr((ord(ch)-ord(”a”)+2)%26+ord(”a”))
else:
s2+=ch
print(s2)
若输入s1的值为“Mike5216qq.com”,则执行该程序段后,输出的结果是( C )
A. Mgic053@oo.amk
B. Kgic931@oo.amk
C. Mkmg053@ss.eqo
D.Okmg931@ss.eqo
【解析】 遇到数字,利用字符串q,提取q中int(ch)位置的字符,并连接到s2中;遇到小写字母则向右移动2位,用新字母替换并连接到s2中;其他字符直接连接到s2中。故选项C正确。
10.2023·春晖中学检测有如下Python程序段:
import random
s=”ABCDEF”
ch=””
for i in range(0,len(s)):
a=int(input)
b=(a+2)%6
ch=ch+chr(ord(s[b])+32)
print(ch)
若依次输入3、1、4、5、2、6,则执行该程序段后,输出ch的值可能是( B )
A.cadebf B.fdabec
C.aabbab D.ecfadb
【解析】 程序功能:将输入a为初始位置,再后移2步,得到新的位置,在字符串s中提取字符,再将大写字母转换成小写字母。例如,a=3, 则b=5,提取得到大写字母“F”,转换成小写字母“f”,选项B正确。
11.有如下Python 程序段:
s=input()
y=””
for i in range(len(s)):
c=s[i]
if c>=”A” and c<=”Z”:
c=chr(ord(c)+3)
y=c+y
print(y)
若输入的s为“A1b2C3”,则执行该程序段后,输出的结果是( C )
A. A1b2C3 B.D1b2F3
C.3F2b1D D.3C2b1A
【解析】 程序功能:将大写字母往后移动3位,并把每个字符逆序连接。故选项C正确。
12.有如下Python程序段:
a=input('请输入一串英文字符串: ')
s=”
sum=0
for ch in a:
s=s+str(ord(ch)-ord('A')+1)
for ch in s:
sum+=int(ch)
print(sum)
若输入字符串“ZBAX”(不包含引号),则输出的结果是( C )
A.8 B.13 C.17 D.4
【解析】 第1个循环将字符串中的字母转换成其在英文字母表中的位置并加1,再转换成字母连接到s中;第2个循环将这些值累加到sum中。故选项C正确。
13.2023·舟山中学检测有如下加密的Python程序段:
def encrypt(code, key):
code_new=''
for i in range(len(code)):
code_new=code[(i+key)%len(code)]+code_new
return code_new
code=input('请输入加密字符串: ')
key=int(input('请输入偏移位数: '))
print(encrypt(code,key))
若输入“Python”和“3”,则输出的结果是( D )
A. mvqelk B. sbwkrq
C. honPyt D.tyPnoh
【解析】 将code和key输入后,调用函数encrypt()进行加密;函数中,在code字符串中提取当前位置的后3个位置上的字符,并逆序连接;循环结束后,将结果返回。故选项D正确。
14.2024·强基联盟检测有如下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不可能的是( C )
A.ab4c321d5 B.4a32b1cde
C.5abc321 D.ab4cd3e
【解析】 i、j双指针分别从前往后、从后往前遍历s1、s2两个字符串。若随机数k=0,则从s1字符串中取对应的字符连接到res中;若k=1,则从s2字符串中取对应的字符连接到res中。res字符串首个字符只可能为s1[1]或s2[3],不可能为“5”,故选项C错误。选项A中的“5”为当j=0,k=1时取到的s2[-1]。
15.有如下Python 程序段:
s=”China”
t=[1,3,2]
res=””
for i in range(len(s)):
m=t[i%len(t)]
n=ord(s[i])+m
res=res+chr(n)
print(res)
执行该程序段后,输出的结果是( A )
A.Dkkod B.Ciknb
C.DkjoD D.Cijob
【解析】 该程序段遍历字符串s,取出英文字符向后偏移m 位。故选项A正确。
16.有如下Python程序段:
s=”PYTHON12-30ab?cd!”
y=””
for i in range(len(s)-1,-1,-1):
ch=s[i]
if ch<=”9” and ch>=”0”:
y=ch+y
elif ch<=”z”and ch>=”a”:
y=y+ch
print(y)
执行该程序段后,输出的结果为( C )
A. ”dcba0321” B. ”dcba0321BV”
C. ”1230dcba” D. ”0321abcd”
【解析】 从后往前遍历字符串s,提取第i个字符放在ch中,ch是数字字符,将ch拼接在y前面,若ch是小写字母,将ch拼接在y后面,若ch是其他字符,不做任何处理,选项C正确。
【B级 素养形成与评价】
17. 在传递信息的过程中,通常会将一些敏感信息加密,下列是对数据进行加密的Python 程序段,若输入的数据为“my789”,则输出的结果是( B )
s=input()
t=””
for ch in s:
if ”0”<=ch<=”9”:
x=int(ch)+3
if x>=10:
x=x%10
ch=str(x)
t=t+ch
print(t)
A.my123 B. my012
C.pa012 D.pa123
【解析】 for ch in s:逐个访问字符串“my789”
当ch=m 时,执行t=t+ch,t=m;
当ch=y 时,执行t=t+ch,t=my;
当ch=7 时,x=7+3=10,执行x=x%10=0,再执行t=t+ch,t=my0;
当ch=8 时,x=8+3=11,执行x=x%10=1,再执行t=t+ch,t=my01;
当ch=9 时,x=9+3=12,执行x=x%10=2,再执行t=t+ch,t=my012。
选项A正确。
18.2023·杭十四检测有如下Python程序段:
k=3
sum,j,c=0,0,0
flag=False
for ch in s:
if ”0”<=ch<=”9”:
c=c*10+int(ch)
j+=1
elif ”a”<=ch<=”z”:
flag=True
else:
if j==k and flag:
sum+=c
flag=False
j=0;c=0
当字符串s为“ab018/20c2/d101/e”时,执行该程序段后,sum的值为( D )
A.18 B.101 C. 119 D.321
【解析】 阅读程序可知,该程序段遍历字符串s,遇数字字符则进行累加,遇英文字符则将flag 标为True,遇到其他字符时,检测flag 的状态与所遍历到的数字字符个数,如果flag 为True 且数字字符个数为3,将c 累加进sum。sum=18+202+101=321,选项D 正确。
19. 有如下Python 程序段:
s=input(”请输入字符串: ”)
if s[0]==”(”:
flag=True
else:
flag=False
cnt,sum=0,0
for i in range(1,len(s)-1):
c=s[i]
if flag:
if ”a”<=c<=”z”:
sum=sum+1
else:
if sum!=0:
cnt=cnt+1
sum=0
if c==”(”:
flag=True
if c==”)”:
flag=False
用户输入的内容为一串只包含字母、左右括号和空格的字符串“Reality(is temporary) while(ideals(are)permanent)”,执行该程序段后,变量cnt 的值为( C )
A.2 B.3 C.4 D.5
【解析】 统计从“(”括号开始的单词个数,遇到“(”,标记flag为True,单词“is”“temporary”统计; 遇到“)”,标记flag为False,单词“while”不统计;再遇到“(”,标记flag为True,单词“ideals”“are”统计,最后遇到“)”,标记flag为False,单词“permanent”不统计,选项C正确。
20.有如下Python程序段:
s=input('请输入数据: ')
t=s[0]
maxt=0
for i in range(len(s)):
if s[i]>s[i-1]:
t+=s[i]
if len(t)>maxt:
maxt=len(t)
ans=t
else:
t=s[i]
print(ans)
输入“12123234561”,执行该程序段后, 输出的结果是( A )
A. 23456 B. 12123
C. 34561 D.1212323
【解析】 在字符串s中查找最长的连续升序串;语句“s[i]> s[i-1]”成立,表示在升序,将s[i]连接到t中,如果t的长度大于最长长度,则记下新的最长长度和最长升序串,选项A正确。
21.2023·绍兴鲁迅中学检测某信息系统根据动态的8位字符串(包含2个英文字母、4个数字和2个特殊符号)生成验证码。对应的Python程序段如下:
#获取动态的8位字符串s,过程略
num=0
p=””
for i in s:
if ”0”<=i<=”9”:
num=num+int(i)
elif ”a”<=i<=”z”:
p=p+chr(ord(i)-32)
elif ”A”<=i<=”Z”:
p=p+chr((ord(i)-ord(”A”)+3)% 26+ord(”A”))
p=p+str(num%10)+str(num//10)
print(”验证码为: ”,p)
若动态字符串s为“8Y!5u23_”,则执行该程序段后,输出的验证码是( D )
A.Bw53 B.8Bz1 C.BU18 D.BU81
【解析】 遇到数字则转换成数值累加到num中;遇到小写字母则转换成大写,连接到p中;遇到大写字母后移3位,连接到p中。选项D正确。
22. 有如下Python 程序段:
s=”xyAB#Fk”;k=x=””;flag=True
for i in range(len(s)):
if ”a”<=s[i]<=”z” and flag:
x=chr((ord(s[i])-95)%26+97)
#字符“a”的ASCII 码值为97
elif ”A”<=s[i]<=”Z” and flag:
x=chr((ord(s[i])-41)%26+65)
#字符“A”的ASCII 码值为65
flag=False
else:
x=s[i];flag=True
k=k+x
print(k)
执行该程序段后,输出的结果是( C )
A.ZAyb#dK B.yzYZ#Dm
C.zaYB#Dk D.zaYZ#Dm
【解析】 小写字母按字母表顺序往右移动2 个字母(-95=-97+2);大写字母按字母表顺序往右移动24 个字母(-41=-65+24),也可以理解为往左移动2 个字母。此时,flag 变量更新为False;大小写是否移位还受flag 变量的控制,flag 为True 时才移位。其他字符不变化,此时flag 变量更新为True。原字符串“xyAB#Fk” 按以上规则变换为“zaYB#Dk” ,选项C正确。
23.EAN13的校验码计算过程:排除校验码的倒数第1个数起,隔位相加求和后乘3,得到数值a;排除校验码的倒数第2个数起,隔位相加得到数值b;a与b相加,总和除以10取余,计算得出的余数减10后,其绝对值就是校验码。计算校验码的Python程序段如下:
s=input(”请输入EAN13标准码的前12位: ”)
sum=0,sum1=0;sum2=0;f=0
for i in range(len(s)-1,-1,-1):
if①____________:
sum1+=int(s[i])
else:
sum2+=int(s[i])
sum=②____________
f=10-sum%10
print(”校验码为: ”,f)
则①、②处填入的代码分别为( D )
A. ①i%2==1 ②sum1+sum2
B.①i%2==0 ②sum1+sum2
C. ①i%2==1 ②sum1+sum2*3
D.①i%2==0 ②sum1+sum2*3
【解析】 文字描述排除选项A、B;由“sum1+sum2*3”可知,sum2累加i为奇数时对应位置的数值,选项D正确。
24.2023·金华一中检测小明想要在数字串s 中寻找连续数字之和为k 的子串,若有多个子串符合,则输出第一个子串。例如,s=”20220520”,k=7,则符合要求的子串为”205”。实现该功能的部分Python 程序段如下:
i=0;j=0;sum=0
for j in range(len(s)):
sum+=int(s[j])
while sum>k:
c=s[i]
①____________
i+=1
if sum==k:
print(”符合要求的子串为: ”,②__________ )
break
则①、②处填入的代码分别为( D )
A.①sum=sum+int(c) ②s[i:j+1]
B.①sum=sum-int(c) ②s[i-1:j+1]
C.①sum=sum+int(c) ②s[i:j]
D.①sum=sum-int(c) ②s[i:j+1]
【解析】 利用窗口推移的思想,从i位置开始到j位置结束,逐个累加并与k比较,如果小于k,则继续寻找;如果大于k,则去除窗口的开始位置值(sum=sum-int(c)),窗口开始位置后移(i+=1);如果相等,则找到。故选项D正确。
25.循环字符串:将字符串s 的头尾相连成环,再从其中某处断开得到字符串s1,则s1 为s 的循环字符串。例如字符串s=“abcd”,则“bcda”“cdab”“dabc”均为s 的循环字符串。现有如下Python 程序段,可判断两个字符串是否为循环字符串。
s=input()
s1=input()
for i in range(len(s)):
if s1==tmp:
if flag:
print(”两个字符串是循环字符串”)
else:
print(”不是循环字符串”)
上述程序段中加框处可选的代码有:
①flag=False ②flag=True ③tmp=s[i:len(s)]+s[ :i] ④tmp=s[i+1:len(s)]+s[ :i]
下列选项中,代码顺序正确的是( A )
A.①③② B.②③①
C.①④② D.②④①
【解析】 当flag 值为True 时输出的是循环字符串,故条件成立是flag=True,flag 初值应赋为False,所以(1)处填①,(3)处填②;tmp 应为i 处分割s 形成新的循环字符串,按照切片的语法规则s[M:N],N 处取不到字符,选④将会漏掉下标为i 的字符,选项A正确。
26.2023·台州中学检测通过键盘输入一串字符串,程序输出该字符串的所有子串。例如,在下列程序段中输入“the”后,将会输出['t','th','the','h','he','e']。
s=input(”请输入一个字符串: ”)
a=[]
for i in range(len(s)):
for j in range():
a.append()
print(a)
则①、②处填入的代码分别为( A )
A.①i,len(s) ②s[i:j+1]
B.①i,len(s)-i+1 ②s[i:j+i]
C.①i,len(s)-i+1 ②s[i:j+1]
D.①i,len(s) ②s[j:j+i]
【解析】 本题程序需要输出字符串的所有子串,分析题干中给出的程序可以推断出,外循环中i变量用来枚举每一个起点,而内循环中j变量用来枚举i位之后的每个终点,再通过切片,根据 “左取右不取 ”的规则将子串取出。选项A正确。
学科网(北京)股份有限公司
$$