课时 23 字符串 课件(共42张PPT)2027届浙江选考信息技术总复习

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

课时 23 字符串 课件(共42张PPT)2027届浙江选考信息技术总复习

资源简介

(共42张PPT)
课时23 字符串
字符 字符串中的字符来自于某些特定的字符集,例如ASCII字符集。ASCII字符集包括大小写英文字母、数字、标点符号、控制字符等共    个字符
长度 字符串中所包含的字符    称为字符串的长度,空格也是一个字符
表示 字符串一般用双引号或单引号加以界定
一、字符串的概念
1. 字符串是由    或多个字符组成的有限序列。在 Python 中,字符串变量一旦赋值后,就不能    它的值。
2. 字符串的基本属性。
零个
128
修改
个数
3. 特殊字符串。
名称 含义
空串 不包含任何字符的串,其长度为    1
空格串 由    组成的字符串,其长度为空格字符的个数
子串 一个字符串中任意个    的字符序列称为该字符串的子串。例如,字符串S为"Hello World",字符串"H","He","el","ell","World"等都是S的子串。字符串S也是其自身的子串。除S本身外,S的其他子串称为S的真子串
零
空格
连续
1. 有限序列性。
(1)字符串是一种    结构。
(2)字符串中的数据元素个数是    ,由零个或多个字符组成,除了头尾元素外,其他元素都有一个唯一的前驱和后继。
2. 字符串的可比性。
(1)如果字符串中的字符全来自 ASCII 字符集时,则比较字符串是对字符串的
    码值进行比较。
