高中信息技术选择性必修1数据与数据结构第三章字符串、队列和栈一字符串及其基本操作课件

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

高中信息技术选择性必修1数据与数据结构第三章字符串、队列和栈一字符串及其基本操作课件

资源简介

(共22张PPT)
一、 字符串及其基本操作
第三章 字符串、队列和栈
知识过关
1. 字符串的概念
字符串是由零个或多个字符组成的有限序列,可以包含ASCII字符集中的大小写英文字母、数字、标点符号、控制字符等,也可以包含其他字符集(如GB2312字符集等)。字符串一般用双引号、单引号或者三引号加以界定,如字符串“Python”“信息技术”等。
2. 字符串的长度:字符串中所包含的字符个数,长度为零的字符串称为空串。
3. 字符串的子串:一个字符串中任意一个连续的字符序列。
4. 字符串的特性
(1)有限序列:字符串是一种线性结构,数据元素个数有限,只能由零个或多个字符组成。
(2)可比性:对于字符串,可以根据编码方式进行比较。字符串相互之间是可以比较大小的。如果字符串中的字符全部是ASCII字符集,按照规则,从左向右依次按照字符ASCII码值大小得出结果,第一个字符ASCII码值大的就大,若相等,则比较第二个字符的ASCII码值,依此类推,直到比较出大小。例如:"a"<"b","ab"<"ac","ab"<"abc","12"<"5"等。
5. 字符串的基本操作
字符串的基本操作有连接、切片、子串判断等操作,下表为常用的字符串操作符。
操作符 描述
+ 字符串连接,将多个字符串连在一起,例如:"a"+"b"的结果是"ab"
* 重复输出字符串, 例如"ab"*2的结果是"abab"
[] 通过索引获取字符串中的字符,第1个字符索引值为“0”,例如s[0]
[start:end:step] 截取字符串中索引值为start至end(不包含)一段子串,输出该子串间隔为step的字符,step可以省略掉,例如a[1:5:2]
in 成员运算符,判断给定字符是否为字符串的子串,
例如 "a" in "abc",返回值为True;而"d" in "abc",返回值为False
子串的提取:用于在一个字符串中提取子串。在Python中,可以利用列表的切片功能实现,格式为字符串[位置start:位置end(不含):步长step]。
字符串“Hello World”的索引标号
字符 H e l l o W o r l d
正索引 0 1 2 3 4 5 6 7 8 9 10
负索引 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1
如上图所示,若s="Hello World",则s[4]和s[-7]的值都为“o”,而s[-1]的值是“d”,s[0:5]的值是“Hello”,s[::-1]的值是“dlroW olleH”。但必须注意的是,不能部分修改字符串中的内容,例如执行s[0]="h"将报错,错误类型如下:TypeError: str object does not support item assignment。
典例精选
【例1】 有如下Python程序段:
s1 = "1324" ; s2 = "abcdefgh"
j = 0 ; m = 0; c = ""
for i in range(len(s2)):
  k = int(s1[j])
  c = c + s2[m +k-1]
  j = j + 1
  if j > 3 :
    j = 0 ; m = m + 4
print(c)
执行该程序段后,变量c的值是(  )
A. "acbdegfh" B. "acbdacbd"
C. "acbdefgh" D. "abcdefgh"
【解析】 本题考查字符串处理。由程序段可得,当m=0时,k的值分别为0、2、1、3,将取得的字符"a"、"c"、"b"、"d"依次添加到字符串变量c,即c="acbd";当m=4时,k的值分别为4、6、5、7,将取得的字符"e"、"g"、"f"、"h"依次添加到字符串变量c,即c="acbdegfh",A正确。
A
【例2】 编写“输出所有子串”程序,实现如下功能:在s中输入一串不重复的字符串,例如,“abc”,输出该字符串的所有子串并输出子串的总数。程序运行界面如图所示,Python程序代码如下。
(1)如果输入的字符串是“China”,那么输出中有__________个子串。
a
ab
abc
b
bc
c
总共有6个子串
>>>
15
(2)请在画线处填入合适的代码。
s ="abc"
n = 0
for i in range (len(s)):
   for j in range(i,len(s)):
      print(__________) 
      n = n + 1
print("总共有" ,n,"个子串")
s[i:j+1]
【解析】 (1)根据排列组合可知共有15个子串。(2)根据图中所给的数据特点:a,ab,abc,b,bc,c,可知字符串截取的起始位置是i,而每次截取的字符规律是一直减少趋势,其规律恰好符合j-i+1。故本题答案是s[i:j+1]。
【例3】 (2023·浙江7月学考)查找与替换。从键盘上分别输入要查找和替换的字符串,对文本文件进行查找与替换,替换后保存到新的文本文件中。
完成查找与替换功能的思路如下:首先从待检索的文本文件“in.txt”逐行读取文本内容到列表text,然后从键盘上输入查找的字符串key和替换的字符串new,对列表text中的元素逐个进行查找并替换,结果保存到列表result,最后将result 写入文件“out.txt”中。
(1)有如下程序段:
text = readfile("in.txt") #读入文件
key = input("请输入要查找的字符串:")
new = input("请输入要替换的字符串:")
result = []
for line in text:
   newline = replace(key, new, line) #替换
   result.append(newline) #添加到列表
writefile("out.txt",result) #写入文件
该程序段采用的算法是__________(单选,填字母:A. 解析算法/B. 枚举算法)。
B
(2)读写文本文件,如下的readfile函数,逐行读取文本文件数据存入列表并返回。请在画线处填入合适的代码。
def readfile(filename):
  f = open("filename",encoding = "utf-8") #打开文件
  text = []
  line = f.readline() #从文件中读取一行
  while line:
    text.append(line) #添加到列表
  line = f.readline()
  f.close()
  return __________
