中文字幕精品无码一区二区,成全视频在线播放观看方法,大伊人青草狠狠久久,亚洲一区影音先锋色资源

高中信息技術浙教版(2019)選修1 第三章 課時1 字符串(學案 課件,2份打包)

資源下載
  1. 二一教育資源

高中信息技術浙教版(2019)選修1 第三章 課時1 字符串(學案 課件,2份打包)

資源簡介

(共73張PPT)
課時1 字符串
第三章 字符串、隊列和棧
1.通過問題解決,理解字符串的概念和特性。2.掌握字符串的基本操作,并能編程實現。
目 錄
CONTENTS
知識梳理
01
例題精析
02
隨堂檢測
03
鞏固與提升
04
知識梳理
1
1.字符串的概念
(1)字符串是由零個或多個字符組成的有限序列。
(2)字符串長度:字符串中所包含字符的個數。
(3)主要形式有:'Python'、″Python″、″'Python'″。
正確區分空串和空格串
空串是指不包含任何字符的串,其長度為零。而空格串是指由空格符組成的字符串,其長度為空格字符的個數。
2.字符串的特性
(1)有限序列性
字符串的數據元素個數是有限的。
(2)字符串的可比性
若比較的字符串中的字符為ASCII字符集,則按字符的ASCII碼值進行比較。
3.字符串的基本操作
(1)子串判斷
子串判斷用于檢查字符串a是否為字符串b的子串,可用in運算實現。
(2)求子串
求子串用于從字符串中取出其子串,可用切片實現。
(3)字符串的連接
字符串的連接用于把兩個字符串連接在一起,用“+”號實現。
4.Python字符串常用函數和方法
Python字符串常用函數和方法
函數和方法 功能 實例
len(x) 統計字符串x中字符的個數 x=″Python″
len(x)的值為6
x.find(y) 返回字符串x中子串y出現的首字符下標,若找不到,則輸出-1 x=″Python″
y=″on″
x.find(y)
返回的值為4
x.split(str=″″,num=string.count(str)) 以str分隔符切片x,若有num的指定值,則表示僅分隔num+1個子串,否則分隔所有子串 x=″1,2,3,4″
y=x.split(″,″)
y列表的內容為:
['1','2','3','4']
x.replace (old,new[,max]) 返回字符串中的old替換成new后的新字符串,若指定max,則表示替換不超過max次 x=″This data is new data.″
x.replace(″data″,″bag″)
執行后x字符串為:'This bag is new bag.'
x.upper() 把字符串x中的小寫字母轉換成大寫字母 x=″Python″
x.upper()
執行后x字符串為:
'PYTHON'
x.lower() 把字符串x中的大寫字母轉換成小寫字母 x=″Python″
x.lower()
執行后x字符串為:
'python'
5.正則表達式
(1)正則表達式是用一些特定的字符組成的一個“規則字符串”。
(2)作用:它可以實現檢查一個字符串中是否含有某種子串、將匹配的子串替換或從字符串中取出符合某個條件的子串等操作。
例題精析
2
例1 下列有關字符串描述正確的是(  )
B
解析 本題考查字符串的特性。A選項空串是指不包含任何字符的串,其長度為零。B選項字符串具有可以比較性,按ASCII碼值進行比較。C選項字符串的內容不能修改,只能重新連接。D選項字符串中字符還包含位置,如″ac″不是″abc″的子串。
A.空串指由一個空格字符組成的字符串
B.字符串中的字符可以按ASCII碼值進行比較
C.表達式s[3]=″a″的功能是將字符串s第4個位置的字符串修改為″a″
D.字符串a各個字符出現在字符串b中,則表達式a in b的值為True
變式訓練 下列有關字符串的描述正確的是(  )
解析 本題主要考查的是字符串的特性。字符串是一種線性表結構,因此,選項A錯誤;字符串″我的 Python″的長度為8,一個中文或英文字符的長度均為1,因此,C選項錯誤;已知字符串x=″Python″,則x[1]表示字符″y″,因為字符串的第一個位置的索引號為0,因此D選項錯誤;字符串是由零個或多個字符組成的有限序列,即字符串是由n(n≥0且為整數)個字符組成的有限序列,因此,答案為B。
B
A.字符串是一種非線性表結構
B.字符串是由n(n≥0且為整數)個字符組成的有限序列
C.字符串″我的Python″的長度為10
D.已知字符串x=″Python″,則x[1]表示字符″P″
例2 十八位身份證號由六位數字地址碼、八位數字出生日期碼、三位數字順序碼和一位校驗碼組成, 其中倒數第二位是性別代碼,男單女雙。以下 Python 程序的功能為識別身份證中的出生日期和性別信息。則加框①②處的代碼依次為(  )
B
A.①s[10:11]   ②xb[int(s[-2])%2]
B.①s[10:12] ②xb[int(s[16])%2]
C.①s[-12:10] ②xb[int(s[16])%2]
D.①s[-12:-6] ②xb[(int(s[-2])+1)%2]
解析 本題考查字符串的切片。十八位身份證號由六位數字地址碼、八位數字出生日期碼,出生日期的開始位置索引號為6,月的開始位置索引號為10,取兩位,因此為s[10:12]。倒數第二位是性別代碼,因此索引號為16。
變式訓練 有如下Python程序段:
解析 本題主要考查的是字符串組操作。本程序的功能是將字符串x進行反轉操作,故答案為C。
C
x=″Python″
y=″″
for i in range(len(x)):
y=x[i]+y
程序段執行后,變量y的值為(  )
A.Python B.″Python″
C.″nohtyP″ D.nohtyP
from random import randint
res=″ ″
i,j=0,len(s)-1
while i=i:
if randint(0,1)==0: #randint(0,1)隨機生成 0 或 1
  res+=s[i]
  i+=1