(2)比较规则:从左至右依次比较两个字符串中对应位置上字符的 ASCII 码值,ASCII 码值大的则该字符串就    ,若相等则同时比较下一个,直至得到结果。数字字符的比较使用同样的规则,比如字符串"9"的值比字符串"10"的值    。
线性表
有限的
二、字符串的特性
ASCII
大
大
字符 w o n d e r f u l
正索引 0 1 2 3 4 5 6 7 8
负索引 -9 -8 -7 -6 -5 -4 -3 -2 -1
1.字符串的访问。
(1)可以用元素在字符串中的相对位置作为标号来访问每个元素。
(2)在用 Python 实现的字符串中,有正索引标号和负索引标号,    的第一个位置为 0,    从字符串的末端开始编号,第一个位置为-1。以字符串"wonderful"为例,观察各个元素的正索引和负索引。
正索引
负索引
三、字符串的基本操作
2.子串判断。
(1)子串判断用于检查一个字符串 a是否为字符串 S 的子串。在 Python中,可以用    运算实现。
(2)判断字符串 s1 是否为字符串 s2 的子串,程序如下:
s1="ic"
s2="nice"
print(s1 in s2) #s1 是 s2 的子串,输出:True
print(s2 in s1) #s2 不是 s1 的子串,输出:False
in
3.求子串。
(1)求子串用于从字符串中取出其子串。在 Python 中,可以用     实现,格式为“字符串[位置 i:位置 j]”,表示取字符串的索引下标 i 至 j-1 范围内的子串。
(2)求字符串 S 中索引 3 到索引 5 的子串,程序如下:
S="basketball"
print(S[3:6]) #输出:ket
(3)枚举字符串 st中的字符元素,程序如下:
#逐行输出字母 c、o、o、l,一个字母占一行
st="cool"
for i in st:
print(i)
切片
4. 字符串的连接:用于把两个字符串连接在一起。在 Python 中,用连接符
“    ”实现。程序如下:
s1="123"
s2="77"
print(s1+s2) #输出:12377
print(s2+s1) #输出:77123
5. 字符串的重复:用于将一个字符串进行整数次的重复并连接。在 Python 中,用运算符“*”实现,格式为:字符串*整数。程序如下:
s1="24"
s2="101"
print(s1*3) #输出:242424
print(s2*2) #输出:101101
+
注意:以上方法并未对原字符串进行修改,而是产生一个新值,字符串一旦被定义就无法修改。
四、字符串常用函数和方法
典例 1 下列选项中表示字符串的是 (  )
A.#92187#
B./accd/
C.["3321",22,'13']
D.'accdd'
D
√
题型导向一 字符串的概念
胜券点拨1
明考向 本题主要考查字符串的概念
审关键 字符串的辨认、Python表示的字符串的特点
考场思 维快闪 在Python中,用单引号、双引号或三引号表示字符串,三引号用于Python中的注释
典例 2 若字符串 s="today",则下列表达式中,值为 True 的是 (  )
A.s[1]=="t"
B.s[2]="y";s=="toyay"
C.s[-1]>s[1]
D.s<"apple"
C
√
题型导向二 字符串的特性及基本操作
胜券点拨2
明考向 本题主要考查Python中字符串的性质
审关键 字符串元素的访问、字符串的不可改变性、字符串的正索引和负索引、字符串的比较
考场思维快闪 A s[1]表示字符串中第二个位置的元素,即"o",故表达式s[1]=="t"的值为False
B 字符串在Python中是不可修改的,s的值始终为"today",故表达式s=="toyay"的值为False
C s[-1]的值为"y",s[1]的值为"o",字符串的比较一般是比较ASCII码值,所以"y">"o"的值为True
D 字符串的比较一般是比较其对应位置上字符的ASCII码值,故"today"与"apple"首先比较"t"和"a"的ASCII码值,"t">"a",故值为False
典例 3 已知字符串 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
√
胜券点拨3
明考向 本题主要考查字符串的特点
审关键 字符串的不可变性、字符串的常用函数与方法
考场思维快闪 字符串一旦被定义就不能被修改,故操作①②不可行。操作③将大写字母“P”与原字符串去掉首字符的子串连接,实现了将s中的第一个字符改为大写字母。操作④用upper()方法将首字符s[0]转换为大写字母,再将其与原字符串去掉首字符的子串连接,实现了将s中的第一个字符改为大写字母
典例 4 [2024.1浙江选考]若字符串 s 的值为"abcde",执行如下程序段后,变量 res 的值不可能是 (  )
from random import randint
res=""
i,j=0,len(s)-1
while i=i:
#randint(0,1)随机生成 0 或 1
if randint(0,1)==0:
res+=s[i]
i+=1
else:
res+=s[j]
j-=1
A."abced" B."aecbd" C."aedbc" D."edcba"
B
√
题型导向三 字符串及子串处理
胜券点拨4
明考向 本题主要考查随机函数和字符串
审关键 指针i、j分别从首、尾往中间遍历
考场思维快闪 该程序段实现当随机生成0时,res添加s[i],随机生成1时,res添加s[j]。选项B,第一次循环生成0,res为"a",第二次循环生成1,res为"ae"。若第三次循环生成0,则res为"aeb";若第三次循环生成1,则res为"aed",故不可能为"aec"
典例5 [2026金华十校联考]编写如下Python程序,实现功能:消除字符串s中连续三个及以上相同的字母(若消除后出现新的连续字符则一并消除)。例如,字符串s为"ABBCCDDDCBBA",消除结果是"AA"。
s=input()+"."
s1=[""]*(len(s)+1);t1=0 #存储结果字符
s2=[0]*(len(s)+1);t2=0 #存储连续计数
for i in s:
while s2[t2]>=3 and i!=s1[t1]:
t1-=s2[t2];t2-=1
if i==s1[t1]:
   ①   .
else:
t2+=1;s2[t2]=1
t1+=1
   ②   .
#输出s1[1:t1]的内容,代码略
则画线处应填的代码是 (  )
A.①s2[t2]+=1 ②s1[t1]=s1[s2[t2]]
B.①s1[t1]=i ②s1[t1]=s1[t1-1]
C.①s2[t2]+=1 ②s1[t1]=i
D.①s1[t1]=i ②s1[t2]=1
C
√
胜券点拨5
明考向 本题主要考查字符串处理
审关键 t1与t2指针
考场思维快闪 遍历字符串s中的字符,若上一个字符的连续计数超过3且当前字符与之不同,则执行消除操作;若当前字符i与上一个存入s1的字符s1[t1]相同,则增加连续计数;若当前字符i与s1[t1]不相同,则t2指针后移,用于统计下一个不同字符的连续计数。然后将当前字符i存入结果字符串s1
典例 6 [2025 县域联盟]找出字符串 s 中长度为 k、包含元音字母数最多的子串。例如,当 k=3,s="trouble"时,元音字母数最多的子串是"rou"。实现该功能的部分程序段如下,方框中应填入的正确代码为 (  )
vowels="aeiouAEIOU"
cnt=0
res=s[:k]
for i in range(k):
if s[i] in vowels:
cnt+=1
m=cnt
for i in range(k,len(s)):
       
