字符串专题练习
一、选择题
下列Python字符串不合法的是:(D)
A.”I love ‘China’” B.’I “love” China’
C.’I love \’China\’’ D.’I love ‘China”
解析:选D,字符串一般采用单引号、双引号或三引号加以界定。当使用单引号时,双引号可以作为字符串中的一部分,反之亦然;也可以使用反斜杠转义符输出单引号或双引号。
2.有如下程序段:
S=“2022 Hope To Get Out Of The Epidemic”
t=“”
for i in s:
if i<“a” or i>“z”:
t=””
t=i+t
print(t)
该程序运行后,最后显示的内容是( A )
A.cimedipE B.cimedip C.cimed D.cime
解析:选A,该程序中语句“if i<“a” or i>“z”:;t=“””的功能是字符i为非小写字母时,变量t就清空。因此在“Epidemic”出现前,变量t中的内容为空。这样变量t中最后的内容为“Epidemic”的重新组合。语句t=i+t的功能就是将“Epidemic”进行逆向组合。
有如下Python程序段:
a=”Beautiful is better than ugly.”.split()
b=””.join(a)
则下列说法正确的是:(B)
a[4]的值为“ugly”,b[4]的值为“t”
a[4]的值为“ugly.”,b[4]的值为“t”
a[-4]的值为“is”,b[-4]的值为“u”
a[-4]的值为“Beautiful”,b[-4]的值为“g”
解析:选B,a[4]的值为“ugly.”;b[4]的值为“t”;
a[-4]的值为“is”;b[-4]的值为“g”。
4.有如下python 程序段:
def fun(a,b):
n=min(len(a),len(b))
for i in range(n):
if a[i]>b[i]:
return a
elif a[i]return b
if len(a)>len(b):
return a
else:
return b
print(fun(“126”,”26”))
则程序执行后,输出的结果为:(D)
A.a B.b C.126 D.26
解析:选D,自定义函数fun()的功能是比较字符串a 和b的大小,并返回较大的字符串,因为“126”<“26”,故返回“26”。
5.有如下python程序段:
a=input()
t,s=0,0
for c in a[::-1]:
if c.isdigit():
t=t*10+int(c)
else:
s+=t
t=0
print(t)
当输入“123ABC456”时,程序输出结果为: (A)
A.321 B.654 C.123 D.975
解析:选A,程序的功能是逆序提取字符串中的连续整数并求整数和,注意程序输出的是变量t的值。
6.有如下Python程序段:
text=”床前明月光,疑是地上霜。举头望明月,低头思故乡。”
text=text.replace(“。”,“,”)
ans=[s[0] for s in text.split(“,”) if s]
ans=“”.join(ans)
则程序执行后,ans的值为(C)
A.“床前明月光” B.“床前明月”
C.“床疑举低” D.”举头望明”
解析:选C,程序的功能是获取藏头诗。具体做法是先用“,”替换“。”,这样所有的分隔符均变成“,”,再用“,”将text分割成列表(注意最后一个列表元素为空串),并去列表元素的首字符,凭借成藏头诗。
7.有如下python程序段:
text=“It is too old to learn.”
ans=text[:6]+“never”+text[6:]
print(ans)
则程序执行后,输出的结果为(C)
It is too old to learn
It is never too old to learn
It is nevertoo old to learn
It isnever too old to learn
解析:选C,text[:6]=“It is”,text[6:]=“too old to learn.”,因为“never”两边都没有空格,故输出It is nevertoo old to learn.。
8. 有如下Python程序段:
for ch in “I have a dream”:
if ch not in”aoeiu”:
continue
print(ch,end=””)
则程序执行后,输出的结果是(D)
A.无输出 B.I have a dream
C.I hv drm D.aeaea
解析:选D,continue语句的作用是终止本次循环,并忽略continue之后的所有语句,直接回到循环的顶端,提前进入下一次循环,故程序只输出包含在“aoeiu”中的字母。
9. 有如下python程序段:
s=“Python3.8”
ans=“”
for ch in s:
if ch.isupper():
ans+=ch.lower()
elif ch.islower():
ans+=ch.upper()
else:
ans+=ch
print(ans)
则程序执行后,输出的结果为(D)
A.Python B.Python3.8
C.pYTHON D.pYTHON3.8
解析:选D,程序的功能是将大小写字母互相转换,其他字符保持不变。
10. 有如下程序段:
s=””
ch=”GaozhouKG2021”
n=len(ch)
for i in range(1,n,2):
c=ch[i]
if “A”<=c<=“Z”:
c=chr((ord(c)-ord(“A”)+2)%26+65)
elif “a”<=c<=“z”:
c=chr((ord(c)-ord(“a”)+2)%26+97)
else:
c=chr(ord(c)+1)
s=c+s
print(s)
该程序运行后,最后显示的内容为(D)
A.IqjwI12 B.21IwjqI C.cbqM33 D.33Mqbc
解析:选D,该程序的功能是将字符串的第1,3,5,…个字符在各自的范畴内向后移动2个位置(即如果是大写字母、小写字母、数字,各自向后移动2个位置。注:每个范畴都看成一个圈)。最后将它们进行逆向连接。
11.有如下python程序段:
a=“110000010111010”
if len(a)%4!=0:
a=(4-len(a)%4)*“0”+a)
s=“0123456789ABCDEF”
ans=[]
for i in range(0,len(a),4):
num=int(a[i:i+4],2)
ans.append(s[num])
print(‘’.join(ans))
已知int()函数用于将一个字符串或数字转换为整型,例如
int(“101”,2)用于将二进制数101转换为十进制数,结果为5,则程序执行后,输出的结果为(A)
A.60BA
B.C174
C.182E8
D.305D
解析:选A,程序功能是将二进制数转换成十六进制数。按照从低位到高位的(从右往左)的顺序,每4位二进制数转换成1位十六进制数,不足4位则在高位补0。“110000010111010”补0的结果为“0110000010111010”,转换成十六进制数为60BA。
12. 回文串是一个对称串,从左向右读与从右向左读是一样的。例如:“aba”从左向右读是“aba”,从右向左读也是“aba”。下面的Python程序的功能就是将一个字符串转换成回文串。如输入“abc”,输出“abccba”。程序如下:
s=input(“输入一个串”)
s1=s
i=0
while i______(1)______
_______(2)______
i+=1
print(“回文串:”,s1)
在横线(1)与(2)处可选的语句如下:
ch=s[len(s)-i]
ch=s[len(s)-1-i]
s1=ch+s1
s1=s1+ch
则完成此程序正确的语句为(B)
A.①③ B.②④ C.①④ D.②③
解析:选B,产生回文串,先将原串复制到一个新的变量中,然后在新变量的后面依次连接上原串的最后1个字符,倒数第2个字符,……,一直到原串的第1个字符连接上为止。
二、非选择题
13.在字符串s中找连续数字(仅限1位数)之和为n的子串,若存在多个子串符合要求,则输出子串最长的那一串,如字符串“142176”中,和为14的子串有“4217”与“176”,子串“4217”的长度大于子串“176”的长度,最终输出子串“4217”。假设所给字符串中必存在满足条件的子串,实现该功能的python程序段如下,请在划线处填上合适的代码:
s=input(“输入数字字符串:”)
n=int(“input(“输入数值和:”))
n=14
i=0;sum=0;st=“”
for j in range(len(s)):
____(1)_______
sum+=ch1
while sum>n:
ch2=int(s[i])
____(2)_________
i+=1
if sum==n and____(3)________:
st=s[i:j+1]
print(st)
答案:(1)ch1=int(s[j]) (2)sum-=ch2 (3)len(st)<(j-i+1)
解析:查找连续单个数值之和等于指定值的最长序列。本程序具有队列的思想,将当前数值累加到sum中后,sum值还没有超过指定值n,则将后续的数字的值加入;若sum的值超过指定值n,则将最先进来的数值减去;若sum的值等于指定值且长度超过原有的记录,则替换当前记录。
14. 某字符加密法:先输入英文字符串(大小写均可,长度不超过100),依次将其中字符的ASCII码值转化为7位二进制数,形成输入码并以矩阵形式输出;将7位二进制数进行加密处理,先进行水平翻转,再将翻转后的二进制数奇数位上的数字取反,0转1、1转0;最后将加密后的7位二进制数转化为十进制数作为密文显示。
按上述要求,编写一个Python程序,功能如下:输入英文字符串,运行程序输出对应的输入码,并显示密文。程序运行界面如图所示。
若输入的英文字符串是“Ok”,则加密后的密文是______________________________。
实现上述功能的Python程序如下,请在划线处填入合适的代码。
‘’’依次生成并输出英文字符串text各字符对应的7位二进制数‘’’
def show_code(text):
code=[[0]*7 for i in range(len(text))]
for i in range(len(text)):
n=ord(text[i])
j=0
s=””
while n>0:
code[i][6-j]=n%2
s=str(n%2)+s
n= ______①_______
j=j+1
print(f”{text[i]}:{s}”)
return code
‘’’对各字符对应的7位二进制数按规则进行加密处理,并返回密文’’’
def encode(plain_code):
secret_code=[ ]
for i in range(len(plain_code)):
s=0
for j in range(7):
num=___②___________
if j%2==0:
num=1-num
s=s*2+num
secret_code.append(______③________)
return “”.join(secret_code)
text=input(“请输入英文字符串:”)
print(“输入码:”)
plain_code=show_code(text)
print(f”密文:{encode(plain_code)}”)
答案:(1)44 62
(2)①n//2 ②plain_code[i][6-j] ③str(s)
解析:自定义函数show_code(text)的作用是依次生成并输出英文字符串text各字符对应的7位二进制数,n就是字符的ASCII码值,根据进制转换算法可知第①空答案为n//2;自定义函数encode(plain_code)的作用是将各字符对应的7位二进制数按规则进行加密处理,因为要先进行水平翻转,故num不是第j位上的二进制数,而是j的对称位的二进制数,则第②空答案为plain_code[i][6-j];最后将十进制数密文添加到列表secret_code中,并拼接成字符串返回,注意第③空答案不能写成s,因为不能直接把整数拼接成字符串。字符串专题练习
一、选择题
下列Python字符串不合法的是:( )
A.”I love ‘China’” B.’I “love” China’
C.’I love \’China\’’ D.’I love ‘China”
2.有如下程序段:
S=“2022 Hope To Get Out Of The Epidemic”
t=“”
for i in s:
if i<“a” or i>“z”:
t=””
t=i+t
print(t)
该程序运行后,最后显示的内容是( )
A.cimedipE B.cimedip C.cimed D.cime
有如下Python程序段:
a=”Beautiful is better than ugly.”.split()
b=””.join(a)
则下列说法正确的是:( )
a[4]的值为“ugly”,b[4]的值为“t”
a[4]的值为“ugly.”,b[4]的值为“t”
a[-4]的值为“is”,b[-4]的值为“u”
a[-4]的值为“Beautiful”,b[-4]的值为“g”
4.有如下python 程序段:
def fun(a,b):
n=min(len(a),len(b))
for i in range(n):
if a[i]>b[i]:
return a
elif a[i]return b
if len(a)>len(b):
return a
else:
return b
print(fun(“126”,”26”))
则程序执行后,输出的结果为:( )
A.a B.b C.126 D.26
5.有如下python程序段:
a=input()
t,s=0,0
for c in a[::-1]:
if c.isdigit():
t=t*10+int(c)
else:
s+=t
t=0
print(t)
当输入“123ABC456”时,程序输出结果为: ( )
A.321 B.654 C.123 D.975
6.有如下Python程序段:
text=”床前明月光,疑是地上霜。举头望明月,低头思故乡。”
text=text.replace(“。”,“,”)
ans=[s[0] for s in text.split(“,”) if s]
ans=“”.join(ans)
则程序执行后,ans的值为( )
A.“床前明月光” B.“床前明月”
C.“床疑举低” D.”举头望明”
7.有如下python程序段:
text=“It is too old to learn.”
ans=text[:6]+“never”+text[6:]
print(ans)
则程序执行后,输出的结果为( )
It is too old to learn
It is never too old to learn
It is nevertoo old to learn
It isnever too old to learn
8. 有如下Python程序段:
for ch in “I have a dream”:
if ch not in”aoeiu”:
continue
print(ch,end=””)
则程序执行后,输出的结果是( )
A.无输出 B.I have a dream
C.I hv drm D.aeaea
9. 有如下python程序段:
s=“Python3.8”
ans=“”
for ch in s:
if ch.isupper():
ans+=ch.lower()
elif ch.islower():
ans+=ch.upper()
else:
ans+=ch
print(ans)
则程序执行后,输出的结果为( )
A.Python B.Python3.8
C.pYTHON D.pYTHON3.8
10. 有如下程序段:
s=””
ch=”GaozhouKG2021”
n=len(ch)
for i in range(1,n,2):
c=ch[i]
if “A”<=c<=“Z”:
c=chr((ord(c)-ord(“A”)+2)%26+65)
elif “a”<=c<=“z”:
c=chr((ord(c)-ord(“a”)+2)%26+97)
else:
c=chr(ord(c)+1)
s=c+s
print(s)
该程序运行后,最后显示的内容为( )
A.IqjwI12 B.21IwjqI C.cbqM33 D.33Mqbc
11.有如下python程序段:
a=“110000010111010”
if len(a)%4!=0:
a=(4-len(a)%4)*“0”+a)
s=“0123456789ABCDEF”
ans=[]
for i in range(0,len(a),4):
num=int(a[i:i+4],2)
ans.append(s[num])
print(‘’.join(ans))
已知int()函数用于将一个字符串或数字转换为整型,例如
int(“101”,2)用于将二进制数101转换为十进制数,结果为5,则程序执行后,输出的结果为( )
A.60BA
B.C174
C.182E8
D.305D
12. 回文串是一个对称串,从左向右读与从右向左读是一样的。例如:“aba”从左向右读是“aba”,从右向左读也是“aba”。下面的Python程序的功能就是将一个字符串转换成回文串。如输入“abc”,输出“abccba”。程序如下:
s=input(“输入一个串”)
s1=s
i=0
while i______(1)______
_______(2)______
i+=1
print(“回文串:”,s1)
在横线(1)与(2)处可选的语句如下:
ch=s[len(s)-i]
ch=s[len(s)-1-i]
s1=ch+s1
s1=s1+ch
则完成此程序正确的语句为( )
A.①③ B.②④ C.①④ D.②③
二、非选择题
13.在字符串s中找连续数字(仅限1位数)之和为n的子串,若存在多个子串符合要求,则输出子串最长的那一串,如字符串“142176”中,和为14的子串有“4217”与“176”,子串“4217”的长度大于子串“176”的长度,最终输出子串“4217”。假设所给字符串中必存在满足条件的子串,实现该功能的python程序段如下,请在划线处填上合适的代码:
s=input(“输入数字字符串:”)
n=int(“input(“输入数值和:”))
n=14
i=0;sum=0;st=“”
for j in range(len(s)):
____(1)_______
sum+=ch1
while sum>n:
ch2=int(s[i])
____(2)_________
i+=1
if sum==n and____(3)________:
st=s[i:j+1]
print(st)
14. 某字符加密法:先输入英文字符串(大小写均可,长度不超过100),依次将其中字符的ASCII码值转化为7位二进制数,形成输入码并以矩阵形式输出;将7位二进制数进行加密处理,先进行水平翻转,再将翻转后的二进制数奇数位上的数字取反,0转1、1转0;最后将加密后的7位二进制数转化为十进制数作为密文显示。
按上述要求,编写一个Python程序,功能如下:输入英文字符串,运行程序输出对应的输入码,并显示密文。程序运行界面如图所示。
若输入的英文字符串是“Ok”,则加密后的密文是______________________________。
实现上述功能的Python程序如下,请在划线处填入合适的代码。
‘’’依次生成并输出英文字符串text各字符对应的7位二进制数‘’’
def show_code(text):
code=[[0]*7 for i in range(len(text))]
for i in range(len(text)):
n=ord(text[i])
j=0
s=””
while n>0:
code[i][6-j]=n%2
s=str(n%2)+s
n= ______①_______
j=j+1
print(f”{text[i]}:{s}”)
return code
‘’’对各字符对应的7位二进制数按规则进行加密处理,并返回密文’’’
def encode(plain_code):
secret_code=[ ]
for i in range(len(plain_code)):
s=0
for j in range(7):
num=___②___________
if j%2==0:
num=1-num
s=s*2+num
secret_code.append(______③________)
return “”.join(secret_code)
text=input(“请输入英文字符串:”)
print(“输入码:”)
plain_code=show_code(text)
print(f”密文:{encode(plain_code)}”)