B
else:
  res+=s[j]
  j-=1
A.″abced″ B.″aecbd″ C.″aedbc″ D.″edcba″
解析 變量i和j從兩端向中間遍歷,當i大于j時結束循環。若產生隨機數為0,將s[i]連接到res中,向后移動i,否則將s[j]連接到res中,向前移動j。A選項產生的隨機數為0,0,0,1,0。B選項產生″ae″,i和j分別指向b和d,因此不可能連接到c。C選項產生的隨機數為0,1,1,0,0或0,1,1,0,1。D選項產生的隨機數均為1或1,1,1,1,0。
變式訓練 有如下Python程序段:
s=″abnokycmhq″
m=int(input(″輸入一個數:″))
j=0;sm=″″
for i in range(len(s)) :
 if i-j==m:
sm=sm+s[j:i][::-1]
j=i
if i-j+1==m:
sm=sm+s[j:i+1][::-1]
else:
sm=s[j:i+1]+sm
print(sm)
若輸入m的值為3,則以上程序運行后,輸出結果為(  )
A.nbaykqohmc B.qhmcykonba
C.nbaykohmcq D.qnbaykohmc
解析 條件i-j==m表示m個長度的切片,表達式s[j:i][::-1]表示把該切片進行反向連接。選擇結構表示最后一段的切片長度,若條件i-j+1==m成立表示長度為m-1個,還是要反向,否則把剩余一段取出,放在sm的前面。而s按3個一段分,最后剩下字母q。
D
例4 有如下Python程序段:
B
code=″0123456789ABCDEF″
RGB=″255,96,8″.split(″,″)
ans=″#″
for c in RGB:
 s1=″″;t=int(c)
  for i in range(2):
  s1=code[t%16]+s1
 t∥=16
 ans+=s1
print(ans)
執行程序后,輸出的結果為(  )
A.#FF0608 B.#FF6008 C.#8060FF D.#6E60FF
解析 本題考查字符串的基本操作。RGB是將字符串按逗號分隔,形成一個列表['255','96','8']。程序的功能是將列表中三個字符串轉換成數值類型,并用十六進制表示。for i in range(2)表示循環2次,若轉換后十六進制只有一位數字,也要在前面加0。語句s1=code[t%16]+s1表示將取出的余數反向連接。
變式訓練 有如下 Python 程序段:
C
qiu=″″
x=″394-5-222-60-809″.split(″-″)
for ch in x:
 if qiu  qiu=ch+qiu
print(qiu)
執行該程序段后,輸出結果是(  )
A.1203 B.605394
C.809605394 D.809394
解析 本題考查字符串基本操作。x是將字符串按″-″分隔,形成一個列表['394','5','222','60','809']。遍歷列表,查找一個連續遞增的字符串,并將該字符串連接在qiu的前面。
隨堂檢測
3
1.已知s=″Python is so easy!″,下列表達式的值是″is″的是(  )
C
解析 本題主要考查的是字符串的切片操作。字符串中第一個字符的索引號為0,切片操作時,只能取到下標end前面位置上的字符,s[7:9]的值為″is″,因此,答案為C。
A.s[8:9] B.s[7:8] C.s[7:9] D.s[8:10]
2.有如下 Python 程序段:
s=″CixiStudent″
f=[0]*26;t=s[4:]
i=0
while iif ″A″<=t[i]<=″Z″:
  i+=1
  continue
elif ″a″<=t[i]<=″z″ and f[ord(t[i])-ord(″a″)]==0:
  f[ord(t[i])-ord(″a″)]+=1
A
i+=1
for i in range(26):
if f[i]==1:
  print(chr(i+ord(″a″)),end=″″)
執行以上程序段后,輸出的內容為(  )
A.dentu B.Student C.tuden D.deintux
解析 f數組分別存儲小寫字母a-z的個數。如果是大寫字母,則跳過,如果是小寫字母,且沒有出現過,列表對應位置加 1,再從小到大輸出對應字母。
3.英語單詞″illustriousness″意思是優秀,有如下Python程序段:
C
import random
s=″illustriousness″
for i in range(4):
 k=random.randint(0,4)*random.randint(0,3)
 print(s[k],end=″″)
解析 k的值為0至4之間的數乘以0至3之間的數,[0,4]*0值均為0,[0,4]*1值依次為0、1、2、3、4,[0,4]*2值依次為0、2、4、6、8,[0,4]*3值依次為0、3、6、9、12,因此不可能產生5,7,10,11,即字符中不可能包含t。
4.現有一個只包含字符“A”“B”的字符串s,并且兩類字符的總數量剛好相等。將其盡可能地分割成多段,使得每一段中包含相同數量的″A″、″B″,輸出每一段的范圍。例如,當s=″ABAABABBAB″時,根據要求最多可以分割成3段,分別為[0,1],[2,7],[8,9],如下Python程序段實現該功能。
s=″ABAABABBAB″
c=0;pos=0
for i in range(len(s)) :
  if s[i]==″A″:
   c=c+1
D
 if (1)________________:
   print(″[″,pos,″,″,i,″]″)