if cnt>m:
m=cnt
res=s[i-k+1:i+1]
A.if s[i] in vowels: B.if s[i] in vowels:
cnt+=1 cnt+=1
if s[i-k+1] in vowels: if s[i-k] in vowels:
cnt-=1 cnt-=1
C.if s[i] in vowels: D.if s[i] not in vowels:
cnt+=1 cnt-=1
if s[i-k] in vowels: if s[i-k+1] in vowels:
cnt+=1 cnt+=1
B
√
胜券点拨6
明考向 本题主要考查字符串的相关操作
审关键 字符串的遍历、子串的访问
考场思 维快闪 该程序段首先统计子串s[:k]中元音字母的个数并存储到cnt中。for循环中,若s[i]是元音字母,则cnt累加1,若s[i-k]是元音字母,则cnt递减1,从而统计出子串s[i-k+1:i+1]中的元音字母个数。例如,若s="trouble",k=3,则子串s[:k]="tro",其中元音字母个数cnt为1,当i为3时,在cnt=1的基础上,判断字符s[i]("u")是否为元音字母,若是,则cnt累加1,再判断字符s[i-k]("t")是否为元音字母,若是,则cnt递减1,此时cnt就表示子串s[i-k+1:i+1]("rou")中的元音字母个数。以此类推,这样就可以遍历字符串s中所有长度为k的子串,从而找出包含元音字母数最多的子串
典例7 [2025.6浙江选考]有如下Python程序段:
i,r=n,""
while ir+=s[i]
i+=1
if i%5==0:
i+=n
若s为"abcdefghi",n为2,运行该程序段后,r的值为 (  )
A."abefi" B."abfg"
C."cdehi" D."cdhi"
C
√
胜券点拨7
明考向 本题主要考查字符串处理
审关键 字符串的遍历
考场思维快闪 循环变量i的初始值为2,因此变量r的首个字符是"c"。当i=4时,取得字符"e",此时执行i+=1后i变为5,i%5==0成立,执行i+=n,i变为7,因此字符"f"和"g"会被跳过
f=0
elif s[j-1]==s[j] or f==0 and s[j-1]>s[j]:
#进入初始状态
f=0
   ②   1
if    ③   :
print(s[i:j]) #输出数据山峰
请回答下列问题:
(1)请在画线处填入合适的代码。
(2)已知程序中变量 f 表示数据序列中 s[j-1]与s[j]的状态,当 f 为 1 时,表示当前数据序列从初始状态进入上升状态;当 f 为 2 时,表示当前数据序列       。
(3)若输入的数据序列为“51366432783”,则输出的数据山峰为       (若有多个数据山峰则以逗号间隔)。
典例 8 “数据山峰”是指序列中一段连续的区域,其中的数据包含一个从上升到下降的过程。例如,字符串 s="5136432783"中存在"136432"和"783"两座数据山峰。输出字符串 s 中所有“数据山峰”的 Python 程序如下:
s=input("请输入数据序列:")
i=0
j=1
f=0
while jif f==0 and s[j-1]f=1
   ①   1
