内容正文:
第13课 程序强化——字符处理(见学生用书P64)
——3.3 简单算法及其程序实现,教材第97~101页
掌握字符串处理的基本思路,并能用程序实现。
1.常见字符表达式
Python表达式
表达式的功能
ch>=”a” and ch<=”z”
判断字符 ch 是否为小写字母
ch>=”A” and ch<=”Z”
判断字符 ch 是否为大写字母
ch>=”a” and ch<=”z” or ch>=”A” and ch<=”Z”
判断字符 ch 是否为字母
ch>=”0” and ch<=”9”
判断字符 ch 是否为数字字符
chr(ord(ch)+32)
实现大写字母转小写字母
chr(ord(ch)-32)
实现小写字母转大写字母
Asc(ch)-Asc(”a”)+1 或者 Asc(ch)-96
ch 的值若为小写字母,实现将字符“a”“b”…“z”转换成数值 1,2,…,26
Asc(ch)-Asc(”A”)+1 或者 Asc(ch)-64
ch 的值若为大写字母,实现将字符“A”“B”…“Z”转换成数值 1,2,…26
2.字符串遍历与数据提取
实现运行界面的常见的方式如下(s=input()):
for i in range(len(s)):
ch=s[i]
if ch>=”0” and ch<=”9”:
t=t+ch
else:
sum=sum+int(t)
print(t)
t=””
print(”数据之和为: ”+str(sum))
for i in range(len(s)):
ch=s[i]
if ch>=”0” and ch<=”9”:
t=t*10+int(ch)
else:
sum=sum+t
print(t)
t=0
print(”数据之和为: ”+str(sum))
有如下Python程序段:
s='WE12-30ab!cd@';y=”
for i in range(len(s)-1,-1,-1):
ch=s[i]
if '0'<=ch<='9':
y=ch+y
elif'a'<=ch<='z':
y=y+ch
print(y)
执行该程序段后,输出的结果是( C )
A.dcba0321 B.dcba0321EW C.1230dcba D.0321abcd
【解析】 程序实现对字符串逆序读取,并将数字字符逆序拼接到变量y中,即“1230”;将小写字母顺序拼接到变量y中,即“dcba”,程序执行后y为“1230dcba”。
变式1 有如下Python程序段:
s='Happy-Day-2021!'
m=n=k=0
for i in s:
if '0'<=i<='9':
m+=1
elif'a'<=i<='z':
n+=1
else:
k+=1
print(k)
执行该程序段后,输出的结果是( D )
A.2 B.3 C.4 D.5
【解析】 程序实现对字符串依次遍历,并将数字字符的数量累计到变量m中;小写字母字符的数量累计到变量n中;其他字符的数量累计到变量k中,即其他字符有5个。
变式2 有如下Python程序段:
shu=””;k=0;qiu=””
x=”394-5-222-60-809”
for ch in range(len(x)):
if ”0”<=x[ch]<=”9”:
k=k+1
else:
shu=x[ch-k:ch]
if qiu<shu:
qiu=shu+qiu
k=0
print(qiu)
执行该程序段后,输出的结果是( B )
A.1203 B.605394 C.809605394 D.809394
【解析】 用k 计算当前数字的位数,当碰到非数字的时候进行累加,累加到累加器的前面并且要求当前字符串比累加器中的字符串大,选项B正确。
有如下Python程序段:
p=”Tel-114”
c=” ”
for ch in p:
if ch>=”0” and ch<=”9”:
c+=str(9-int(ch))
elif ch>=”a” and ch<=”z”:
c+=chr(ord(ch)-ord(”a”)+ord(”A”))
else:
c+=ch
print(c)
执行该程序段后,输出的结果是( D )
A.tEL-885 B.tEL-114 C.TEL-114 D.TEL-885
【解析】 该程序实现如下功能:若ch为数字字符,那么加密后字符的数值和原数字字符的数值相加和为9;若ch为小写字母,那么加密后的字符为原小写字母对应的大写字母;若ch为除数字字符和小写字母外的字符,那么原ch保持不变;结合需加密字符串p='Tel-114',那么按照加密规则,执行该程序段后得到的结果为“TEL-885”。
变式1 2024·北仑中学检测有如下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”,则执行该程序段后,输出的结果是( B )
A.32b1BF B.B1b2F3 C.B3e3F6 D.6F3e3B
【解析】 依次读取原文字符和key,若是大写字母则后移key个位置,其他字符原样保留。其中字母“A”,key为1,转换为“B”;字母“D”,key为2,转换为“F”,选项B正确。
变式2 有如下Python程序段:
p=input(”请输入明文字符串(由字母组成): ”)
e=””
for i in p:
if ”a”<=i<=”z”:
e+=”L”
i=chr(ord(i)-32)
else:
e+=”U”
s=ord(i)-ord(”A”)
e+=str(s//5)+str(s%5)
print(e)
若输入p的值为“Ad”,则执行该程序段后,输出的结果是( A )
A.U00L03 B.U00L70 C.L00U03 D.U0L3
【解析】 字符“A”执行else的语句块,s=0,e=U00;字符“d”执行if的语句块,s=3,e=U00L03,选项A正确。
有如下Python程序段:
s='MoreHasteLessSpeed'
mx=”
pre=0
for i in range(1,len(s)):
if ord(s[i])<97:
if mx<s[pre:i]:
mx=s[pre:i]
pre=i
print(mx)
执行该程序段后,输出的结果是( A )
A.More B.Haste C.Less D.Speed
【解析】 for循环从第2个位置开始,若s[i]的ASCII码值小于97,结合字符串s,即当s[i]为大写字母时取出字符串s[pre:i],pre的初值为0,故第一次截取出单词More,第二次截取出Haste,第三次截取出Less,要注意最后一个Speed取不到,所以三个单词中的最大值是More,选项A正确。
变式 小明为统计连续小写字母的最长个数,编写了如下Python程序段:
s=input()
ans=0
for i in range(len(s)):
t=s[i]
if t>=”a” and t<=”z”:
c=c+1
else:
print(ans)
上述程序段中加框处可选的代码有:
①c=0 ②c=1 ③if c>ans: ans=c ④if c<ans: c=ans ⑤ans=ans+1
下列选项中,代码顺序正确的是( D )
A.②③① B.①④⑤ C.②④② D.①③①
【解析】 c用来统计连续小写字母的个数,c的初值为0,故①填c=0;ans用来统计连续小写字母的最长个数。从前往后遍历字符串s,提取第i个字符放在t中,若c>ans,更新ans的值,故②填if c>ans:ans=c;若第i个字符非小写字母,则将c清零,重新统计下一个连续小写字母的长度。选项D正确。
2024·平阳中学检测有如下Python程序段:
s=”Student Union!”
f=[0]*26
i=0
while i<len(s):
if ”a”<=s[i]<=”z”:
f[ord(s[i])-ord(”a”)]+=1
elif ”A”<=s[i]<=”Z”:
i+=1
continue
else:
break
i+=1
for i in range(26):
if f[i]==1:
print(chr(i+ord(”A”)),end=””)
执行该程序段后,输出的结果是( A )
A.DENU B.DENTU C.DEIOU D.denu
【解析】 利用0~25共26个桶来统计小写字符出现的次数,其中f[0]存储字母“a”的个数。遇到小写字母统计个数,遇到大写字母则跳过当次循环,遇到其他字符则循环结束,即只统计了“Student”中的小写字母个数。最后一个for循环,按字母表输出只出现了1次的字母(以大写形式输出),选项A正确。
某网络平台要求新注册用户的密码:8位及以上,至少包含大写英文字母、小写英文字母、数字、指定字符4类字符中的3类。密码设置有5次尝试机会,连续5次失败将不予注册。程序运行界面如图所示:
请回答下列问题。
(1)若用户输入的密码是“Hello202202”,__符合__(选填:符合/不符合)以上要求。
(2)实现该功能的Python程序如下,请在横线处填入合适的代码。
def check_letter(password):
#代码略,本函数用于判断password是否含有大、小写英文字母
#如只包含一种返回1,如两种都包含返回2,两种都未包含则返回0
def check_number(password):
#代码略,本函数用于判断password是否含有数字字符,如包含返回1,否则返回0
def check_symbol(password):
#本函数用于判断password是否含有指定特殊符号,如包含返回1,否则返回0
x=”!@#$%^&*()_+-=<>?,.” #指定字符
c=0
for i in password:
if ①__i__in__x__或其他等价答案__:
c=1;break
return c
try_times=5
password=input('请输入密码: ')
while True:
strength=check_letter(password)+check_number(password)+check_symbol(password)
if②__strength>=3__或其他等价答案____ and len(password)>=8:
print('恭喜!密码设置成功。');break
else:
if try_times<=1:
print('尝试次数过多。密码设置失败!')
break
else:
if len(password)<8:
password=input('密码长度不足。请重新输入: ')
else:
password=input('密码强度不合格。请重新输入: ')
③__try_times-=1__或__try_times=try_times-1__或其他等价答案__
【解析】 (1)长度超过8位,含有数字、大写字母、小写字母,符合要求。
(2)①x字符串为指定字符,i为设置密码中的单个字符,当“i in x”为True,表示该字符属于指定字符;②包含四类字符中的至少三类;③允许尝试次数减一,try_times为允许尝试次数。
变式 2024·温岭中学检测删除字符串中的重复字符。编写一个Python程序,功能如下:由键盘输入字符串,执行程序后,输出处理后的结果。程序运行界面如图所示:
请在横线处填入合适的代码。
x=input('请输入原始字符: ')
①__n=len(x)__
s=x[0] #存放未重复字符
for i in range(1,n):
flag=0
if ②__x[i]__in__s__: #判断是否为重复字符
flag=1
if ③__flag==0__:
s=s+x[i]
print('处理后的结果为: ',s)
【解析】 ①n存放输入字符串x的字符长度;s为未重复字符组成的字符串。②判断是否为重复字符,即判断x[i]是否在s中,若在,则重复。③flag为0表示未重复,为1表示重复,若未重复则将x[i]存入字符串s中。
|随|堂|检|测|
1.有如下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+1
执行该程序段后,变量k的值为( D )
A.2 B.3 C.4 D.5
【解析】 遍历字符串,判断不同类型字符的个数,m为数字字符的个数,n为小写字母的个数,k为大写字母或其他符号的个数。
2.有如下Python 程序段:
s=input(”请输入要处理的数据: ”)
t=0;sum=0
fori in s:
if ”0”<=i<=”9”:
t=t*10+int(i)
elif”A”<=i<=”Z”:
sum+=t
else:
t=0
print(sum)
若输入的数据为“321AqC56”,则执行该程序段后,输出的结果是( B )
A.642 B.321 C.698 D.377
【解析】 提取字符串中的数值,并进行累加,其中“321”提取后的结果为321。数字串结束后,再遇到大写字母,才会累加,但不初始化t的值;再遇到小写字符时,t=0;“56”之后没有字母,不会累加,选项B正确。
3.2024·永嘉中学检测有如下Python程序段:
s=”accdbbdca”
res=””
for i in s:
if len(res)==0 or i!=res[len(res)-1]:
res+=i
elif i==res[len(res)-1]:
res=res[len(res)-1]+res[:len(res)-1]
print(res)
执行该程序段后,输出的结果是( C )
A.aca B.acdb C.dbcaca D.bcacdbdca
【解析】 执行过程如下,选项C正确。
i
a
c
c
d
b
b
d
c
a
res
a
ac
ca
cad
cadb
bcad
dbca
dbcac
dbcaca
4.有如下Python 程序段:
s='1234567'
n=len(s)
k=-1
for i in range(n-1):
k=(k+3)%len(s)
s=s[k+1:]+s[:k]
k=-1
print(s)
执行该程序段后,输出的结果是( C )
A.1 B.3 C.4 D.7
【解析】 执行过程如下,选项C正确。
i
0
1
2
3
4
5
k
2
2
2
2
2
0
s
456712
71245
4571
145
14
4
5.2024·新昌中学检测某同学设计了一种加密算法,加密规则如下:
①若待加密字符中出现大写字母,就将其转换为它在字母表中的次序,如A→1,B→2,…,Y→25,Z→26。
②若待加密字符中连续出现小写字母,将这些小写字母反向添加进密码中,如aeiou→u o i e a。
③若待加密字符中出现数字,那么将数字0~9分别转换为字母A~J,如0→A,1→B,…,9→J。
④所有的字符之间用空格隔开。
例如:
实现该功能的Python程序如下:
s=input(”输入要加密的字符串: ”)
ans=””
temp=””
for ①__i__in__s__:
if 'a'<=i<='z':
temp=i+” ”+temp
else:
②__ans=ans+temp__
temp=””
if 'A'<=i<='Z':
t=str(ord(i)-65+1)
elif '0'<=i<='9':
t=③__chr(int(i)+65)__或chr(int(i)+ord('A'))__
print(ans)
请回答下列问题。
(1)若待加密字符串为ThuVMe50,则执行该程序后,输出的结果是__20__u__h__22__13__e__F__A__。
(2)程序中两处加框代码出现相同的错误,请改正:__ans=ans+t+”__”__。
(3)请在横线处填入合适的代码。
【解析】 (2)所有字符之间需要用空格隔开。
(3)①结合“'a'<=i<='z'”可知,输入的字符串中每个字符都要转换;②逆序的小写字符加入结果;③将数字转换为ASCII字符。
温馨提示:请完成高效作业13 )
学科网(北京)股份有限公司
$$