(2)________________
上述程序段中劃線處可選語句為:①i-pos==c
②i-c==c ③i-c+l==c ④pos=i ⑤pos=i+l
則(1)(2)處的語句依次可為(  )
A.①⑤ B.②④ C.③④ D.③⑤
解析 當s[i]為″A″時,c每次加1,即c是所有″A″的數量。每一段中包含相同數量的″A″、″B″,當前共i+1個字母中,″B″的數量也應該是c個,即i+1=2*c。pos是每段開始位置,當前位置i是每段結束位置,因此pos的值為i+1。
5.有如下程序段:
s=″abAB!AB″;k=x=″″
for i in s:
  if ″a″<=i<=″z″:
 x=chr((ord(i)-98)%26+97)
  elif ″A″<=i<=″Z″:
 x=chr((ord(i)-40)%26+65)
    k+=x
print(k)
執行程序后,輸出值為(  )
A.bcBC!BC B.bcBCCBC
C.zaZA!ZA D.zaZAAZA
D
解析 本題考查字母的加密。a的內碼為97,ord(i)-98等效于ord(i)-97-1,表達式(ord(i)-98)%26表示字母中位置循環向前移動一個位置。a的內碼為65,ord(i)-40,等效于ord(i)-65+25,等效于ord(i)-65+26-1。程序的功能是將字母循環向前移一位,非字母不連接,用該字母前一個字母代替。
6.編寫一個Python程序,實現查找替換功能,下列程序的功能是:在text1字符串中,將所有的good替換為ok。
實現上述功能的程序如下,請在程序劃線處填入合適的代碼。
text1=″it's good,good,very very good.″
fword=″good″
cword=″ok″
text2=″″
n1=len(text1)
①________________
i=0
while i<=n1-len(fword):
if ②________________:
text2=text2+cword
i=i+n2
else:
③________________
i+=1
if itext2=text2+text1[i:n1+1]
print(text2)
答案 ①n2=len(fword) ②text1[i:i+n2]==fword ③text2=text2+text1[i]
解析 本題考查的是字符串的綜合應用。根據while循環中的語句“text2=text2+cword”和“i=i+n2”可知,n2為查找的單詞的長度,因此①處語句為n2=len(fword);劃線②處表示當前子串是否為要查找的內容,如果是,則將替換的內容拼接在字符串text2,然后將指針i移動n2個位置,因此②處的語句為text1[i:i+n2]==fword;如果當前子串不是要查找內容,則將當前字符直接拼接在字符串text2中,故③處代碼為text2=text2+text1[i]。
4
鞏固與提升
基礎鞏固
能力提升
一、基礎鞏固
1.已知x=″2.0+3=5.0″,下列表達式成立的是(  )
B
解析 本題主要考查的是字符串的函數及基本運算。len(x)的值為9,因此A選項錯誤;x[:2]的值為″2.″,因此C選項錯誤;x[6::]的值為″5.0″,因此D選項錯誤;x[0]的值為″2″,x[2]的值為″0″,因為″2″>″0″,因此x[0]>x[2],故答案為B。
A.len(x)==8 B.x[0]>x[2]
C.x[:2]==″2.0″ D.x[6::]==″5″
2.字符串變量s=″2022jiaxing″,則表達式s[1:len(s)∥2]+s[2]*2的值是(  )
C
解析 本題主要考查的是字符串切片和運算。s[1:len(s)∥2]表示從第2個字符位置取到中間位置的前一個字符,結果為“022j”,s[2]*2表示索引第3個字符“2”重復2次,結果為“22”,最后連接兩個字符串,因此,答案為C。
A.″20224″ B.″2026″ C.″022j22″ D.″022j4″
3.通過鍵盤輸入一串字符串,程序輸出該字符串的所有子串。例如,下面程序段當輸入“the”時,將輸出['t','th','the','h','he','e']。
A
s=input(″請輸入一個字符串:″)
a=[]
for i in range(len(s)):
  for j in range((1)________________):
a.append((2)________________)
 print(a)
為實現上述功能,上述程序段(1)(2)處的語句分別是(  )
A.①i,len(s)    ②s[i:j+1] B.①i,len(s)-i+1 ②s[i:j+i]
C.①i,len(s)-i+1 ②s[i:j+1] D.①i,len(s) ②s[j:j+i]
解析 本題考查雙重循環和字符串的切片。i表示切片的開始位置,j表示切片的結束位置。
4.某RGB色彩模式圖像信息存儲在文本文件中,文件的一行存儲圖像的一個像素,現對圖像中連續的0或1進行壓縮,某個像素的壓縮算法如下:
def change(s): #對連續多個0或1進行壓縮,字符串s中不含換行符
  i=1;j=0;result=″″
  sd=″0123456789ABCDEF″
  while i  while i     i+=1
  d=i-j
  s1=s[j]+sd[d%16]
  if d>16:
    s1=s[j]+sd[0]+s1
  result+=s1
C
解析 本題考查字符串處理。變量j表示出現相同字符的起點位置,變量i表示結束位置后面第1個位置,s[i]==s[i-1]表示有多個重復,s[j]==s[i]表示單個,不重復。d表示重復的長度,由于一個點的像素,長度為24個二進制位,當d>16條件成立時,d∥16-1的值為0。字符串中包含4個1,19個0和1個1。
  j=i
return result
若某個像素點的信息為“111100000000000000000001”,則壓縮后的信息為(  )
A.41003011 B.140003 C.14000311 D.140F0411
5.有如下程序段:
B
解析 本題考查字符串的切片。s2的值從″bccdef″、″ccddef″變化到″cdddef″。
s1=″232″
s2=″abcdef″
for i in s1:
  m=int(i)
  c=s2[m:m+1]
  s2=s2[1:m+1]+c+s2[m+1:]