elif f==1 and s[j-1]>s[j]:
f=2
elif f==2 and s[j-1]<=s[j]:
print(s[i:j]) #输出数据山峰
i=j-1
j+=1
f==2
从上升状态进入下降状态
2783
胜券点拨8
明考向 本题主要考查字符串的相关操作
审关键 字符串中从上升到下降的过程
考场思维快闪 (1) ①f=0为初始状态,f==0 and s[j-1](2) 当f为2时,表示当前数据序列从上升状态进入下降状态
(3) 根据代码“elif s[j-1]==s[j] or f==0 and s[j-1]>s[j]:”可知,当出现连续两个字符重复时,仍为初始状态,故数据序列“51366432783”中的数据山峰只有“2783”
通法一 Python字符串的易错点辨析
项目 易错点
字符串的表示 只能由单引号、双引号和三引号表示
字符串的访问 正索引第一个字符下标从0开始,从左往右递增
负索引第一个字符下标从-1开始,从右往左递减
字符串中可以使用切片,例如有一字符串a="abcdefg",则有以下几种切片方式,切片过程中冒号左边的下标能取到,右边的下标取不到:
①a[1:4],截取下标为1~3的连续字符"bcd",下标为4的字符取不到
②a[4:1],为空字符串,表示无法截取
③a[-4:-1],截取倒数第4个字符到倒数第2个字符,倒数第1个字符取不到
④a[1:-3],截取第2个字符到倒数第4个字符,倒数第3个字符取不到
⑤a[-5:4],截取倒数第5个(正数第3个)字符到正数第4个字符,正数第5个字符取不到
⑥a[3:],截取下标为3的字符(即第4个字符)及之后的所有字符
⑦a[:3],截取下标为3之前的所有字符,下标为3的字符取不到
字符串的不可变性 例如有一字符串S="string":
①若有语句S[1]="a",则会报错,因为字符串一旦被定义就不能再进行修改
②若使用函数比如S.upper(),返回的是S中所有字符转换成大写之后的一个新的字符串,S的值依然是"string"
字符串的可比性 字符串的比较是比较每个字符的ASCII码值。首先比较两个字符串中下标为0的字符,若相等则比较两个字符串中下标为1的字符,直至得到结果
字符串的子串分析 例如有一字符串S="abcdefg",若有另一字符串z="ace",虽然S中包含"a""c""e"这三个字符,但是z是一个连续整体,S中无法单独截取出这样一个整体,所以z不是S的子串
字符串的连接 ①利用“+”拼接两个字符串:"1"+"2"="12";"2"+"1"="21",注意顺序
②利用“*”重复一个字符串:"3"*3="333";"ab"*3="ababab"
1.判断一个字符串是否是回文串。
通法二 字符串的应用实例
方法 代码 输出结果
将原字符串逆序存放在新的字符串中,比较两个字符串的值是否完全相等 s="abcba" sx=s[::-1] if sx==s: print("是回文串") else: print("不是回文串") 是回文串
找到中间位置,取出字符串的左半部分,存储到字符串变量中;再取出右半部分并反转,存储到字符串变量中。若两个字符串变量的值相等,则为回文串 s=("thonoht") mid=len(s)//2 left=s[0:mid] #取左半字符串 temp=s[-mid:] #取右半字符串 right="" #右半字符串反转 for i in range(len(temp)): right=right+temp[len(temp)-i-1] if left==right: print("是回文串") else: print("不是回文串") 是回文串
将字符串第一个字符与倒数第一个字符比较,第二个字符与倒数第二个字符比较,直到位置重叠结束比较,中间一旦有一对字符不同,说明不是回文串 s="天连碧水水连天" i=0 #从左到右第一个下标 j=len(s)-1 #从右到左第一个下标 while i<=j: #当下标不重叠时进行循环 if s[i]!=s[j]: print("不是回文串") break i+=1 #向右移动 j-=1 #向左移动 if i>j: #下标移动过程没有中断 print("是回文串") 不是回文串
2.正则表达式:用一些特定的字符组成的一个“规则字符串”。它可以实现检查一个字符串中是否含有某种子串、将匹配的子串替换或者从字符串中取出符合某个条件的子串等操作。
1.已知字符串s="6t88yw",则下列表达式及其值对应正确的是 (  )
A.len(s)的值为6
B.s[0]的值为6
C.s[0]+s[2:4]的值为"74"
D."tyw" in s的值为True
s[0]的值为"6",是字符串类型。s[0]+s[2:4]的值为"688"。"tyw" in s的值为False。
一、字符串的特性及基本操作
A
√
2.下列选项中,能从字符串a="Happy New Year"中获取子串"New"的是 (  )
A.a[6]
B.a[:9]
C.a[6:9]
D.a[6:8]
子串"New"在字符串a中的位置从下标6开始,到下标8的位置结束,所以在a中对该部分切片就能得到子串"New",注意切片时不取终值,故终值填写8的后一位,即a[6:9]。
C
√
3.[2026.1浙江选考]有如下Python程序段:
c,i="",0
while i=0:
 if s[i]=="e":
  t-=1
 else:
  c+=s[i]
 i+=1
