内容正文:
专题 18
字符串
1
知识梳理
归纳提升
题型考法
考点1 字符串的概念
1.字符串是由零个或多个字符组成的有限序列。
2.字符串中所包含的_____________称为字符串的长度。
3. 字符串一般用单引号、双引号或三引号加以界定,如'String'、"String"、
'''String''',其中三引号在Python 中用于注释。
4. 字符在字符串中的位置关系,与一般线性表结构类似。字符串里的字.
符按顺序排列,一个字符串里每个字符有其确定的位置(下标)。
字符个数
知识梳理
归纳提升
题型考法
5.特殊字符串
(1)空串:长度为零,不包含任何字符的串。
(2)空格串:由空格组成的串,一个空格为一个字符,长度为空格字
符的个数。
6.字符串的子串
(1)一个字符串中任意个(0 个及以上,不超过字符串长度)连续的
字符序列。
(2)空串也是字符串的子串。
(3)字符串本身也是其自身的子串,除其本身之外的子串称为____________。
真子串
知识梳理
归纳提升
题型考法
考点2 字符串的特性
1.有限序列性
字符串是线性表结构,其对象是由字符表示的集合,数据元素个数是有限的。
2.可比性
(1)当字符串中的字符全部来自同一个字符集,例如都来自 ASCII 字
符集时,可以比较字符的 ____________来实现对字符串大小的比较。
(2)规则是从左至右,依次比较两个字符串中对应位置上字符的
ASCII码值。
ASCII码值
知识梳理
归纳提升
题型考法
考点3 字符串的基本操作
1.字符串的遍历和访问
在 Python 中,可以用元素在字符串中的位置作为标号来访问每个元素,可以使用正索引标号和负索引标号。
2.子串判断
在 Python 中,可以用 in 运算实现子串判断,格式为“字符串 a in 字符串 S”,意为判断字符串 a是否为字符串 S 的子串。判断结果为布尔类型
的值。
3.求子串
在 Python 中用切片方式从字符串中取出子串。
4.字符串的连接
在 Python 中用“+”号连接符实现将两个字符串前后连接在一起。
知识梳理
归纳提升
题型考法
5.字符串常用函数
(1)统计:len(x),统计字符串 x 中字符的个数。
(2)查找:x.find(y),返回 x 的子串 y 在字符串 x 中出现的_______下
标,不存在则返回-1。
(3)修改(替换):x.replace(old,new[,max]),将字符串 x 中的子串
old,替 换 为 新 的 子 串 new,max 指定最大替换次数,默认全
部替换,返回一个替换后的新字符串。
(4)转换:x.upper(),把字符串 x 中的小写字母转换为大写字母;
x.lower(),把字符串 x 中的大写字母转换为小写字母。返回新的
字符串。
(5)分割:x.split(str= "",num=string.count(str)),以 str 分割切片字符串
x,分割得到的所有子串存储在列表中,设置 num 值指定最大切
片子串数。返回值为列表。
首字符
知识梳理
归纳提升
题型考法
以字符串 s="Python"为例,访问其字符的方式:
(1)正索引标号访问。正索引标号即从左往右,字符串的索引从 0 开
始递增,一个索引标记一个字符。如当访问第一个字符"P"时,访
问方式为 s[0],当访问第二个字符"y"时,访问方式为 s[1],以此
类推。
(2)负索引标号访问。负索引标号即从右往左,字符串的索引从-1 开
始递减,一个索引标记一个字符。如当访问倒数第一个字符"n"时,
访问方式为 s[-1],当访问倒数第二个字符"o"时,访问方式为 s[-
2],以此类推。
知识梳理
题型考法
归纳提升
(1)获取字符串 s 中索引 x 到索引 y 之间的子串:s[x:y+1],x 为起始
位置索引,y+1 为终止位置索引,终止位置索引的值取不到,故
要往后多取一位。
(2)获取字符串 s 中索引 x 之前所有的元素:s[:x],获取的子串中不
包含索引 x 位置的元素。
(3)获取字符串 s 中索引 x 及之后所有的元素:s[x:],获取的子串中
包含索引 x 位置的元素。
知识梳理
题型考法
归纳提升
(1)数字字符:如比较"18"与"7",则先比较两个字符串的首字符"1"和
"7"的 ASCII 码值,由于"1"的 ASCII码值小于"7",因此字符串"18"
比字符串"7"小。
(2)英文字母:如比较"like"和"list",前 2 个字符一样,比较第 3 个字符
"k"和"s"的 ASCII 码值,由于"k"的ASCII码值小于"s"的 ASCII码值,
因此字符串"like"的值小于"list"的值。
(3)空串的值最小。
知识梳理
题型考法
归纳提升
考向 一 字符串的概念与特性
例 1 字符串 a="I love my hometown.",下列选项中不是该字符串的子串的是 ( )
A."I l"
B."to"
C."lo"
D."My"
D
例 1 D 字符"M"不在字符串 a 中。
√
知识梳理
归纳提升
题型考法
例 2 字符串 s 的值为"aquarius",若要将 s 的值修改为"Aquarius",则下列代码中能够实现该功能的是 ( )
A.s[0]="A"
B.s="A"+s[:1]
C.s=s[0].upper()+s[1:]
D.s=s.replace("a","A")
C
例 2 C 在 Python 中,字符串是不可修改变量,若要修改一个字符串变量的值,则只能对其重新赋值。选项 A,不能修改某一位置的字符,程序会报错。选项 B,直接对 s 重新赋值,赋值后 s 的值为"Aa",不符合要求。选项 D,将字符串 s 中的字符"a"全部替换为"A",最终得到 s 的值为"AquArius",不符合要求。
√
知识梳理
归纳提升
题型考法
考向 二 字符串的 Python 实现
例 3 [2025 杭州联考]有如下 Python 程序段:
s="zangh8769";res=""
for ch in s:
if "0"<=ch<="9":
k=int(ch)%5;res=s[k]+res
执行该程序段后,变量 res 的值是 ( )
A.gnah B.gzan C.nazg D.hang
D
例 3 D 遍历字符串 s,若当前字符 ch 是数字,则将其转换为整型后对 5 取余的结果赋值给 k,并将字符串 res 逆序 连 接 字 符 s[k]。 执行该程序段后,变量 res 的值是"hang"。
√
知识梳理
归纳提升
题型考法
例 4 [2025浙江联考]有如下 Python 程序段:
sc="ab018/20c2/d101e"
s,c=0,0
flag=False
for ch in sc:
if "0"<=ch<="9":
c=c*10+int(ch)
elif "a"<=ch<="z":
flag=True
else:
if flag:
s+=c
flag=False;c=0
print(s)
执行该程序段后,输出的结果是 ( )
A.220 B.101 C.119 D.321
A
例 4 A 遍历字符串 sc,若当前字符是数字字符(即 0~9),则将 c 更新为 c*10+int(ch)。若当前字符是小写字母(即 a~z),则将 flag 更新为 True。若当前字符是其他字符 ,且 flag 为 True,则 变 量 s 累 加 c;接 着 将 flag 赋 值 为False,c 置为 0。执行该程序段后,输出的结果为 220。
√
知识梳理
归纳提升
题型考法
例 5 [2025 温州新力量联盟]有 如 下 Python 程序段:
s1=input("请输入一个 4 位正整数:")
s2=""
n=len(s1)
for i in range(n):
d=int(s1[i])+int(s1[(i+1)%n])
if d%2==0:
s2+=chr(d+ord("A")-1)
else:
s2+=chr(d+ord("a")-1)
print(s2)
若输入的字符串 s1 的值为"1528",则执行该程序段后,输出的结果是 ( )
A.GhKj B.FGjI C.FgJi D.iJgF
C
例 5 C 若输入的字符串 s1 的值为"1528",则 n 的值为 4,i 的取值范围为 0~3。当 i 为 0 时,d 的值为 6,s2 的值为"F"。当 i 为 1 时,d 的值为 7,s2 的值为"Fg"。当 i 为 2 时,d 的值为 10,s2 的值为"FgJ"。当 i 为 3 时,d 的值为 9,s2的值为"FgJi"。
√
知识梳理
归纳提升
题型考法
考向 三 字符串的应用
例 6 [2025 新力量联盟]假设 maxn 是某字符串中出现次数最多的字母的出现次数,minn 是该段字符串中出现次数最少的字母的出现次数,若maxn 与 minn 之差恰好是一个完美数,则称这个字符串是“Lucky string”,否则不是。完美数是一个正整数,它的所有真因子(除了其自身以外的因子)之和等于它本身。例如,28 是一个完美数,因
为它的真因子有 1、2、4、7、14,1+2+4+7+14=28。
(1)根据题意,若字符串为“Where there is a will,
there is a way.”,则该字符串__________(选填:是 / 不是)“Lucky string”。
不是
知识梳理
归纳提升
题型考法
(2)实现上述功能的 Python 程序如下,请在划线处填入合适的代码。
def process_sentence(s):
dic={}
for char in s:
if "a"<=char<="z" or "A"<=char<="Z":
if char in dic:
__________________ ①
else:
dic[char]=1
maxn=0
minn=10000
#dic.values()返回字典中所有的值
for i in dic.values():
if i>maxn:
maxn=i
if i<minn:
minn=i
return maxn-minn
dic[char]+=1 或 dic[char]=dic[char]+1
知识梳理
归纳提升
题型考法
def check_perfect(n):
if n<=1:
return False
else:
sum=0
for i in range(1,n):
if ____________________②:
sum+=i
return___________________③
sentence=input("请输入一段字符串:")
result=check_perfect(num)
if result==True:
print("它是一个“Lucky string”")
else:
print("它不是一个“Lucky string”")
(3)程序加框处代码有错,应修改为_____________________________________。
n%i==0 或 n/i==n//i 或 n/i==int(n/i)
sum==n
num=process_sentence(sentence)
知识梳理
归纳提升
题型考法
例6 (1)不是 (2)①dic[char]+=1 或 dic[char]=dic[char]+1 ②n%i==0 或 n/i==n//i 或 n/i==int(n/i) 或其他等价答案 ③sum==n 或其他等价答案
(3)num=process_sentence(sentence)
(1)若字符串是“Where there is a will,there is a way.”,则maxn的值是6,minn的值是1,maxn与minn之差为5,不 是 一 个 完 美 数 ,故 该 字 符 串 不 是“Lucky
string”。 (2)①处对字符进行计数,若 char 已存储在字典 dic 中,则对其值进行累加,故填入代码为 dic[char]+=1。②处寻找 n的所有真因子,故填入代码为
n%i==0。③处判断 n 是否与它的所有真因子之和相等,故填入代码为sum==n。 (3)加框处函数调用的参数有错,应是变量sentence。
知识梳理
归纳提升
题型考法
THANK YOU
$$