print(s2)
執行該程序段后,變量s2的值是(  )
A.″eef″ B.″cdddef″ C.″dcdcdcdef″ D.″abccccdef ″
6.有如下程序段:
D
解析 本題主要考查字符串的處理,即字符的比較和字符的刪除操作。變量s從″aabbcc″變化到″aabcc″。
s=″aabbbcc″
i=3
while ij=i-2
if s[i-1]==s[i] and s[j]==s[j-1]:
  s=s[:i]+s[i+1:]
else:
  i+=1
print(s)
執行該程序段后,變量 s 的值是(  )
A.″abc″ B.″aabbc″ C.″aabc″ D.″aabcc″
7.有如下 Python 程序段:
D
s=″5A9C3B0E7D″
ans=″″; i=0
while s[i]!=″0″:
  t=int(s[i])
  ans+=s[t]
  i=t-1
print(ans)
運行該程序段后,變量 ans 的值是(  )
A.″BCDEA″ B.″BCD″ C.″ABCD″ D.″BCDE″
解析 變量t的值依次為5,3,9,7,對應s[t]的值依次為B、C、D、E。當i的值為6時,s[i]的值為0,結束循環。
8.下列 Python 程序段功能為:輸入由英文字母組成的字符串,若字符串中有連續升序段(相鄰字符 ASCII 碼值增量為 1),則把該升序段縮寫為“首字符-尾字符”構成的新字符串。例如:字符串為“abcbxy”,則縮寫成“a-cbx-y”。
s=input(″請輸入字符串:″)
k=len(s);flag=False;result=″″
for i in range(0,k-1):
  if ①________________ :
  result=result+s[i]+″-″
  flag=True
  elif ord(s[i])!=ord(s[i+1])-1:
  result=result+s[i]
  flag=False
②________________
print(″縮寫后的字符串為″,result)
則劃線處應填入的代碼為(  )
A.①ord(s[i])==ord(s[i+1])-1 and flag    ②result=result+s[i]
B.① ord(s[i])==ord(s[i+1])-1 and not flag  ②result=result+s[i]
C.① ord(s[i])==ord(s[i+1])-1 and flag    ②result=result+s[i+1]
D.① ord(s[i])==ord(s[i+1])-1 and not flag  ②result=result+s[i+1]
D
解析 本題考查字符串操作。①語句result=result+s[i]+″-″是連接首字母,接著flag為True,因此flag表示是否找到起點,該空表示的是連續升序且為起點。②循環的條件for i in range(0,k-1),只處理前k-1個字符,最后一個字符沒有處理。
9.某字符串s是由一個原始字符串反復重疊形成的。例如字符串″abcababcababcab″的是由原始字符串″abcab″重疊而成。檢測的算法:將該字符串劃分成若干段,若字符串每一段與第一段相同,則認為該字符串是由這段字符重疊而成。為查找字符串s的原始字符串,有如下程序段:
s=″abcababcababcababcababcab″
n=len(s);ans=″″
for i in range(1,n∥2+1):
  if ①________________
 for j in range(i,n,i):
    if ②________________
      break
   else:
    ans=s[:i]
print(″原始串是:″,ans)
將劃線處填寫完整。
答案 ①n %i==0 ②s[j:j+i]!=s[:i]
解析 本題考查雙重遍歷的算法思想。一個原始字符串反復重疊,該原始字符串長度必定能被n整除,條件n %i==0成立表示該長度i是n的因子,可能是原始字符串s[:i+1]的長度,字符串s從第0個位置開始,到i-1位置是原始字符串,從i開始,每i個長度的字符串s[j:j+i]是否是原始字符串,如果不是說明這段中不符合原始字符串。
10.有Python程序段如下:
D
s='I Love You HangZhou!'
s1=''
for i in range(0,len(s),3):
  c=s[i]
  if ord(c)>=ord('a'):
  c=chr(ord(c)-ord('a')+ord('A'))
  s1=c+s1
print(s1)
程序運行后,輸出的值是(  )
A.OUAZU B.OUAU C.UZAUO D.UAUO
解析 本題考查range函數的使用以及程序基本代碼的閱讀能力。根據range函數的參數,是從字符串s中從索引0開始,依次取出下標為0、3、6……位置的字符,如果字符是小寫,將它轉為大寫,并按逆序依次拼接。答案為D。
11.有如下Python程序段:
s=″abbaddcab″
k=0;r=″″
b=[″″]*6
for i in s:
  if i==b[k]:
 k-=1
  else:
  k+=1
D
 b[k]=i
for i in range(1,k+1):
  print(b[i],end=″″)
執行該程序段后,輸出的內容是(  )
A.abdc B.aacab C.c D.cab
解析 本題考查程序結構的靈活應用。程序算法為:依次從左向右提取s中每一個字符,如果與b[k]中字符不一致,則將該字符存儲到b[k+1]中,如果一致,則k=k-1。
12.判斷兩個字符串是否相等:規定字符“?”為萬能字符,即可與任意一個字符相等,在忽略字符串中空格以及不區分大小寫的前提下,判斷兩個字符串是否相同。Python程序運行界面如圖所示。
請輸入一個字符串:?? a d ??dad wd
請輸入另一個字符串:a a c?d?d w
兩個字符串相同
(1)根據以上規則字符串’??ad??dad wd’和字符串’a???c?d?d?d’是否相等____(填:是/否)。
(2)實現上述功能的Python程序如下,請在劃線處填入適當的代碼。
s1=input(″請輸入一個字符串:″)
s2=input(″請輸入另一個字符串:″)
s1=s1.upper()
s2=s2.upper()
s=″″
#將字符串s1中的空格去掉
for i in s1:
if i !=″″:
①________________
s1=s
#同上,將字符串s2中的空格去掉,代碼略
i=0
if len(s1)!=len(s2):
print(″兩個字符串不相同″)
else:
while i  c1=s1[i];c2=s2[i]
   if c1==c2:
     ②________________
  else:
    if ③________________:
       i+=1
    else:
      break