若s为"keeper",t为2,执行该程序段后,c的值为 (  )
A."k" B."kp" C."kpr" D."kper"
B
√
二、字符串及子串处理
该程序段遍历字符串s,若当前字符为"e",则t的值减1;否则将当前字符连接到字符串c的后面。当字符串s中的所有字符都遍历完或t的值小于0时,程序结束。对于s="keeper"和t=2:首先将"k"连接到c的后面,然后遍历到两个"e",t的值减2,再将"p"连接到c后面,之后又遇到"e",t的值减1,此时t的值小于0,不再继续遍历,得到c的值为"kp"。
4.有如下Python程序段:
a="b a l a n c e"
b=a.replace(" ",",",3)
b=b.upper()
li=b.split(",")
print(li)
执行该程序段后,输出的列表li的长度是 (  )
A.7 B.8 C.3 D.4
D
√
该程序段第一步通过replace语句将字符串a中的前三个空格符替换为“,”;第二步将字符串b中的小写字母都改为大写字母;第三步将字符串b以“,”为分隔符切片,得到的列表li为[''B'',''A'',''L'',''A N C E''],故输出的列表li的长度为4。
5.有如下Python程序段:
mw="mkgysa"
st="325041"
n=len(st)
a=[""]*n
i=0
while i t=int(st[i])
 a[t]=mw[i]
 i+=1
result="".join(a) #将列表转换为字符串
运行该程序段后,result的值是 (  )
A."yakmsg" B."gsmkay"
C."msgyak" D."aymkgs"
该程序段遍历字符串mw,依次取出字符串st中的字符作为索引t,将当前遍历到的字符mw[i]赋值给a[t],最后将列表a中的字符按顺序连接到result中,故最终result的值为"yakmsg"。
A
√
6.[2025浙江名校协作体]正读和反读都一样的字符串称为“回文字符串”,现要判断某非空字符串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]
判断一个字符串是否为回文字符串,可以将字符串分成两部分,将前半部分与后半部分反转后进行比较,如果两部分相等,则该字符串为回文字符串。s[:k]表示字符串的前半部分,s[n-k:][::-1]表示字符串的后半部分反转后的结果。通过比较这两部分是否相等,可以判断字符串是否为回文字符串。
B
√
7.有如下Python程序段:
s=input("输入一个二进制数:")
result=""
k=0
for ch in s:
 if ch=="0":
  k=k-1
 else:
  k=k+1
 if abs(k)  result=s[k]+result
print(result)
执行该程序段后,输入二进制数“0100”,输出的结果是 (  )
A.0000 B.0011 C.1101 D.0100
A
√
程序遍历字符串s中的字符,第一轮,ch的值为"0",执行语句k=k-1,k的值为-1,判断abs(k)的值小于len(s),result=s[-1]+""="0";第二轮,ch的值为"1",执行语句k=k+1,k的值为0,abs(k)8.有如下Python程序段:
s1="aabbcabba"
s2="ab"
result=""
i=0
while i<=len(s1)-len(s2):
 if s1[i:i+len(s2)]!=s2:
  result+=s1[i]
  i=i+1
 else:
  i=i+len(s2)
print(result)
执行该程序段后,result的值为 (  )
A."abcb" B."abcba" C."cb" D."cba"
A
√
该程序段遍历字符串s1,每次以i为起始位置获取长度为len(s2)的子串,并与s2进行比较。若不相等,则将字符s1[i]连接到result中,然后跳到下一个字符;若相等,则直接跳过该子串。由于循环条件为i<=len(s1)-len(s2),s1中最后一个字符不会连接到result中,故最终result的值为"abcb"。
9.有如下Python程序段:
s=input("请输入待处理字符串:")
flag=True;n=0
i=0
while i if s[i]=="a" and flag:
  n+=1
  flag=False
 elif s[i]==" ": #s[i]是空格字符
  flag=True
 i+=1
print(n)
执行该程序段后,若输入的字符串为"Python is a computer programming language that I really like!",则输出的结果是 (  )
A.3 B.4 C.5 D.6
C
√
该程序段统计字符串中含有字母“a”的单词个数,故输出的结果是5。
10.[2026嘉兴模拟]有如下Python程序段:
from random import randint
def func(s):
 r1="";r2=""
 i=0
 while i  f=randint(0,1)
  if f==0:
   r1=r1+s[i]
  else:
   r2=r2+s[i]
  i=i+1
 return r1+r2
若s="ABCDE",则执行语句res=func(s)后,res的值不可能是 (  )
A."BCDAE" B."CEABD" C."ACBDE" D."ACEDB"
D
√
函数func(s)遍历字符串s,每次循环随机生成0或1,若随机数为0,则将当前字符连接在r1后面,否则连接在r2后面,最后返回r1+r2。因此字符串s中的所有字符会被分配到r1或r2中,且r1中的字符在字符串s中的相对位置不会改变,r2同理。选项D中,若r1为"ACE",则r2应为"BD",而不是"DB"。
11.[2025浙南名校联盟]有如下Python程序段:
s1="blgr"
s2="bollymgpric"
i=0;j=0
s3=""
while i<=len(s1)-1 and j<=len(s2)-1:
 if s1[i]==s2[j]:
  i+=1
 else:
  s3=s3+s2[j]
 j+=1
