Python程序設(shè)計實(shí)踐 教案 實(shí)驗(yàn)4 字符串_第1頁
Python程序設(shè)計實(shí)踐 教案 實(shí)驗(yàn)4 字符串_第2頁
Python程序設(shè)計實(shí)踐 教案 實(shí)驗(yàn)4 字符串_第3頁
Python程序設(shè)計實(shí)踐 教案 實(shí)驗(yàn)4 字符串_第4頁
Python程序設(shè)計實(shí)踐 教案 實(shí)驗(yàn)4 字符串_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

《Python程序設(shè)計實(shí)踐教程》課程教案課題:字符串教學(xué)目的:理解字符串的基本概念與特性:通過講解字符串的定義、表示方法及其不可變性,幫助學(xué)生理解字符串在Python中的存儲與處理方式,為后續(xù)字符串操作奠定基礎(chǔ)。掌握字符串的常用操作方法:包括字符串的拼接、切片、索引、遍歷等基本操作,使學(xué)生能夠靈活處理字符串?dāng)?shù)據(jù),滿足實(shí)際編程需求。熟悉字符串格式化與模板的使用:通過格式化字符串(如`format()`方法、f-string)的學(xué)習(xí),幫助學(xué)生掌握字符串格式化的技巧,提升代碼的可讀性與輸出效果。理解字符串編碼與解碼的原理:介紹字符編碼(如UTF-8、ASCII)的概念及其在字符串處理中的應(yīng)用,使學(xué)生能夠正確處理多語言文本與編碼轉(zhuǎn)換問題。掌握字符串的常用內(nèi)置函數(shù)與方法:如`len()`、`split()`、`join()`、`replace()`等,幫助學(xué)生高效處理字符串?dāng)?shù)據(jù),提升編程效率。培養(yǎng)字符串處理的實(shí)際應(yīng)用能力:通過實(shí)際案例與實(shí)驗(yàn),學(xué)生能夠?qū)⒆址僮鲬?yīng)用于文本處理、數(shù)據(jù)清洗等場景,提升解決實(shí)際問題的能力。為后續(xù)文本處理與數(shù)據(jù)分析奠定基礎(chǔ):通過本章的學(xué)習(xí),學(xué)生能夠掌握字符串處理的核心技能,為后續(xù)學(xué)習(xí)文本分析、正則表達(dá)式及數(shù)據(jù)處理提供支持。課型:新授課課時:本章安排2個課時。教學(xué)重點(diǎn):重點(diǎn):1.理解序列的基本概念。2.掌握常用的通用序列操作。3.理解字符串的概念。4.掌握字符串的常見操作方法。5.了解正則表達(dá)式的構(gòu)造和使用方法。教學(xué)難點(diǎn):難點(diǎn):本章教學(xué)難點(diǎn)在于如何理解字符串的不可變性,并掌握字符串操作(如切片、格式化、編碼轉(zhuǎn)換等)的高效使用方法。教學(xué)過程:教學(xué)形式:講授課,教學(xué)組織采用課堂整體講授和分組演示。教學(xué)媒體:采用啟發(fā)式教學(xué)、案例教學(xué)等教學(xué)方法。教學(xué)手段采用多媒體課件、視頻等媒體技術(shù)。板書設(shè)計:本課標(biāo)題字符串課次0.5授課方式理論課□討論課□習(xí)題課□其他□課時安排2學(xué)分共2分授課對象普通高等院校學(xué)生任課教師教材及參考資料1.《Python程序設(shè)計實(shí)踐教程》。2.本教材配套視頻教程及學(xué)習(xí)檢查等資源。3.與本課程相關(guān)的其他資源。教學(xué)基本內(nèi)容教學(xué)方法及教學(xué)手段課程引入在編程的世界中,字符串是處理文本數(shù)據(jù)的基礎(chǔ)工具,無論是簡單的文本操作還是復(fù)雜的數(shù)據(jù)分析,都離不開對字符串的熟練運(yùn)用。本章將帶領(lǐng)大家深入探索Python中字符串的強(qiáng)大功能,從序列的基本操作到字符串的常用方法,再到正則表達(dá)式的高級應(yīng)用,逐步掌握文本處理的技巧。我們將學(xué)習(xí)如何創(chuàng)建、格式化、查找、替換和分割字符串,同時了解正則表達(dá)式在文本匹配與提取中的重要作用。通過本章的學(xué)習(xí),你將能夠靈活運(yùn)用字符串操作函數(shù)解決實(shí)際問題,并掌握處理復(fù)雜文本數(shù)據(jù)的能力。讓我們一起開啟字符串處理的探索之旅,解鎖文本處理的無限可能!參考以下形式:1.銜接導(dǎo)入2.懸念導(dǎo)入3.情景導(dǎo)入4.激疑導(dǎo)入5.演示導(dǎo)入6.實(shí)例導(dǎo)入7.其他形式實(shí)驗(yàn)4字符串一、實(shí)驗(yàn)?zāi)康?.理解序列的基本概念。2.掌握常用的通用序列操作。3.理解字符串的概念。4.掌握字符串的常見操作方法。5.了解正則表達(dá)式的構(gòu)造和使用方法。二、知識要點(diǎn)1.序列Python?的序列包括字符串(str)、列表(list)、元組(tuple)、?range?對象。其中字符串、元組、?range?對象是不可變序列類型,列表是可變序列類型。序列的元素可以通過索引訪問,第一個元素的索引為?0,第二個元素的索引為?1,以此類推;也可以反向訪問,反向訪問的索引是負(fù)數(shù),如表?4-1?所示。表?4-1正向索引和反向索引季節(jié)春夏秋冬正向索引0123反向索引?4?3?2?1序列操作符及其應(yīng)用如表?4-2?所示(假設(shè)s=“Hello”、t=“Python”)。表?4-2序列操作符及其應(yīng)用操作符描述示例結(jié)果xins如果?x?是?s?的元素,返回?True,否則返回?False"e"insTruexnotins如果?x?不是?s?的元素,返回?True,否則返回?False"He"notinsFalses+t連接?s?和?ts+t"HelloPython"s*n?或?n*s將序列?s?重復(fù)?n?次,生成一個新序列s*2?或?2*s"HelloHello"(續(xù)表)操作符描述示例結(jié)果s[i]引用序列?s?中索引為?i?的元素s[1]"e"s[i:j]或?s[i:j:k]引用序列?s?中索引為?i?到?j-1?的子序列(切片),步長為?1?或?ks[0:2]"He"2.常用的序列操作函數(shù)常用的序列操作函數(shù)如表?4-3?所示(假設(shè)?s=“HelloPython”)。表?4-3常用的序列操作函數(shù)函數(shù)描述示例結(jié)果del(s)或?dels刪除?sdel(s)或?delslen(s)計算序列?s?的元素個數(shù)(序列的長度)len(s)11min(s)計算序列?s?的最小元素min(s)"H"max(s)計算序列?s?的最大元素max(s)"y"s.index(x,i,j)x?在切片s[i:j]中首次出現(xiàn)時的索引;若省略?i、j,則返回?x?在整個序列中首次出現(xiàn)時的索引s.index("o")4s.index("o",6,10)9s.count(xi,j)計算?x?在序列切片s[i:j]中出現(xiàn)的次數(shù);若省略?i、j,則返回?x?在整個序列中出現(xiàn)的次數(shù)s.count("o")2s.count("o",6,10)13.字符串序列字符串是一種常見的序列,包含若干個字符(用雙引號或單引號界定),通過下標(biāo)或序號引用字符串中的各個字符。4.字符串的常用操作可以通過關(guān)系運(yùn)算符直接比較字符串的大小,也可以用運(yùn)算符“+”連接字符串、通過切片取子串、用運(yùn)算符“*”生成新字符串等。字符串的很多操作都可以通過成員函數(shù)實(shí)現(xiàn),部分常用的成員函數(shù)如表?4-4?所示(設(shè)?s=“Accepted”、t=“123456789”、subs=“ed”)。表?4-4部分常用的成員函數(shù)成員函數(shù)描述示例結(jié)果lower()將字符串中的字母轉(zhuǎn)換為小寫字母s.lower()"accepted"upper()將字符串中的字母轉(zhuǎn)換為大寫字母s.upper()"ACCEPTED"capitalize()將字符串的第一個字母轉(zhuǎn)換為大寫字母,將其他字母轉(zhuǎn)換為小寫字母subs.capitalize()"Ed"isalpha()否則返回?Falses.isalpha()True(續(xù)表)成員函數(shù)描述示例結(jié)果isdigit()判斷字符串是否全為數(shù)字,是則返回?True,否則返回?Falset.isdigit()Trueislower()判斷字符串是否全為小寫字母,是則返回?True,否則返回?Falses.islower()Falseisupper()判斷字符串是否全為大寫字母,是則返回?True,否則返回?Falses.isupper()Falsefind(x[,start[,end]])只有?x?參數(shù)時,在字符串中查找子串?x,返回首次出現(xiàn)的位置;start?和?end?為可選參數(shù),表示查找范圍為[start,end-1],找不到則返回-1s.find(subs)6t.find("506")-1strip()刪除字符串的首尾字符"*zust*".strip("*")"zust"replace(old,new[,n])用?new?子串替換?old?子串;可選參數(shù)?n表示最多替換?n?次t.replace("5","")"12346789"split([x])將字符串以指定字符?x?為分隔符,拆分成多個子串構(gòu)成的列表;不帶參數(shù)時,默認(rèn)分隔符為空格t.split("5")"1234","6789"count(x[,start[,end]])統(tǒng)計子串?x?在字符串的[start,end-1]區(qū)間中出現(xiàn)的次數(shù)t.count("5")1c.join(iterable)根據(jù)分隔符?c?把可迭代對象?iterable?中的元素拼接為一個字符串"".join(t.split("5"))"12346789"5.正則表達(dá)式(1)正則表達(dá)式簡介正則表達(dá)式(RegularExpression)是一種特殊的字符序列,它定義了字符串的匹配模式。Python?解釋器在?re?模塊中實(shí)現(xiàn)了正則表達(dá)式的功能,常用的元字符如表?4-5?所示。表?4-5常用的元字符元字符說明正則表達(dá)式字符串匹配結(jié)果.匹配除換行符之外的任意字符串a(chǎn).cabca2cabc,a2c*匹配“*”之前的字符出現(xiàn)?0?次或多次的字符串a(chǎn)bc*ababcabccab,abc,abcc+匹配“+”之前的字符出現(xiàn)?1?次或多次的字符串a(chǎn)bc+ababcabccabc,abcc|匹配“|”之前或之后的字符串a(chǎn)b|cdabcdab,cd^匹配以“^”后面的字符開頭的字符串^abcabcccabc$匹配以“$”之前的字符結(jié)束的字符串a(chǎn)bc$aaabcabc?匹配“?”之前的?0?個或?1?個字符Abc?AbabcAb\表示位于“\”之后的為轉(zhuǎn)義字符a\.ca.cdea.c\d匹配任何數(shù)字,相當(dāng)于[0~9]a\dca2cabca2c\w匹配任何字母、數(shù)字及下畫線,相當(dāng)于[a~z、A~Z、0~9_]a\wcabca2cabc,a2c{m}匹配“{}”前的字符出現(xiàn)?m?次的字符串a(chǎn)b{2}cabcabbcabbc{m,n}匹配“{}”前的字符出現(xiàn)?m~n?次的字符串a(chǎn)b{1,2}cabcabbcdeabc,abbc(續(xù)表)元字符說明正則表達(dá)式字符串匹配結(jié)果[]匹配[]中的任意一個字符a[bcd]eabeadeabe,ade[a-c]或[abc]匹配指定范圍內(nèi)的任意字符[a-c]abcdea,b,c[^a-c]或[^abc]反向字符集,匹配指定范圍以外的任意字符[^a-c]abcded,e匹配標(biāo)志能改變正則表達(dá)式的匹配行為,re?模塊支持的匹配標(biāo)志如表?4-6?所示。表?4-6re?模塊支持的匹配標(biāo)志簡稱長名稱效果re.Ire.IGNORECASE匹配時不區(qū)分字母大小寫re.Mre.MULTILINE使用^和$匹配多行re.Sre.DOTALL使點(diǎn)“.”匹配換行符re.Xre.VERBOSE允許使用空格和注釋--DEBUG使解析器在控制臺顯示測試信息re.Are.ASCII指定匹配的?ASCII?編碼re.Ure.UNICODE指定匹配的?Unicode?字符(默認(rèn))re.Lre.LOCALE根據(jù)本地字符集匹配字符(2)正則表達(dá)式的使用re?模塊是?Python?的標(biāo)準(zhǔn)庫,主要用于匹配字符串。re?模塊中的常用方法如表?4-7?所示。表?4-7re?模塊中的常用方法方法名功能描述compile(pattern[,flags])創(chuàng)建模式對象search(pattern,string[,flags])在整個字符串中進(jìn)行匹配,返回匹配對象或?Nonematch(pattern,string[,flags])從字符串的開頭進(jìn)行匹配,返回匹配對象或?Nonefindall(pattern,string[,flags])列出字符串中所有匹配項(xiàng)split(pattern,string[,maxsplit=0])根據(jù)匹配項(xiàng)分隔字符串sub(pat,repl,string[,count=0])將字符串中所有匹配項(xiàng)用?repl?替換escape(string)將字符串中所有正則表達(dá)式元字符轉(zhuǎn)義(3)正則表達(dá)式的測試除了?Python,正則表達(dá)式的測試還可以使用第三方工具,特別是在線工具。三、實(shí)例解析【實(shí)例?4-1】提取身份證號碼中的信息編寫程序,輸入一個身份證號碼,輸出性別、出生日期、年齡。(1)輸入樣2)輸出樣例男您的出生日期是?2001?年?04?月?05?日您的年齡是?22(3)問題分析①②為了避免輸入錯誤,首先應(yīng)對輸入數(shù)據(jù)進(jìn)行合法性檢驗(yàn),使用?len()函數(shù)計算字符串的長度并判斷是否為?18?位。③調(diào)用第三方庫獲得今年的年份(計算時要注意類型轉(zhuǎn)換),代碼如下。fromdatetimeimportdatetimeyear=datetime.now().year(4)程序代碼#sl4-1.pyfromdatetimeimportdatetimein_id=input() #輸入一個字符串iflen(in_id)!=18: #判斷輸入的字符串是否為?18位print('輸入的身份證號位數(shù)錯')else:y=int(in_id[16])if(y%2==1):print("男")else:print("女")year=in_id[6:10] #字符串中序號為?6~9?的子串表示年份month=in_id[10:12] #序號為?10、11?的子串表示月份day=in_id[12:14] #序號為?12、13?的子串表示日期print('您的出生日期是'+year+'年'+month+'月'+day+'日') #將幾個字符串拼接起來year=datetime.now().yearage=year-int(in_id[6:10])print('您的年齡是'+str(age))(5)思考與討論①使用?isdigit()函數(shù)判斷字符串的前?17?位是否只由數(shù)字組成,應(yīng)如何修改程序?②可以用一個變量表示出生日期,從而簡化程序,代碼如下。birth=num[6:10]+'年'+num[10:12]+'月'+num[12:14]+'日'print('您的出生日期是'+birth)【實(shí)例?4-2】按指定格式輸出當(dāng)天的日期(1)輸出樣例2023-4-202023/4/202023?年?4?月?20?日(2)問題分析當(dāng)天的年份、月份、日期可以通過?datetime?模塊下的?datetime.now().year、datetime.now().month、datetime.now().day?得到,得到的是三個整數(shù),可以根據(jù)?map()函數(shù)將其轉(zhuǎn)換成字符串,然后利用字符串的成員函數(shù)?join()對其進(jìn)行連接。(3)程序代碼#sl4-2.pyfromdatetimeimportdatetimeyear=datetime.now().yearmonth=datetime.now().monthday=datetime.now().daydate=list(map(str,[year,month,day]))date1='-'.join(date)date2='/'.join(date)date3=str(year)+'年'+str(month)+'月'+str(day)+'日'print(date1)print(date2)print(date3)【實(shí)例?4-3】統(tǒng)計大寫字母、小寫字母、數(shù)字、空格的個數(shù)(1)輸入格式輸入一行字符串。(2)輸出格式第一行輸出大寫字母的個數(shù)。第二行輸出小寫字母的個數(shù)。第三行輸出數(shù)字的個數(shù)。第四行輸出空格的個數(shù)。(3)輸入樣例Lifeisshort,youneedPython!(4)輸出樣例22204(5)程序代碼#sl4-3.pyline=input()upper=0lower=0digit=0space=0forchinline:ifch.isupper():upper+=1elifch.islower():lower+=1elifch.isdigit():digit+=1elifch.isspace():space+=1print(upper)print(lower)print(digit)print(space)(6)思考與討論①要判斷字符是否是大寫字母、小寫字母、數(shù)字、空格,可以用邏輯判斷,也可以用字符串的?isupper()、islower()、isdigit()、isspace()函數(shù)判斷。②如何統(tǒng)計字符串中其他字符的個數(shù)?【實(shí)例?4-4】制作下載進(jìn)度條下載進(jìn)度條可以實(shí)時顯示計算機(jī)處理任務(wù)的進(jìn)度,由已完成任務(wù)量和未完成任務(wù)量組成,如圖?4-1?所示。圖?4-1下載進(jìn)度條(1)問題分析本例涉及?print()函數(shù)、for?循環(huán)、format()方法的使用。首先定義一個變量,用于接收方法將字符串進(jìn)行格式化輸出。(2)程序代碼#sl4-4.pyimporttimeincomplete_sign=20 #print('='*10+'開始下載'+'='*10)foriinrange(incomplete_sign+1):completed="*"*i #已完成incomplete="."*(incomplete_sign-i) #未完成percentage=(i/incomplete_sign)*100 #百分比print("{:3.0f}%[{}{}]".format(percentage,completed,incomplete),end="\n")time.sleep(0.5)print("\n"+'='*10+'下載完成'+'='*10)(3)思考與討論若只在一行中輸出,使后面的內(nèi)容覆蓋前面的內(nèi)容,從而達(dá)到實(shí)時顯示進(jìn)度條的功能,應(yīng)如何修改程序?【實(shí)例?4-5】提取字符串中的單詞(1)問題分析可直接使用re模塊的findall()方法進(jìn)行匹配,即re.findall(正則表達(dá)式,待匹配字符串)。(2)程序代碼#sl4-5.pyimportres="""Chinesepeoplemaynotbethatfamiliarwithsportstourismbutitisoneofthefastestgrowingsectorsoftourism."""content=re.findall(r"\b[a-zA-Z]+\b",s)print(content)(3)運(yùn)行結(jié)果'but','it','is','one','of','the','fastest','growing','sectors','of','tourism'](4)思考與討論使用?re?模塊的?findall()方法找到需要處理的字符串?s?中的所有匹配項(xiàng),并保存到變量?content?中。把源代碼的最后一行修改成以下代碼,查看輸出結(jié)果。ifcontent:print("提取的信息如下。")forwordincontent:print(word)else:print("文本中沒有信息。")【實(shí)例?4-6】校驗(yàn)密碼使用正則表達(dá)式校驗(yàn)用戶輸入的密碼是否只包含?6~20?位數(shù)字、字母或下畫線,且不全為數(shù)字。(1)問題分析增加密碼的位數(shù)和復(fù)雜度是保證密碼信息安全的一個重要方法,本例可通過正則表達(dá)式對輸入的密碼進(jìn)行校驗(yàn)。(2)程序代碼#sl4-6.pyimportrewhileTrue:password=input("請輸入密碼:") #輸入密碼password_again=input("請再次輸入密碼:") #再次輸入密碼ifpassword==password_again:breakelse:print("兩次輸入的密碼不相同。請重新輸入!")reg="^(?!\d+$)[\dA-Za-z_]{6,20}$" #正則表達(dá)式pattern=pile(reg)res=pattern.match(password)ifres:print("您輸入的密碼合法!")else:print("密碼包含指定范圍外的字符,或者全為數(shù)字,或者字符個數(shù)超出范圍。請重新輸入!")(3)運(yùn)行結(jié)果?1請輸入密碼:abc12345請再次輸入密碼:abc12345密碼包含指定范圍外的字符,或者全為數(shù)字,或者字符個數(shù)超出范圍。請重新輸入!(4)運(yùn)行結(jié)果?2請輸入密碼:qwert12345請再次輸入密碼:qwert12345您輸入的密碼合法?。?)思考與討論有人曾統(tǒng)計過最容易破解的密碼,如?111111、666666、888888、123456、qwert?等??梢允褂谜齽t表達(dá)式校驗(yàn)用戶輸入的字符串的合法性。四、實(shí)驗(yàn)內(nèi)容1.在?IDLE?中依次輸入下列語句,將輸出結(jié)果填寫在橫線處。(1)字符串的索引和切片>>>str="PythonProgramming">>>str[1] #輸出結(jié)果為:>>>str[-1] #輸出結(jié)果為:>>>str[4:13] #輸出結(jié)果為:>>>str[-5::] #輸出結(jié)果為:>>>str[:] #輸出結(jié)果為:>>>str[0::2] #輸出結(jié)果為:>>>new=str[::-1]>>>new #輸出結(jié)果為:(2)字符串的連接、重復(fù)操作>>>s1='abc' >>>s2='xyz'>>>s1+s2 #輸出結(jié)果為:>>>s1*3 #輸出結(jié)果為:(3)字符串的成員關(guān)系操作>>>s='Howareyou?'>>>'o'ins #輸出結(jié)果為:>>>'a'notins #輸出結(jié)果為:>>>s.count('o') #輸出結(jié)果為:>>>s.index('o',5) #輸出結(jié)果為:(4)字符串的比較運(yùn)算操作>>>s1='abc'>>>s2='abcd'>>>s3='cba'>>>s1==s2 #輸出結(jié)果為:>>>s1!=s3 #輸出結(jié)果為:>>>s1<=s3 #輸出結(jié)果為:2.輸出字符串的長度、最大值、最小值,并進(jìn)行求和運(yùn)算。>>>str='abcdefgh'>>>len(str) #輸出結(jié)果為:>>>max(str) #輸出結(jié)果為:>>>min(str) #輸出結(jié)果為:>>>sum(str) #輸出結(jié)果為:3.輸入一個字符串,再輸入要刪除的字符,將字符串中出現(xiàn)的所有該字符(不區(qū)分大小寫)刪除。4.輸入五個字符串,分別按?ASCII?編碼的順序和字符串長度輸出最大、最小字符串。5.輸入四個字符串,求這些字符串的最大長度。6.輸入一句英文句子,輸出單詞數(shù)。7.輸入一

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論