if i==len(s1):
print(″兩個字符串相同″)
else:
print(″兩個字符串不相同″)
答案 (1)是 (2)①s=s+i ②i+=1 ③c1==″?″ or c2==″?″
解析 本題主要考查字符串的綜合應用。(1)依照題意,‘?’作為萬能字符與任意字符相等,問題中的兩個字符串依次比較是相等的。
(2)填空①處實現去掉字符串s1的空格,所以遍歷字符串時為非空格的時候,進行字符的連接,因此①處答案是s=s+i;填空②處當遍歷至相同位置的字符相等時,則進行下一個位置的字符比較,因此②處答案是i+=1;填空③處當兩個相同位置的字符不相等時,則考慮“?”作為萬能字符情況,因此③處答案是c1==″?″ or c2==″?″。
13.小張參加學校舉行的密碼破解攻防比賽,他需要在規定時間破解對手密碼。比賽時,小張發現對方密文可能采用凱撒加密,這是一種簡單且廣為人知的加密技術,方法是將明文中的所有字母都在字母表上向后(或向前)按照一個固定數目進行偏移后被替換成密文,非字母保持原狀。例如,當偏移量是3的時候,所有的字母A將被替換成D,B變成E,Z變成C,以此類推。
小張為了增加破解難度,決定在凱撒加密基礎上,引入密鑰字符串,密鑰字符及對應的偏移量如下表所示,密鑰字符串長度不夠時,可循環使用。
密鑰 A B C D E F G H I J K L M
偏移量 0 1 2 3 4 5 6 7 8 9 10 11 12
密鑰 N O P Q R S T U V W X Y Z
偏移量 13 14 15 16 17 18 19 20 21 22 23 24 25
例如:若輸入明文為:Hello,輸入密鑰為:ABC,則得到密文為:Hfnlp
(1)若明文:ZhouShan密鑰為:LOVE,則密文為:________
(2)引入密鑰后的加密算法的Python程序代碼如下:
def change(x):
ek=[]
for c in x:
  if ' a'<=c<='z':
    ①________
   elif ' A'<=c<='Z':
     #與小寫字母相似處理,代碼略
return ek
s=input(″輸入原文:″)
key=input(″輸入秘鑰:″)
keyn=change(key)
ch=″″
for i in range(len(s)):
k=keyn[②________]
if ' a'<=s[i]<='z':
 ch=③________
 result=result+ch
elif 'A'<=s[i]<='Z':
 #與小寫字母相似處理,代碼略
else:
 result=result+s[i]
print(result)
(2)在劃線處填寫合適代碼,完善程序。
(3)程序調試過程中,出現如下錯誤提示“NameError:name' result' is not defined”,產生此錯誤的原因是___________________________________________________。
答案 (1)KvjyDvvr
(2)①ek.append(ord(c)-ord(″a″))
②i%len(keyn)
③chr(ord(s[i])-ord(″a″)+k)%26+ord(″a″))
(3)變量result沒有賦初始值
解析 本題主要考查字符串的綜合應用。(1)根據表中提供數據,密鑰LOVE對應的偏移量分別是11,14,21,17,可得ZhouShan的密文是KvjyDvvr;
(2)①自定義函數change(x)將密鑰字符轉成對應的偏移量,結果存放在數組ek中,根據表中字母對應的偏移量,所以此處應填ek.append(ord(c)-ord(″a″));
②遍歷明文字符應取密鑰列表中的每一個偏移量,由于密鑰長度可能小于明文長度,需循環使用,所以此處應填i%len(keyn);③將原字符的字母按照密鑰的偏移值進行位移,由于需在字母范圍內進行循環位移,因此此處答案為chr(ord(s[i]-ord(″a″)+k)%26+ord(″a″));
(3)在python中變量沒有賦初始值,表示沒有定義。
14.查找包含26個小寫字母的最短字符串:輸入任意一串包含小寫字母的字符串(長度n>=26),要求找到長度最小的一段區間,能夠包含全部26個小寫英文字母。小王設計了Python程序用于搜索最短字符串,若無解,則輸出“無解!”,反之輸出該最小區間的長度以及字符的開始位置,并輸出相應的最短字符串,程序界面如圖所示:
請輸入字符串內容:wurfabcdefghijklmnopqrstuvwxyzzsdf
包含26個字母的字符串為:abcdefghijklmnopqrstuvw
最短長度:26 開始位置:4
本題的算法思想是:
①確定初始右邊界:從第1個字符開始,向右搜索到包含全部26個字母的子串,并因此而確定右邊界,同時記錄每個字母在子串中出現過的次數。
②調整子串左邊界:若左邊界有重復的字母則表明該子串可縮短,故左邊可右移1位,……直到找到一個符合條件的子串并記錄,然后子串左邊界再右移1位。
③調整子串右邊界:子串右邊界繼續右移,在新子串符合條件后,記錄并進行比較。
重復②各調整步驟,直至遍歷完整個字符串,獲得并輸出滿足條件的最小長度字符串。
實現上述功能的Python程序如下,請回答下列問題。
text=input(″請輸入字符串內容:″)
n=len(text)
s=[0 for i in range(n)]
for i in range(n):
①________________
res=″″
k=left=pos=0
length=n
f=[0]*26
for i in range(n):
if f[s[i]]==0:
    k=k+1