print(s3)
执行该程序段后,输出的结果是 (  )
A.oymp B.olymp C.olympic D.oympic
B
√
该程序段使用两个变量i和j分别遍历字符串s1和s2。在while循环中,当s1[i]和s2[j]相等时,i自增1,即移动到s1的下一个字符;当s1[i]和s2[j]不相等时,将s2[j]添加到s3中。无论比较结果如何,j都会加1,即移动到s2的下一个字符。故最终s3的值为"olymp"。
12.有如下Python程序段:
s=input("请输入字符串:")
i=0
j=1
s1=""
maxs=""
t=0
while i if s[i]<=s[i+1]:
  j+=1
  s1=s[t:t+j]
  if len(maxs)<=len(s1):
   maxs=s1
 else:
  s1=""
  t=i+1
  j=1
 i+=1
print(maxs)
C
√
该程序段的功能是找出字符串中的最长连续非递减子串。已知字符串比较的是字符的ASCII码值,小写英文的ASCII码值从97开始,数字字符的ASCII码值从48开始,故数字的ASCII码值小于字母。由语句“if len(maxs)<=len(s)”可知,若后续有连续非递减子串长度等于maxs,则maxs存储靠后的子串,故最终得到字符串中的最长连续非递减子串为"559h"。
执行该程序段后,若输入p8579yt559h6,则输出的结果是 (  )
A.579 B.579y
C.559h D.t559h
13.[2025台金联考]循环同构字符串:将字符串s1的头尾相连成环,再从其中某处断开得到字符串s2。若s2不等于s1,则s2为s1的循环同构字符串。例如,字符串s1="abcd",则"bcda"、"cdab"、"dabc"均为s1的循环同构字符串。现编写如下程序判断字符串s2是否为字符串s1的循环同构字符串:
s1=input()
s2=input()
   (1)    
for i in range(1,len(s1)):
    (2)    
 if s2==tmp:
     (3)    
if flag:
 print("是循环同构字符串")
else:
 print("不是循环同构字符串")
A
√
画线处有如下可选代码:
①flag=False 
②flag=True
③tmp=s1[i:len(s1)]+s1[:i] 
④tmp=s1[i+1:len(s1)]+s1[:i]
若要实现上述功能,则画线(1)(2)(3)处应填入的代码依次为 (  )
A.①③②
B.②③①
C.①④②
D.②④①
该程序段通过for循环生成字符串s1的循环同构字符串,然后与s2进行比较。在循环开始前,先将标志变量flag设置为False,表示初始假设s2不是s1的循环同构字符串。for循环中变量i遍历s1的断开位置,通过s1[i:len(s1)]+s1[:i]生成了s1的一种循环同构字符串。当循环同构字符串tmp与s2相等时,就将flag设置为True,表示s2是s1的循环同构字符串。
若字符串s的值为"3a2bc1",则执行该程序段后,输出的结果是 (  )
A.aaa B.aabc
C.aaabcbc D.aaabcbc1
14.有如下Python程序段:
m,ss,tmp=0,"",""
flag=False
for ch in s:
 if "0"<=ch<="9":
  if flag==True:
   ss=ss+tmp*m
   m,tmp=0,""
   flag=False
  m=m*10+int(ch)
 else:
  tmp=tmp+ch
  flag=True
ss=ss+tmp*m
print(ss)
C
√
该程序段遍历字符串s,将连续的数字字符转换为整数m,将其后面的连续非数字子串重复m次连接到字符串ss中。故ss="a"*3+"bc"*2="aaabcbc"。
15.将计算机中的二进制图像压缩为数字字符串,压缩方法如下:若连续相同的二进制数的数量不超过9,则用两个数字字符表示,前一个表示数量,后一个表示该二进制数;若数量超过9,则数量中间用"-"连接(如数量34表示为"3-4",假设数量不超过99)。例如,某图像的部分压缩结果为"21301-21",则解压为"11000111111111111"。实现解压功能的Python程序如下,请在画线处填入合适的代码。
s=input("输入图像压缩后的数字字符串:")
st=""
i=0
n=   ①    
while i if s[i+1]!="-":
     ②    
 else:
  count=int(s[i]+s[i+2])
  i=i+2
 for j in range(count):
  st=st+s[i+1]
    ③    
