第7课 字符串1——初识字符串-【精彩三年】2024-2025学年高中信息技术选择性必修1课程探究与巩固Word教参(浙教版2019)
2025-08-08
|
26页
|
54人阅读
|
1人下载
教辅
资源信息
| 学段 | 高中 |
| 学科 | 信息技术 |
| 教材版本 | 高中信息技术浙教版选修1 数据与数据结构 |
| 年级 | 高二 |
| 章节 | 3.1 字符串 |
| 类型 | 教案-讲义 |
| 知识点 | 字符串的概念与特性,字符串的基本操作 |
| 使用场景 | 同步教学-新授课 |
| 学年 | 2024-2025 |
| 地区(省份) | 全国 |
| 地区(市) | - |
| 地区(区县) | - |
| 文件格式 | DOCX |
| 文件大小 | 1.52 MB |
| 发布时间 | 2025-08-08 |
| 更新时间 | 2025-08-08 |
| 作者 | 浙江良品图书有限公司 |
| 品牌系列 | 精彩三年·高中同步课程探究与巩固 |
| 审核时间 | 2025-07-11 |
| 下载链接 | https://m.zxxk.com/soft/52989617.html |
| 价格 | 5.00储值(1储值=1元) |
| 来源 | 学科网 |
|---|
内容正文:
第三章│字符串、队列和栈
第7课 字符串1——初识字符串(见学生用书P51)
——3.1 字符串,教材P64~73
1.理解字符串的概念和特性。 2.掌握字符串的基本操作,并能编程实现。
1.字符串的概念与特性
(1)字符串的相关概念
①字符串是由 零个 或多个字符组成的 有限序列 。
②字符串中所包含的字符个数称为字符串的 长度 。
③为了区分字符串与其他的标识符,字符串一般采用 单引号 或 双引号 加以界定。
④一个字符串可以包含多种字符集字符,常见字符集有ASCII字符集、GB2312字符集等。
⑤特殊的字符串
空串: 不包含 任何字符的串,其长度为 零 。
空格串:是由空格组成的字符串,其长度为 空格字符的个数 。
⑥一个字符串中任意个连续的字符序列称为该字符串的子串。
(2)字符串的特性
① 有限序列性 :字符串是一种线性表结构,它的数据元素个数是有限的,由零个或多个字符组成;可以用元素在字符串中的 相对位置 作为标号来访问每个元素。
②字符串的可比性:如果字符串中的字符全来自ASCII字符集时,则可以按 ASCII码值 进行比较,规则为 从左至右 ,依次比较两个字符串中对应位置上字符的ASCII码值。
2.字符串的基本操作
实际应用中,基本的操作有子串判断、求子串、字符串的连接等。
(1)子串判断:用于检查字符串a是否为字符串S的子串。
①可以使用in运算实现,格式为“字符串a in字符串S”。当字符串S包含字符串a时,值为True,否则值为False。
②也可以用in运算,逐个枚举字符串中的字符。
(2)求子串:用于从字符串中取出其子串。在Python中,可以用切片实现,格式为“字符串[位置i:位置j]”。
下标索引:利用方括号[]可以通过索引得到相应位置(下标)上的字符。
(3)字符串的连接:用于把两个字符串连接在一起。在Python中,用“+”号连接符实现,格式为“字符串S1+字符串S2”。
(4)字符串常用函数和方法
函数和方法
功能
len(x)
统计字符串x中字符的个数
x.find(y)
返回字符串x中子串y出现的首字符下标,若找不到,则输出-1
x.split(str=””,mum=string.count(str))
以str分隔符切片x,如果num有指定值,那么仅分隔num个子串。切片得到的值存储在列表中
x.replace(old,new[,max])
将字符串x中的旧子串替换成新子串,替换次数不超过max次
x.upper()
把字符串x中的小写字母转换成大写字母
x.lower()
把字符串x中的大写字母转换成小写字母
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.字符串遍历与数据提取
将字符串中的数字进行提取,并进行累加,运行界面如下所示:
实现方法1
实现方法2
s=input()
t=””
sum=0
print(”输入数字为: ”)
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=””
if t!=””:
print(t)
sum=sum+int(t)
print(”数据之和为: ”+str(sum))
s=input()
t=0
sum=0
print(”输入数字为: ”)
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
if t!=0:
print(t)
sum=sum+t
print(”数据之和为: ”+str(sum))
实现方法3
实现方法4
s=input()
t=0
sum=0
print(”输入数字为: ”)
for i in range(len(s)):
ch=s[i]
if ch>=”0” and ch<=”9”:
t=t+1
else:
sum=sum+int(s[i-t:i])
print(s[i-t:i])
t=0
if t!=0:
print(s[i-t+1:i+1])
sum=sum+int(s[i-t+1:i+1])
print(”数据之和为: ”+str(sum))
s=input()
t=0
sum=0
i=0
print(”输入数字为: ”)
while i<len(s):
ch=s[i]
if ch>=”0” and ch<=”9”:
j=i
while j<len(s) and s[j]>=”0”
and s[j]<=”9”:
j=j+1
sum=sum+int(s[i:j])
print(s[i:j])
i=j-1
i=i+1
print(”数据之和为: ”+str(sum))
3.子串的删除与替换
子串的删除程序:在字符串s1中找全部的字符串s2并删除
s1=input(”字符串s1为: ”)
s2=input(”字符串s2为: ”)
n1=len(s1)
n2=len(s2)
i=0
s=””
while i<=n1-n2:
ch=s1[i:i+n2]
if ch==s2:
i=i+n2
else:
s+=s1[i]
i=i+1
s=s+s1[i:len(s1)]
print(”新字符串为: ”+s)
运行结果为:
字符串s1为: abc123dfabc8uyabc7
字符串s2为: abc
新字符串为: 123df8uy7
子串的替换程序:在字符串s1中找全部的字符串s2并替换为字符串s3
s1=input(”字符串s1为: ”)
s2=input(”字符串s2为: ”)
s3=input(”字符串s3为: ”)
n1=len(s1)
n2=len(s2)
i=0
s=””
while i<=n1-n2:
ch=s1[i:i+n2]
if ch==s2:
s=s+s3
i=i+n2
else:
s+=s1[i]
i=i+1
s=s+s1[i:len(s1)]
print(”新字符串为: ”+s)
运行结果为:
字符串s1为: abc123dfabc8uyabc7
字符串s2为: abc
字符串s3为: MKL
新字符串为: MKL123dfMKL8uyMKL7
下列关于字符串的说法中,不正确的是( A )
A.不存在比字符串“1”更短的字符串
B.外卖订单的订单号可以用字符串表示
C.一个字符串可以同时出现不同字符集的字符
D.字符串“Hello”是字符串“HelloWorld”的子串
【解析】 空串也是字符串,其长度为0,字符串“1”的长度为1,所以,长度最短的字符串为空串,选项A错误。
变式1下列关于字符串的说法中,正确的是( B )
A.字符串是一种非线性表结构
B.字符串是由n(n≥0且为整数)个字符组成的有限序列
C.字符串“中国,China”的长度为10
D.已知字符串x="Python",则x[1]表示字符"P"
【解析】 字符串是由0个或多个字符组成的有限序列,是一种线性表结构,索引位置从0开始,选项B正确。
有如下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个。
变式1有如下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”。
有如下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)
若输入的数据为“321AqC56”,则输出的结果是( B )
A.642 B.321 C.698 D.377
【解析】 提取字符串中的数值,并进行累加,其中“321”提取后的结果为321;由于数字串结束后,再出现大写字母,才会累加,但不初始化t的值;如果出现小写字符,则t=0;最后的56之后没有字母,不会累加。
变式12023·余姚中学检测有如下Python程序段:
sum=0;c=max=0
s=”i33d40!72”
for ch in s:
if ch>=”0” and ch<=”9”:
c=c*10+int(ch)
else:
if c>max:
max=c
c=0
执行该程序段后,max的值为( C )
A.0 B.11 C.40 D.72
【解析】 程序功能为碰到非数字字符时,将前面的数字字符转为数值,并比较最大值。由于字符串并不是以非数字字符结尾,所以72不参与最值的比较。
变式2有如下Python程序段:
s='8+9+12+14'
sum=0
for i in s:
if i=='+':
sum+=t
else:
t=int(i)
print(sum)
执行该程序段后,输出的结果是( B )
A.5 B.19 C.23 D.43
【解析】 遇到“+”后,对变量t进行累加,t中存放“+”左边最近的数字字符转换的数值。故结果为8+9+2=19。
有如下Python程序段:
s=input(”请输入字符串: ”)
count=0
for i in s:
if i>=”0”and i<=”9”:
count+=1
print(s[count:count+3])
若输入的字符串为“AB12CCC222GGBD”,则输出的结果是( C )
A.CCC B.GGBD C.CC2 D.C22
【解析】 程序统计数字字符的个数,输入的字符串中数字字符共有5个,则切片切的位置为5,6,7,选项C正确。
变式1有如下Python程序段:
s=”01234”
ans=””
for i in s:
if i in ”02468”:
ans=ans+i
else:
ans=i+ans
print(ans)
执行该程序段后,输出的结果是( B )
A.10 B.31024 C.42013 D.43210
【解析】 该程序的功能为:遍历字符串s,取出偶数字符顺序累加,取出奇数字符倒序累加,则结果为31024。
变式2有如下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
【解析】 循环i从第2个位置开始处理,若ASCII码值小于97,结合字符串s,即当为大写字母时,取出字符串s[pre:i],pre的初值为0,故第一次截取出单词More,第二次截取出Haste,第三次截取出Less,要注意最后一个Way取不到,所以三个单词中的最大值是More。
2022·浙江7月学考有如下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
【解析】 结合Python程序,实现如下功能:ch为数字字符,那么加密后字符的数值和原数字字符的数值相加和为9;ch为小写字母,那么加密后的字符为原小写字母对应的大写字符;ch为除数字字符和小写字母的其他字符,那么加密后的字符为原ch保持不变;结合需加密字符串为:p='Tel-114',那么按加密规则,程序运行后得到的输出结果为:'TEL-885'。
变式1有如下Python程序段:
s=”python”
ans=””
for c in s:
t1=ord(c)-ord(”a”)
t2=chr((t1+2)%26+ord(”a”))
ans=t2+ans
print(ans)
执行该程序段后,输出的结果是( D )
A.”python” B.”qrkwbs” C.”ravjqp” D.”pqjvar”
【解析】 程序完成将每个小写字母循环右移两个位置并逆序输出,实际只需知道p变为r并在最右侧,故选项D正确。
变式22023·慈溪中学检测有如下Python 程序段:
s=input(”请输入字符串s: ” )
result=””
i=0
while i<len(s)-1:
n=(ord(s[i+1])-ord(s[i]))%32
result=result+s[i]+'#'*(n-1)
i+=1
result+=s[i]
print(result.upper()) #upper() 函数可将字符串中的小写字母转为大写字母
当输入的字符串s 的值为“AbdgHjLn”时,执行该程序段后,输出的字符串为( B )
A.Ab#d##gH#j#L#n B.AB#D##GH#J#L#N
B.ab#d#gh#j#l#n D.AB#D#GH#J#L#N
【解析】 后一个字母和前一个字母(不区分大小写)中间相差的字母个数用“#”来代替,最后结果全部转换为大写字母来表示。
有如下Python程序段:
S='1B2';ans=0;n=len(s)
for i in s:
if '0'<=i<='9':
ans=ans*16+int(i)
if 'A'<=i<='F':
ans=ans*16+ord(i)-55
print(ans)
执行该程序段后,输出的结果是( B )
A.428 B.434 C.439 D.450
【解析】 该程序实现将十六进制数转换为十进制数。1B2=2×1+11×16+1×256=434。
变式1有如下Python 程序段:
s=input()
n=len(s);ans=””
for i in range((len(s)-1)//4+1):
tmp=0
for j in range(4):
n-=1
if n>=0:
tmp+=int(s[n])*2**j
if tmp<10:
ans=str(tmp)+ans
else:
ans=chr(tmp+55)+ans
print(ans)
若输入的内容为“10110101100”,则输出的结果是( D )
A.45B B.B54 C.CA5 D.5AC
【解析】 外循环将s 分成len(s)//4+1 组数据,从内循环结合n 递减可得将s 从右向左分为4 位一组的二进制。tmp+=int(s[n])*2**j 即将二进制转换为十进制,最后if 语句将十进制转换为十六进制。
统计连续小写字母最长的个数,编写Python程序段如下:
s=input()
ans=0
for i in range(len(s)):
t=s[i]
if t>=”a” and t<=”z”:
c=c+1
else:
c=0
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,故(1)填:c=0;ans用来统计连续小写字母最长的个数,从前往后遍历字符串s,提取第i个字符放在t中,若c>ans,更新ans的值,故(2)填:if c>ans:ans=c,若第i个字符非小写字母,c清0,重新统计下一个连续小写字母的长度。
变式1小明用Python编写了一个找最大值的程序,程序功能是:用户输入数字串,数据间用逗号分隔,最后以逗号结尾,程序执行后输出最大的数值。程序段如下,横线处填入的代码应为( B )
s=input(”请输入数字串: ”)
i=j=max=0
c=t=””
while j<len(s):
c=s[j]
if c==”,”:
t=s[i:j]
if int(t)>max:
max=int(t)
①
②
print(max)
A.①i=i+1 ②j=j+1 B.①i=j+1 ②j=j+1
C.①j=j+1 ②i=i+1 D.①j=i+1 ②i=i+1
【解析】 找出字符串中连续数字串最大数值;当前位置为”,”,代表一段数字串结束,与原有值比价,如果更大,则更新;其中s[i:j]为数字串切片,j是数字串的后一个位置,i是数字串开始位置;当某一段结束,则更新新一段的开始位置,第1空为i=j+1;第2空为循环变量变化过程,为j=j+1。
|随|堂|检|测|
1.提取字符串“Python”中的相关子串信息,针对提取的子串,下列说法不正确的是( D )
A.可提取的子串中长度最长的子串长度为6
B. "Pon"不是其中的一个子串
C.长度为1的子串共有6个
D.字符串比较时,子串"hon"大于"on"
【解析】 字符串的子串包含字符串本身,因此最长的子串是本身的长度,字符串比较时是依次逐个字符比较,"h"<"o",因此"hon"<"on",选项D错误。
2. 有如下Python 程序段:
s=”水果5fRU2IT! ”
ans=res=””
for x in s:
if ”a”<=x<=”z”:
ans=ans+chr(ord(x)-32)
elif ”A”<=x<=”Z”:
ans=ans+chr(ord(x)+32)
elif ”0”<=x<=”9”:
res=res+x
t=ans+res
print(t)
执行该程序段后,输出的结果是( C )
A.5fRU2IT B.5Fru2it C.Fruit52 D.52Fruit
【解析】 将大写字母转换为小写字符;将小写字母转换为大写字母,数字直接连接,其他字符舍去。
3.有如下Python 程序段:
x=””;k=0;y=””
s=”394-5-222-60-809”
for i in range(len(s)):
if ”0”<=s[i]<=”9”:
k+=1
else:
x=s[i-k:i]
if y<x:
y=x
k=0
print(y)
执行该程序段后,输出的结果是( C )
A.394 B.809 C.60 D.5
【解析】 利用开始位置及结束位置后一位对字符串s进行切片提取数字字符串,并比较大小,找出最大值,其中关键有:else后i指向数字串结束的后一位,k是该数字串的长度;由于809之后没有“-”,不参与运算;“60”>“5”>“384”>“222”。
4.2023·宁波中学检测某数据加密算法的Python程序段如下:
s=input(”请输入明文: ”)
t=””
for ch in s:
if ”a”<=ch<=”z”:
ch=chr(ord(ch)-ord(”a”)+ord(”A”))
elif ”0”<=ch<=”9”:
ch=str((int(ch)+7)%10)
t=ch+t
print(t)
若输入的数据为“pyT638”,则输出的结果是( D )
A.305 B.503 C.PYT305 D.503TYP
【解析】 如果是小写字母则转换为大写字母;如果是数字,则右移7位(约瑟夫环结构),其他符号直接连接。
5.如下Python程序段,可实现输入二进制数转成其十进制结果。则横线处填入的代码为( C )
b=input(”请输入二进制数: ”)
b=
d=0
for i in range(len(b)):
d+=int(b[i])*2**i
print(”十进制结果是: ”,d)
A.b[:-1] B.b[-1::1]
C.b[::-1] D.b[len(b)-1:0:-1]
【解析】 由语句“d+=int(b[i])*2**i”,i=0指向二进制的最低位,所以需要对字符串b进行反向操作,选项C正确。
6.“不重复数”的特征是任何相邻两个数位上的数字都不相同。如 1101 是重复数,1201 是不重复数。判断某数是否为不重复数的 Python 程序段如下:
s=input()
i=0;flag=True
while i<n-1 and flag:
if :
flag=False
i=i+1
if :
print(”重复数”)
else:
print(”不重复数”)
上述程序段中加框处的代码由以下三部分组成:
①flag==False ②n=len(s) ③s[i]==s[i+1]
下列选项中,代码顺序正确的是( A )
A.②③① B.①③② C.②①③ D.③②①
【解析】 循环中,遍历字符串s,提取第i个字符和第i+1个字符,字符串s的长度是n,故(1)填n=len(s);若i个字符和第i+1个字符相同,flag=False,故(2)填s[i]==s[i+1];退出循环时根据flag的值判断是否是重复数,若flag=false,表示是重复数,故(3)填flag==False。
学科网(北京)股份有限公司
$$
相关资源
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。