f[s[i]]=f[s[i]]+1
while ②________________:
f[s[pos]]=f[s[pos]]-1
if ③________________:
    k-=1
    if i-pos+1      length=i-pos+1
      res=text[pos:pos+length]
      left=pos
pos+=1
if res !=″″:
print(″包含26個字母的字符串為:″,res)
print(″最短長度:″,length,″開始位置:″,left)
else:
print(″無解!″)
(1)對于字符串“abfabcfdeefed”,包含字母“abcdef”的最短字符串長度為________(填數字)。
(2)請在劃線處填入合適的代碼。
答案 (1)6 
(2)①s[i]=ord(text[i])-97或s[i]=ord(text[i])-ord(″a″) 
② k>=26 或 k==26 
③f[s[pos]]==0
解析 本題主要考查字符串的綜合應用。(1)包括字母“abcdef”的最短字符串為“abcfde”,長度為6。(2)①處代碼表示求每個輸入的小寫字母在字母表中的位置,其中字母“a”的位置為0,其他字母依次類推,因此①處代碼為s[i]=ord(text[i])-ord(″a″),小寫字母a的ASCII為97,故也可以寫為s[i]=ord(text[i])-97;②處代碼表示當前字符串已包含26個字母時的處理, 變量k表示字母的種類數,如果字符串中已包含26個字母,則進行優化處理,看能否調整字符串的左邊界,因此②處代碼為k>=26或 k==26;③處代碼表示條件左邊界不能再調整的情況,表示該子串不可再縮短,因此③處代碼為f[s[pos]]==0。課時1 字符串
課時目標
1.通過問題解決,理解字符串的概念和特性。2.掌握字符串的基本操作,并能編程實現。
1.字符串的概念
(1)字符串是由零個或多個字符組成的有限序列。
(2)字符串長度:字符串中所包含字符的個數。
(3)主要形式有:'Python'、″Python″、″'Python'″。
正確區分空串和空格串
空串是指不包含任何字符的串,其長度為零。而空格串是指由空格符組成的字符串,其長度為空格字符的個數。
2.字符串的特性
(1)有限序列性
字符串的數據元素個數是有限的。
(2)字符串的可比性
若比較的字符串中的字符為ASCII字符集,則按字符的ASCII碼值進行比較。
3.字符串的基本操作
(1)子串判斷
子串判斷用于檢查字符串a是否為字符串b的子串,可用in運算實現。
(2)求子串
求子串用于從字符串中取出其子串,可用切片實現。
(3)字符串的連接
字符串的連接用于把兩個字符串連接在一起,用“+”號實現。
4.Python字符串常用函數和方法
Python字符串常用函數和方法
函數和方法 功能 實例
len(x) 統計字符串x中字符的個數 x=″Python″ len(x)的值為6
x.find(y) 返回字符串x中子串y出現的首字符下標,若找不到,則輸出-1 x=″Python″ y=″on″ x.find(y) 返回的值為4
x.split(str=″″,num=string.count(str)) 以str分隔符切片x,若有num的指定值,則表示僅分隔num+1個子串,否則分隔所有子串 x=″1,2,3,4″ y=x.split(″,″) y列表的內容為: ['1','2','3','4']
x.replace (old,new[,max]) 返回字符串中的old替換成new后的新字符串,若指定max,則表示替換不超過max次 x=″This data is new data.″ x.replace(″data″,″bag″) 執行后x字符串為:'This bag is new bag.'
x.upper() 把字符串x中的小寫字母轉換成大寫字母 x=″Python″ x.upper() 執行后x字符串為: 'PYTHON'
x.lower() 把字符串x中的大寫字母轉換成小寫字母 x=″Python″ x.lower() 執行后x字符串為: 'python'
5.正則表達式
(1)正則表達式是用一些特定的字符組成的一個“規則字符串”。
(2)作用:它可以實現檢查一個字符串中是否含有某種子串、將匹配的子串替換或從字符串中取出符合某個條件的子串等操作。
例1 下列有關字符串描述正確的是(  )
A.空串指由一個空格字符組成的字符串
B.字符串中的字符可以按ASCII碼值進行比較
C.表達式s[3]=″a″的功能是將字符串s第4個位置的字符串修改為″a″
D.字符串a各個字符出現在字符串b中,則表達式a in b的值為True
聽課筆記:                                    
                                    
                                    
                                    