print("解压后的数据为:",st)
①len(s) ②count=int(s[i]) ③i=i+2 或 i+=2
①获取压缩字符串的长度以控制循环终止条件,故填入代码为len(s)。②若当前字符的下一个字符不是"-",则当前字符即表示数量,需要将其转换为整数,故填入代码为count=int(s[i])。③此时处理两个字符作为一个压缩单元,故处理结束后应跳过这两个字符,故填入代码为i=i+2或i+=2。
if not flag:
 print("无成立的等式")
else:
 for i in li1:
  print(i,end=" ")
请回答下列问题:
(1)执行该程序段后,若输入的式子为“333=36”,则输出的结果是        。
(2)请在画线处填入合适的代码。
16.下面是实现一个趣味数学游戏的Python代码,游戏内容如下:输入一个式子,如“345=39”,在等号左边加上加号“+”,使等式成立,输出“34+5=39”;若无论如何都无法成立,则输出“无成立的等式”。
flag=False
s=input("输入式子:")
li1=[]
for c in range(len(s)):
 if s[c]=="=":
     ①    
#根据等号分出左边和右边的数字串
s1=s[:c]
s2=   ②    
for i in range(1,len(s1)):
 if    ③   :
  li1.append(s1[:i]+"+"+s1[i:]+"="+s2)
  flag=True
3+33=36 33+3=36
①break ②s[c+1:] ③int(s1[:i])+int(s1[i:])==int(s2)
(1)根据题目要求,将“333”分解为“33”和“3”或者“3”和“33”,这样转换成整数后相加的和与36相等。 (2)①处for循环的作用是遍历找到字符“=”以划分左右两边的子串,故当s[c]的值为''=''时,结束遍历,故填入代码为break。②处s1存储等号左边的数字串,s2存储等号右边的数字串,已知下标为c处的字符为等号,故应截取c的后一位直到字符串最后一位,故填入代码为s[c+1:]。③处列表li1存放满足条件的语句,i在s1中遍历,若当前以位置i分隔的两个数字相加的和与s2表示的整数相等时,满足条件,注意此处s1和s2是字符串类型,需要将其转换为整型再进行运算,故填入代码为int(s1[:i])+int(s1[i:])==int(s2)。
17.编写Python程序,实现给定一个字符串s,输出含有连续两个s作为子串的最短字符串。注意两个子串s可能有重叠部分。例如,"ababa"含有两个"aba"。程序运行效果所示。
s=input("输入字符串s:")
result=s
x=s[0]
res=s[1:]
'''找出s的首字符在res中出现的位置,使用find()方法'''
i=   ①    
while i!=-1:
 if s[:len(res)-i]==res[i:]:
  result=   ②    
  break
 else:
  res=   ③    
  i=res.find(x)
if result==s:
 result+=s
print("最短字符串为:",result)
144121441214
①res.find(x) ②s+s[len(res)-i:] 或其他等价答案 ③res[i+1:]
请回答下列问题:
(1)当输入的字符串s为"1441214"时,输出的最短字符串是       。
(2)请在画线处填入合适的代码。
(1)根据题目描述,生成的最小字符串要求包含两个原字符串且字符可重叠,所以在字符串末尾找到与开头相同的子串"14",之后将原字符串中"14"之后的子串拼接到字符串"1441214"后面即可,得到的字符串为"144121441214"。 (2)①处根据注释,已知x为s的首字符,res是字符串s去掉首字符之后的子串,可利用find()方法从res中找出字符x出现的第一个位置,语句为res.find(x)。②处是当s[:len(res)-i]==res[i:]时执行的语句,表示在s中取从第一位开始长度为len(res)-i的子串,与res中第i位到最后一位的子串进行对比,若相等,说明这部分可以重叠,则得到的最短字符串result的结果是s加上len(res)-i这一位置开始的子串。③处的作用是当i之后的字符与s开头字符不相同时,查找res之后是否还有与s首字符相等的字符,故对res进行重新截取,范围是去掉i位之后的子串,即res[i+1:]。

展开更多......

收起↑

资源预览