def writefile(filename,text):
  #将text写入filename文件,代码略
text
(3)查找字符串,如下的findstr函数,在字符串line中从begin位置开始查找key在字符串line中的位置,请在画线处填入合适的代码。
def findstr(key,line,begin):
  for i in range(begin, len(line)- len(key)+ 1):
    if _____________________________:
      return i
  return -1
line[i : i + len(key)]==key
(4)替换字符串。如下的replace函数,在字符串line中检索所有的字符串key并替换为new,请在画线处填入合适的代码。
def replace(key,new,line):
  begin = 0
  while begin < len(line)- len(key)+ 1:
    pos = findstr(key,line,begin)
    if pos == -1:
      _________________________      
    else:
      line = line[0:pos] + new + line[pos + len(key):len(line)]
      begin = pos + len(new)
  return line
break或其他等价答案
【解析】 (1)解析算法的基本思想是指根据问题的前提条件与所求结果之间的关系,找出求解问题的数学表达式,并通过表达式的计算来实现问题的求解。枚举算法的基本思想是把问题所有可能的解一一列举, 然后判断每一个列举出的可能解是否为正确的解。在枚举算法的程序实现中,逐一列举出每一个可能的解,判断其是否为正确解的过程,可采用循环结构来实现。而在利用问题提供的约束条件筛选、判断解的过程中,则需要用到分支结构。从题干“……逐行读取文本内容到列表text……”,推断出B正确。(2)根据题干“逐行读取文本文件数据存入列表并返回”,观察列表相关语句“text=[]”和“text. append(line)”,答案为text。(3)自定义函数findstr的功能是在字符串line中查找key,如果找到了返回第一次出现key的索引,如果不存在key,返回-1。从语句“for i in range(begin, len(line) - len(key) + 1)”看出for循环语句遍历索引,因此从line中选择从i开始长度为len(key)的字符,和key进行比较,答案为line[i : i + len(key)]==key。(4)自定义函数replace的功能是在字符串line中检索所有的字符串key并替换为new,程序使用了while循环从begin开始遍历字符串line, 调用自定义函数findstr在字符串line中查找key,返回值为pos,pos=-1成立,说明当前行不存在key,直接跳出循环或终止循环即可。答案可以是break或begin=len(line) - len(key) + 1或begin +=len(line)或begin=len(line),能跳出循环的、改变变量begin的语句均可。
自我检测
1. 若字符串s1="pYTHON学习",有如下Python代码段:
s2="";i=0
while i  if "A"<=s1[i]<="Z":
    s2=s2+chr(ord(s1[i])+32)
  elif "a"<=s1[i]<="z":
    s2=s2+chr(ord(s1[i])-32)
  else:
    s2 = s2 + s1[i]
  i+=1
 print(s2)
执行该代码段后,字符串s2的值是(  )
A. PYTHON学习  B. Python 
C. Python学习  D. python学习
【解析】 本题考查字符处理的知识。ord()函数的作用是求字符的十进制ASCII值,chr()函数是将十进制数值转化成它对应的ASCII字符,因此这段程序的意思是当s1[i]为大写字母时,将其转换成对应的小写字母,当s1[i]为小写字母时,将其转换成对应的大写字母,而其他字符保持不变,C正确。
C
2. 有如下Python程序段:
s = "2025 Nihao Wolaile"
t = ""
for i in range(len(s)):
  c = s[i]
  if c < "a" or c > "z":
    t = ""
  t = c + t
print(t)
执行此程序段时,输出的内容是(  )
A. elialoW B. elialo
C. elia D. eli
A
【解析】 根据代码可知,若输入的单个字符为非小写字母时,字符类型变量t将清空,但是当前位置i的字符却保存在变量c中。上面程序中当扫描到最后一个非小写字母“W”时,之前的t字符被清空,而大写字母“W”存放在c中,并倒序连接到t中,因此答案中必然包含“W”,且该字母出现在最右边,A正确。
3. 有如下Python程序段:
s = "Hello World"
s1 = ""
n=len(s)
for i in range(n//2):
  if s[i] > s[n-i-1]:
     s1 = s1 + s[i]
  else:
     s1 = s[n-i-1]+ s1
print(s1)
执行该程序段后,输出s1的值是(  )
A. WlleH B. oorld
C. dlroo D. orldo
D
【解析】 本题考查字符串处理的基础知识。根据代码可知,从字符串s的第一个字符和最后一个字符进行比较(i和n-i-1属于对称位置),然后将s的第二个字符和倒数第二个字符进行比较,以此类推。若前面的字符大,则将前面的字符顺序连接到字符串变量s1,若后面的字符大,则倒序连接到s1。根据s="Hello World"的特点可知,D正确。
4. 有如下Python程序段:
s = "PythonSuperNB"
list1 = ["Everyday","Study","Happy"]
if s[6:11] > list1[1]:
   print(list1[1]+ s[0:6])
else:
   print(list1[1])
该程序段执行后,输出的结果是(  )
A. Study B. StudyPython
C. EveryPython D. StudySuper
【解析】 本题考查的是Python程序。s[6:11]是Super,与list1[1]的"Study"相比,s[6:11]>list1[1]成立,故执行print(list1[1]+s[0:6])="Study"+"Python"="StudyPython",B正确。
B

展开更多......

收起↑

资源预览