變式訓練 下列有關字符串的描述正確的是(  )
A.字符串是一種非線性表結構
B.字符串是由n(n≥0且為整數)個字符組成的有限序列
C.字符串″我的Python″的長度為10
D.已知字符串x=″Python″,則x[1]表示字符″P″
例2 十八位身份證號由六位數字地址碼、八位數字出生日期碼、三位數字順序碼和一位校驗碼組成, 其中倒數第二位是性別代碼,男單女雙。以下 Python 程序的功能為識別身份證中的出生日期和性別信息。則加框①②處的代碼依次為(  )
s=input(″輸入身份證號″)
xb=['女','男']
print('出生日期為:',s[6:10]+'年'++'月'+s[12:14]+'日')
print('性別為:',)
A.①s[10:11]  ②xb[int(s[-2])%2]
B.①s[10:12] ②xb[int(s[16])%2]
C.①s[-12:10] ②xb[int(s[16])%2]
D.①s[-12:-6] ②xb[(int(s[-2])+1)%2]
聽課筆記:                                    
                                    
                                    
變式訓練 有如下Python程序段:
x=″Python″
y=″″
for i in range(len(x)):
y=x[i]+y
程序段執行后,變量y的值為(  )
A.Python B.″Python″ C.″nohtyP″ D.nohtyP
例3 若字符串s的值為″abcde″,執行如下程序段后,變量res的值不可能是(  )
from random import randint
res=″ ″
i,j=0,len(s)-1
while i=i:
if randint(0,1)==0: #randint(0,1)隨機生成 0 或 1
  res+=s[i]
  i+=1
else:
  res+=s[j]
  j-=1
A.″abced″ B.″aecbd″ C.″aedbc″ D.″edcba″
聽課筆記:                                    
                                    
                                    
變式訓練 有如下Python程序段:
s=″abnokycmhq″
m=int(input(″輸入一個數:″))
j=0;sm=″″
for i in range(len(s)) :
 if i-j==m:
sm=sm+s[j:i][::-1]
j=i
if i-j+1==m:
sm=sm+s[j:i+1][::-1]
else:
sm=s[j:i+1]+sm
print(sm)
若輸入m的值為3,則以上程序運行后,輸出結果為(  )
A.nbaykqohmc B.qhmcykonba
C.nbaykohmcq D.qnbaykohmc
例4 有如下Python程序段:
code=″0123456789ABCDEF″
RGB=″255,96,8″.split(″,″)
ans=″#″
for c in RGB:
 s1=″″;t=int(c)
  for i in range(2):
  s1=code[t%16]+s1
 t∥=16
 ans+=s1
print(ans)
執行程序后,輸出的結果為(  )
A.#FF0608 B.#FF6008 C.#8060FF D.#6E60FF
聽課筆記:                                    
                                    
                                    
                                    
變式訓練 有如下 Python 程序段:
qiu=″″
x=″394-5-222-60-809″.split(″-″)
for ch in x:
 if qiu  qiu=ch+qiu
print(qiu)
執行該程序段后,輸出結果是(  )
A.1203 B.605394 C.809605394 D.809394
1.已知s=″Python is so easy!″,下列表達式的值是″is″的是(  )
A.s[8:9] B.s[7:8] C.s[7:9] D.s[8:10]
2.有如下 Python 程序段:
s=″CixiStudent″
f=[0]*26;t=s[4:]
i=0
while iif ″A″<=t[i]<=″Z″:
  i+=1
  continue
elif ″a″<=t[i]<=″z″ and f[ord(t[i])-ord(″a″)]==0:
  f[ord(t[i])-ord(″a″)]+=1
i+=1
for i in range(26):
if f[i]==1:
  print(chr(i+ord(″a″)),end=″″)
執行以上程序段后,輸出的內容為(  )
A.dentu B.Student C.tuden D.deintux
3.英語單詞″illustriousness″意思是優秀,有如下Python程序段:
import random
s=″illustriousness″
for i in range(4):
 k=random.randint(0,4)*random.randint(0,3)
 print(s[k],end=″″)
執行該程序后,輸出的結果不可能是(  )
A.uiso B.iiii C.tree D.siur
4.現有一個只包含字符“A”“B”的字符串s,并且兩類字符的總數量剛好相等。將其盡可能地分割成多段,使得每一段中包含相同數量的″A″、″B″,輸出每一段的范圍。例如,當s=″ABAABABBAB″時,根據要求最多可以分割成3段,分別為[0,1],[2,7],[8,9],如下Python程序段實現該功能。
s=″ABAABABBAB″
c=0;pos=0
for i in range(len(s)) :
  if s[i]==″A″:
   c=c+1
 if (1)________________:
   print(″[″,pos,″,″,i,″]″)
(2)________________
上述程序段中劃線處可選語句為:①i-pos==c
②i-c==c ③i-c+l==c ④pos=i ⑤pos=i+l
則(1)(2)處的語句依次可為(  )
A.①⑤ B.②④ C.③④ D.③⑤
5.有如下程序段:
s=″abAB!AB″;k=x=″″
for i in s:
  if ″a″<=i<=″z″:
 x=chr((ord(i)-98)%26+97)
  elif ″A″<=i<=″Z″:
 x=chr((ord(i)-40)%26+65)
    k+=x
print(k)
執行程序后,輸出值為(  )
A.bcBC!BC B.bcBCCBC C.zaZA!ZA D.zaZAAZA
6.編寫一個Python程序,實現查找替換功能,下列程序的功能是:在text1字符串中,將所有的good替換為ok。
實現上述功能的程序如下,請在程序劃線處填入合適的代碼。
text1=″it's good,good,very very good.″
fword=″good″
cword=″ok″
text2=″″
n1=len(text1)
①________________
i=0
while i<=n1-len(fword):
if ②________________:
text2=text2+cword
i=i+n2
else:
③________________
i+=1
if itext2=text2+text1[i:n1+1]
print(text2)
課時1 字符串
例題精析
例1 B [本題考查字符串的特性。A選項空串是指不包含任何字符的串,其長度為零。B選項字符串具有可以比較性,按ASCII碼值進行比較。C選項字符串的內容不能修改,只能重新連接。D選項字符串中字符還包含位置,如″ac″不是″abc″的子串。]
變式訓練 B [本題主要考查的是字符串的特性。字符串是一種線性表結構,因此,選項A錯誤;字符串″我的 Python″的長度為8,一個中文或英文字符的長度均為1,因此,C選項錯誤;已知字符串x=″Python″,則x[1]表示字符″y″,因為字符串的第一個位置的索引號為0,因此D選項錯誤;字符串是由零個或多個字符組成的有限序列,即字符串是由n(n≥0且為整數)個字符組成的有限序列,因此,答案為B。]
例2 B [本題考查字符串的切片。十八位身份證號由六位數字地址碼、八位數字出生日期碼,出生日期的開始位置索引號為6,月的開始位置索引號為10,取兩位,因此為s[10:12]。倒數第二位是性別代碼,因此索引號為16。]
變式訓練 C [本題主要考查的是字符串組操作。本程序的功能是將字符串x進行反轉操作,故答案為C。]
例3 B [變量i和j從兩端向中間遍歷,當i大于j時結束循環。若產生隨機數為0,將s[i]連接到res中,向后移動i,否則將s[j]連接到res中,向前移動j。A選項產生的隨機數為0,0,0,1,0。B選項產生″ae″,i和j分別指向b和d,因此不可能連接到c。C選項產生的隨機數為0,1,1,0,0或0,1,1,0,1。D選項產生的隨機數均為1或1,1,1,1,0。]
變式訓練 D [條件i-j==m表示m個長度的切片,表達式s[j:i][::-1]表示把該切片進行反向連接。選擇結構表示最后一段的切片長度,若條件i-j+1==m成立表示長度為m-1個,還是要反向,否則把剩余一段取出,放在sm的前面。而s按3個一段分,最后剩下字母q。]
例4 B [本題考查字符串的基本操作。RGB是將字符串按逗號分隔,形成一個列表['255','96','8']。程序的功能是將列表中三個字符串轉換成數值類型,并用十六進制表示。for i in range(2)表示循環2次,若轉換后十六進制只有一位數字,也要在前面加0。語句s1=code[t%16]+s1表示將取出的余數反向連接。]
變式訓練 C [本題考查字符串基本操作。x是將字符串按″-″分隔,形成一個列表['394','5','222','60','809']。遍歷列表,查找一個連續遞增的字符串,并將該字符串連接在qiu的前面。]
隨堂檢測
1.C [本題主要考查的是字符串的切片操作。字符串中第一個字符的索引號為0,切片操作時,只能取到下標end前面位置上的字符,s[7:9]的值為″is″,因此,答案為C。]
2.A [f數組分別存儲小寫字母a-z的個數。如果是大寫字母,則跳過,如果是小寫字母,且沒有出現過,列表對應位置加 1,再從小到大輸出對應字母。]
3.C [k的值為0至4之間的數乘以0至3之間的數,[0,4]*0值均為0,[0,4]*1值依次為0、1、2、3、4,[0,4]*2值依次為0、2、4、6、8,[0,4]*3值依次為0、3、6、9、12,因此不可能產生5,7,10,11,即字符中不可能包含t。]
4.D [當s[i]為″A″時,c每次加1,即c是所有″A″的數量。每一段中包含相同數量的″A″、″B″,當前共i+1個字母中,″B″的數量也應該是c個,即i+1=2*c。pos是每段開始位置,當前位置i是每段結束位置,因此pos的值為i+1。]
5.D [本題考查字母的加密。a的內碼為97,ord(i)-98等效于ord(i)-97-1,表達式(ord(i)-98)%26表示字母中位置循環向前移動一個位置。a的內碼為65,ord(i)-40,等效于ord(i)-65+25,等效于ord(i)-65+26-1。程序的功能是將字母循環向前移一位,非字母不連接,用該字母前一個字母代替。]
6.①n2=len(fword) ②text1[i:i+n2]==fword
③text2=text2+text1[i]
解析 本題考查的是字符串的綜合應用。根據while循環中的語句“text2=text2+cword”和“i=i+n2”可知,n2為查找的單詞的長度,因此①處語句為n2=len(fword);劃線②處表示當前子串是否為要查找的內容,如果是,則將替換的內容拼接在字符串text2,然后將指針i移動n2個位置,因此②處的語句為text1[i:i+n2]==fword;如果當前子串不是要查找內容,則將當前字符直接拼接在字符串text2中,故③處代碼為text2=text2+text1[i]。

展開更多......

收起↑

資源列表

<pre id="tfb94"><li id="tfb94"></li></pre>

<bdo id="tfb94"><rt id="tfb94"></rt></bdo>
  • <menu id="tfb94"><dl id="tfb94"></dl></menu><i id="tfb94"><acronym id="tfb94"><sub id="tfb94"></sub></acronym></i>

    1. 主站蜘蛛池模板: 平利县| 内江市| 苍梧县| 武陟县| 新竹县| 万山特区| 康平县| 奉化市| 喜德县| 闽侯县| 浙江省| 朝阳县| 和林格尔县| 金寨县| 晋宁县| 禹州市| 白山市| 嵊泗县| 黄山市| 临汾市| 云浮市| 沁源县| 来凤县| 库车县| 台安县| 安泽县| 岑巩县| 宾阳县| 隆安县| 海盐县| 恩施市| 阿鲁科尔沁旗| 邻水| 卓资县| 井陉县| 芒康县| 绥化市| 利津县| 那坡县| 郧西县| 宁陵县|