《Python編程案例教程》(高登) 4.Python編程案例-項(xiàng)目四_第1頁
《Python編程案例教程》(高登) 4.Python編程案例-項(xiàng)目四_第2頁
《Python編程案例教程》(高登) 4.Python編程案例-項(xiàng)目四_第3頁
《Python編程案例教程》(高登) 4.Python編程案例-項(xiàng)目四_第4頁
《Python編程案例教程》(高登) 4.Python編程案例-項(xiàng)目四_第5頁
已閱讀5頁,還剩114頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

項(xiàng)目四數(shù)

據(jù)

器項(xiàng)目四

在實(shí)際開發(fā)過程中,會遇到各式各樣的數(shù)據(jù),這些數(shù)據(jù)又有著各自的特點(diǎn)。例如,數(shù)據(jù)量大且相互之間存在一定內(nèi)在關(guān)系的可變數(shù)據(jù),具有映射關(guān)系的數(shù)據(jù),不可重復(fù)的數(shù)據(jù)等。Python提供了形形色色的數(shù)據(jù)容器用于處理這些數(shù)據(jù),包括字符串、列表、字典、元組和集合等。數(shù)據(jù)容器項(xiàng)目導(dǎo)讀項(xiàng)目四數(shù)據(jù)容器學(xué)習(xí)目標(biāo)掌握序列的基本操作。掌握字符串格式化方法和常用操作。掌握列表和字典的創(chuàng)建、訪問、遍歷和基本操作方法。熟悉元組的創(chuàng)建、訪問、合并和遍歷方法。熟悉集合的創(chuàng)建和基本操作方法。能根據(jù)實(shí)際問題選擇合適的數(shù)據(jù)類型解決問題。思政目標(biāo)提高選擇合適方法解決不同問題的能力。

將中華優(yōu)秀傳統(tǒng)文化融入編程案例中,增強(qiáng)感受詩詞之美、詩詞之趣的能力。項(xiàng)目四Content項(xiàng)目四判斷回文串模擬雙色球號碼生成器開發(fā)“詩詞大會”游戲分析興趣班報(bào)名情況判斷回文串任

務(wù)

一任務(wù)一

如果一個(gè)字符串從前往后和從后往前讀是一樣的,則稱為回文串。因此,判斷一個(gè)字符串是否是回文串,可以先獲得字符串的長度,然后從首尾字符開始依次判斷。本任務(wù)將帶領(lǐng)大家編寫Python程序,判斷回文串。判斷回文串任務(wù)描述知識鏈接一、通用序列

序列是程序設(shè)計(jì)中經(jīng)常用到的數(shù)據(jù)結(jié)構(gòu),它是一塊用來存放多個(gè)值的連續(xù)內(nèi)存空間。Python中常用的序列有字符串、列表、元組等,所有序列都可以進(jìn)行某些特定的操作,包括索引、分片、相加、相乘、計(jì)算序列長度、獲取最大值和最小值、查找和計(jì)數(shù)等。序列中的所有元素都可以通過索引(下標(biāo))來獲取,從左往右,第一個(gè)元素的索引為0,第二個(gè)為1,依此類推到最后一位。索引還可以取負(fù)值,從右往左,最后一個(gè)元素的索引為?1,倒數(shù)第二個(gè)為?2,依此類推到左側(cè)第一位。在實(shí)際開發(fā)過程中,為提高代碼的可讀性,會經(jīng)常使用以下3種命名方式。1.索引字符串是一個(gè)由字符組成的序列,為便于理解,本任務(wù)內(nèi)容都以字符串為例進(jìn)行說明。任務(wù)一例如,創(chuàng)建字符串“str1='Python'”,其索引如表4-1所示。由表4-1可知,str1[0]和str1[?6]的值都是字符“P”。還可使用序列字面值直接使用索引,如'Python'[0]的值也是字符“P”。任務(wù)一表4-1字符串str1的索引字符Python正索引012345負(fù)索引?6?5?4?3?2?1slice[start:end:step]

分片與索引類似,都可以獲取序列中的元素,區(qū)別是索引只能獲取單個(gè)元素,而分片可以獲取一定范圍內(nèi)的元素。

分片通過冒號隔開的兩個(gè)索引來實(shí)現(xiàn),其語法格式如下。

任務(wù)一2.分片其中,slice表示序列;start表示起始索引,缺省時(shí)分片從序列中的第一個(gè)元素開始;end表示結(jié)束索引(不含),缺省時(shí)分片到序列的最后一個(gè)元素結(jié)束;step表示步長,缺省時(shí)為1,不能為0。例如,創(chuàng)建字符串“str2='abcdefg'”,使用分片獲取字符串中元素的幾種情況如表4-2所示。任務(wù)一表4-2分片獲取字符串str2中元素分片方式說明結(jié)果str2[1:]獲取str2中從索引1開始到最后的所有元素'bcdefg'str2[:3]獲取str2中從索引0到索引3(不含)的所有元素'abc'str2[1:3]獲取str2中從索引1到索引3(不含)的所有元素'bc'str2[:?1]獲取str2中從索引0開始到最后(不含)的所有元素'abcdef'str2[?3:?1]獲取str2中從索引?3開始到最后(不含)的所有元素'ef'str2[?3:]獲取str2中最后三個(gè)元素'efg'str2[:]獲取str2中所有元素'abcdefg'str2[::2]獲取str2中步長為2時(shí)的所有元素'aceg'str2[2:6:2]獲取str2中步長為2時(shí)從索引2到索引6(不含)的所有元素'ce'str3=str2[7:0:-1] #str3為'gfedcb'str3=str2[-1:-8:-1] #str3為'gfedcba'str3=str2[::-1] #str3為'gfedcba'任務(wù)一Python中步長不能設(shè)置為0,但可以是負(fù)數(shù)。當(dāng)步長為負(fù)數(shù)時(shí),起始索引必須大于結(jié)束索引,即分片從右往左提取元素。例如:3.相加使用加法運(yùn)算符可對序列進(jìn)行連接操作。例如:str4='Hello,'+'World' #字符串連接,str4為'Hello,World'list1=[1,2,3]+[4,5,6] #列表連接,list1為[1,2,3,4,5,6]只有類型相同的序列才能進(jìn)行連接操作。例如,字符串和列表是無法連接在一起的。str5='hello'*3 #str5為'hellohellohello'

使用數(shù)字n乘以一個(gè)序列會生成新的序列,在新的序列中,原來的序列將重復(fù)n次。例如:

任務(wù)一4.相乘序列常用的內(nèi)置函數(shù)有l(wèi)en()、min()和max(),其參數(shù)都為序列名。其中,len()函數(shù)返回序列中元素的個(gè)數(shù)(即序列長度),min()函數(shù)和max()函數(shù)則分別返回序列中最小和最大的元素?!纠?/p>

4-1】輸入一個(gè)字符串,輸出字符串中的最大字符和最小字符,并將字符串輸出為如下格式(輸出“?”的個(gè)數(shù)會隨著字符串的長度而變化),如圖4-1所示。5.長度、最小值和最大值圖4-1輸出的文字格式strs=input('請輸入一個(gè)字符串:')#輸入字符串并賦給strsstr_len=len(strs) #獲取strs長度并賦給str_lenstr_max=max(strs) #獲取strs中最大字符并賦給str_maxstr_min=min(strs)

#獲取strs中最小字符并賦給str_minprint('該字符串中最大字符為:',str_max)

#輸出最大字符print('該字符串中最小字符為:',str_min)

#輸出最小字符print('+'+'-'*str_len+'+')#輸出“+”、str_len個(gè)“-”和“+”print('|'+strs+'|')

#輸出“|”、字符串和“|”print('+'+'-'*str_len+'+')

#輸出“+”、str_len個(gè)“-”和“+”任務(wù)一【問題分析】

本例題中,輸出連續(xù)相同的字符“?”,可使用序列的乘法運(yùn)算實(shí)現(xiàn),它的個(gè)數(shù)等于輸入字符串的長度,可使用len()函數(shù)獲取。然后使用max()和min()函數(shù)獲取字符串中的最大字符和最小字符并輸出?!緟⒖即a】a=max(1,2,3,4) #a為4b=min('abcde','abce') #b為'abcde'任務(wù)一【運(yùn)行結(jié)果】程序運(yùn)行結(jié)果如圖4-2所示。圖4-2

例4-1程序運(yùn)行結(jié)果

通過上述代碼,可以看出這3個(gè)內(nèi)置函數(shù)的用法。此外,min()和max()函數(shù)的參數(shù)并不一定是序列,也可以是兩種或兩種以上相同類型的數(shù)據(jù)(字典除外)。例如:sequence.index(obj)

序列提供index()方法用于返回指定元素在序列中首次出現(xiàn)的位置,如果該元素不在序列中則拋出異常,其語法格式如下。

任務(wù)一6.查找和計(jì)數(shù)如果需要知道指定元素在序列中出現(xiàn)的次數(shù),可以使用count()方法進(jìn)行計(jì)數(shù)并返回,其語法格式如下。其中,sequence表示序列,obj表示要查找的對象。

使用index()方法前應(yīng)通過成員運(yùn)算符“in”或“notin”判斷該元素是否存在序列中,避免程序出錯(cuò)。sequence.count(obj)其中,sequence表示序列,obj表示要統(tǒng)計(jì)的對象。

任務(wù)一【例

4-2】查找輸入的人物是否在《三國演義》片段中,如果在,則統(tǒng)計(jì)出現(xiàn)的次數(shù)。【問題分析】

首先使用“in”運(yùn)算符判斷輸入的人物是否在《三國演義》片段中,如果在,則使用index()方法獲取首次出現(xiàn)的位置,然后使用count()方法統(tǒng)計(jì)出現(xiàn)的次數(shù)?!緟⒖即a】#創(chuàng)建字符串excerpts并賦值excerpts='''次日,于桃園中,備下烏牛白馬祭禮等項(xiàng),三人焚香再拜而說誓曰:

“念劉備、關(guān)羽、張飛,雖然異姓,既結(jié)為兄弟,則同心協(xié)力,救困扶危;

上報(bào)國家,下安黎庶。不求同年同月同日生,只愿同年同月同日死。任務(wù)一得三百余人,就桃園中痛飲一醉。來日收拾軍器,但恨無馬匹可乘。正思慮間,人報(bào)有兩個(gè)客人,引一伙伴當(dāng),趕一群馬,投莊上來。玄德曰:“此天佑我也!”三人出莊迎接。原來二客乃中山大商:一名張世平,一名蘇雙,每年往北販馬,近因寇發(fā)而回。玄德請二人到莊,置酒管待,訴說欲討賊安民之意。二客大喜,愿將良馬五十匹相送;又贈金銀五百兩,鑌鐵一千斤,以資器用。'''name=input('請輸入人物姓名:') #輸入人物姓名并賦給nameifnameinexcerpts: #如果name在此片段中#使用index()方法獲取name首次出現(xiàn)的位置indexindex=excerpts.index(name)print(name,'首次出現(xiàn)的位置索引為:',index) #輸出index#使用count()方法獲取name出現(xiàn)的次數(shù)并輸出print(name,'在此片段中出現(xiàn)',excerpts.count(name),'次')else:print(name,'沒有出現(xiàn)在此片段中')

#輸出name不在此片段中任務(wù)一【運(yùn)行結(jié)果】程序運(yùn)行結(jié)果如圖4-3所示。圖4-3例4-2程序運(yùn)行結(jié)果

編程時(shí)經(jīng)常會輸出類似“你好,×××,你這個(gè)月的工資是×××元!”的字符串,其中,“×××”的內(nèi)容是根據(jù)變量的值變化的,因此,需要一種簡便的方式格式化字符串。任務(wù)一二、字符串字符串格式化1.字符串格式化

初學(xué)字符串格式化內(nèi)容時(shí),讀者不必花太多精力去探究每個(gè)細(xì)節(jié),重點(diǎn)掌握最常用的一些規(guī)則即可,其他部分可在需要時(shí)隨時(shí)查閱。任務(wù)一1)“%”符號

Python提供了“%”符號進(jìn)行字符串格式化,其語法格式如下。'%[標(biāo)志][0][輸出最小寬度][.精度]格式字符'%變量其中,[]中的項(xiàng)為可選項(xiàng),也可以表示為如下形式。'%[±][0][m][.n]格式字符'%變量

(1)標(biāo)志:標(biāo)志字符為“+”或“?”,指定輸出數(shù)據(jù)的對齊方式。指定“+”時(shí),右對齊輸出;指定“?”時(shí),左對齊輸出;缺省時(shí)為“+”,默認(rèn)右對齊。

(2)輸出最小寬度:用十進(jìn)制整數(shù)m表示輸出的最小位數(shù)。若實(shí)際位數(shù)大于定義的寬度,則按實(shí)際位數(shù)輸出;若實(shí)際位數(shù)小于定義的寬度,則補(bǔ)空格或0(m前有數(shù)字0,則補(bǔ)0)。任務(wù)一

(3)精度:精度格式符以“.”開頭,后跟十進(jìn)制整數(shù)n。如果輸出數(shù)字,則表示小數(shù)的位數(shù);如果輸出字符,則表示輸出字符的個(gè)數(shù);若實(shí)際位數(shù)大于所定義的精度,則截去超過的部分。

(4)格式字符:用來表示輸出數(shù)據(jù)的類型,各種格式字符及其說明如表4-3所示。表4-3格式字符格式字符說明格式字符說明s字符串x十六進(jìn)制整數(shù)c單個(gè)字符f、F浮點(diǎn)數(shù)%字符%e、E指數(shù)(基底為e或E)d、i十進(jìn)制整數(shù)g、G以f或e中較短的輸出寬度輸出浮點(diǎn)數(shù)o八進(jìn)制整數(shù)

任務(wù)一【例

4-3】使用“%”符號格式化?!緟⒖即a】a=15 #定義變量a并賦值b=12345678.1234567 #定義變量b并賦值s='IlovePython!' #定義字符串s并賦值print('a=%05d'%a) #使用m控制輸出位數(shù),空位補(bǔ)0print('b=%8.3f'%b) #使用m.n控制輸出的長度和小數(shù)點(diǎn)位數(shù)print('%17s'%s) #使用m控制輸出字符串長度print('%-17.6s'%s) #使用-m.n左對齊、控制字符串長度和字符位數(shù)任務(wù)一【運(yùn)行結(jié)果】程序運(yùn)行結(jié)果如圖4-4所示。圖4-4例4-3程序運(yùn)行結(jié)果任務(wù)一【程序說明】輸出變量a時(shí),“%05d”表示輸出寬度為5并用“0”來補(bǔ)空位。輸出變量b時(shí),“%8.3f”表示輸出寬度為8,精度為3,由于實(shí)際長度超過8位,故應(yīng)按實(shí)際位數(shù)輸出,小數(shù)位數(shù)超過3位部分被截去。

輸出字符串s時(shí),“%17s”表示輸出字符串寬度為17,如果字符串本身長度不足17,則用空格左補(bǔ)齊,可以看到“IlovePython!”前存在3個(gè)空格。“%?17.6s”表示輸出寬度雖為17,但這里指定了精度“.6”,也就是說指定了輸出字符的個(gè)數(shù)為6,并且用“?”指定了左對齊,所以輸出6個(gè)字符“Ilove”,后面還有11個(gè)空格。任務(wù)一2)format()方法使用format()方法也可以格式化字符串,其基本語法格式如下。模板字符串.format(逗號分隔的參數(shù))

模板字符串由一系列槽(用大括號表示)組成,用于控制字符串中嵌入值出現(xiàn)的位置,其基本思想是,將format()方法中逗號分隔的參數(shù)按照序號替換到模板字符串的槽中(序號從0開始)。例如:#s為'你好,張三,你這個(gè)月的工資是8500元!'s='你好,{1},你這個(gè)月的工資是{0}元!'.format(8500,'張三')如果大括號中沒有序號,則按照出現(xiàn)順序替換,例如:任務(wù)一#s為'你好,8500,你這個(gè)月的工資是張三元!'s='你好,{},你這個(gè)月的工資是{}元!'.format(8500,'張三')

format()方法中模板字符串的槽除了包括參數(shù)序號外,還可以包括格式控制信息,此時(shí)槽的內(nèi)部格式如下。:{參數(shù)序號:格式控制標(biāo)記}

其中,格式控制標(biāo)記用于控制參數(shù)顯示時(shí)的格式,它包括“填充”“對齊”“寬度”“,”“.精度”“格式字符”6個(gè)可選字段,這些字段可以組合使用。具體的格式控制標(biāo)記及其說明如表4-4所示。任務(wù)一表4-4格式控制標(biāo)記格式控制標(biāo)記說明格式控制標(biāo)記說明填充用于填充的單個(gè)字符,數(shù)字的千位分隔符對齊<左對齊>右對齊^居中對齊.精度浮點(diǎn)數(shù)小數(shù)部分精度或字符串最大輸出長度寬度輸出寬度格式字符整數(shù)類型d、o、x、X、b浮點(diǎn)數(shù)類型e、E、f百分比%

任務(wù)一【例

4-4】模擬輸出簡單的非刷新文本進(jìn)度條。要求按照任務(wù)執(zhí)行百分比將整個(gè)任務(wù)劃分為100個(gè)單位,每執(zhí)行10%輸出一次進(jìn)度條,每行輸出包含進(jìn)度百分比、代表已完成部分(**)和未完成部分(..)的兩種字符,以及一個(gè)跟隨完成進(jìn)度前進(jìn)的小箭頭,風(fēng)格如下:10%[**->..................]【問題分析】

本例題的關(guān)鍵是輸出字符的格式,可使用format()方法進(jìn)行格式化。采用for循環(huán)和print()函數(shù)構(gòu)成程序的主體部分,使用格式字符“%”輸出百分比,為了使輸出整齊,可使用{:>4.0%}格式化百分比部分。

由于程序執(zhí)行速度太快,不便于觀察,可使用time.sleep(t)函數(shù)將當(dāng)前程序暫停t秒,其中,time是Python標(biāo)準(zhǔn)時(shí)間庫。

任務(wù)一【參考代碼】importtime #導(dǎo)入time模塊scale=10 #變量scale表示輸出進(jìn)度條的精度print('-----------執(zhí)行開始-----------') #輸出執(zhí)行開始提示foriinrange(scale+1): #循環(huán)變量從0到scaledone='**'*i #用“*”表示已完成的部分undone='..'*(scale-i) #用“.”表示未完成的部分percent=i/scale #計(jì)算完成百分比#格式化輸出print('{:>4.0%}[{}->{}]'.format(percent,done,undone))time.sleep(0.1) #暫停0.1秒print('-----------執(zhí)行結(jié)束-----------') #輸出執(zhí)行結(jié)束提示任務(wù)一【運(yùn)行結(jié)果】程序運(yùn)行結(jié)果如圖4-5所示。圖4-5例4-4程序運(yùn)行結(jié)果任務(wù)一2.字符串的常用操作

Python提供了大量的方法用于字符串的查找、分割、連接、替換、移除、轉(zhuǎn)換、檢測等操作。本任務(wù)介紹幾個(gè)常用的字符串方法。字符串的常用操作字符串對象提供的涉及字符串“修改”的方法都是返回修改后的新字符串,并不對原字符串做任何修改。任務(wù)一1)查找字符串

除了使用index()方法在字符串中查找指定元素,還可使用find()方法在一個(gè)較長的字符串中查找子串。如果找到子串,返回子串所在位置的最左端索引,否則返回?1,其語法格式如下。str.find(sub[,start[,end]])

其中,str表示被查找字符串;sub表示查找的子串;start表示開始索引,缺省時(shí)為0;end表示結(jié)束索引,缺省時(shí)為字符串的長度?!纠?/p>

4-5】使用find()方法實(shí)現(xiàn)例4-2,查找輸入的人物是否在《三國演義》片段中。#創(chuàng)建字符串excerpts并賦值excerpts='''次日,于桃園中,備下烏牛白馬祭禮等項(xiàng),三人焚香再拜而說誓曰:“念劉備、關(guān)羽、張飛,雖然異姓,既結(jié)為兄弟,則同心協(xié)力,救困扶危;上報(bào)國家,下安黎庶。不求同年同月同日生,只愿同年同月同日死。皇天后土,實(shí)鑒此心,背義忘恩,天人共戮!”誓畢,拜玄德為兄,關(guān)羽次之,張飛為弟。祭罷天地,復(fù)宰牛設(shè)酒,聚鄉(xiāng)中勇士,得三百余人,就桃園中痛飲一醉。來日收拾軍器,但恨無馬匹可乘。正思慮間,人報(bào)有兩個(gè)客人,引一伙伴當(dāng),趕一群馬,投莊上來。玄德曰:“此天佑我也!”三人出莊迎接。原來二客乃中山大商:一名張世平,一名蘇雙,每年往北販馬,近因寇發(fā)而回。玄德請二人到莊,置酒管待,訴說欲討賊安民之意。二客大喜,愿將良馬五十匹相送;又贈金銀五百兩,鑌鐵一千斤,以資器用。'''任務(wù)一【參考代碼】name=input('請輸入人物姓名:') #輸入人物姓名并賦給nameindex=excerpts.find(name)#使用find()方法在excerpts中查找nameifindex>-1: #如果返回值大于-1#輸出indexprint('{}首次出現(xiàn)的位置索引為:{}'.format(name,index))#使用count()方法獲取name出現(xiàn)的次數(shù)并輸出print('{}在此片段中出現(xiàn){}次'.format(name,excerpts.count(name)))else:print('{}沒有出現(xiàn)在此片段中'.format(name)) #輸出不在此片段中任務(wù)一【參考代碼】任務(wù)一【運(yùn)行結(jié)果】程序運(yùn)行結(jié)果如圖4-6所示。圖4-6例4-5程序運(yùn)行結(jié)果任務(wù)一2)分割字符串

split()方法以指定字符為分隔符,從字符串左端開始將字符串分隔成多個(gè)子串,并返回分割結(jié)果的列表,其語法格式如下。str.split([delimiter,num])其中,str表示被分割的字符串;delimiter表示分隔符,可以是空格、換行(\n)、制表符(\t)等,缺省時(shí)為空格;num表示分割次數(shù),缺省時(shí)全部分割。例如,使用split()方法將字符串“Thisisanexampleofcutting”進(jìn)行分割,可以用下面代碼實(shí)現(xiàn)。strs='Thisisanexampleofcutting' #創(chuàng)建字符串#以空格為分隔符將字符串全部分割#結(jié)果為['This','is','an','example','of','cutting']strs.split()#以空格為分隔符將字符串分割3次#結(jié)果為['This','is','an','exampleofcutting']strs.split('',3)任務(wù)一3)連接字符串

join()方法用于將序列中的元素以指定的字符連接,生成一個(gè)新的字符串,其語法格式如下。str.join(sequence)任務(wù)一其中,str表示連接符,可以為空;sequence表示要連接的序列。例如,使用join()方法將字符串“Python!”中的字符用“?”連接,可以用下面代碼實(shí)現(xiàn)。#用“?”連接字符,輸出結(jié)果為“P-y-t-h-o-n-!”print('-'.join('Python!'))【例

4-6】將字符串“Rainfallsonfieldandtree.”中的多余空格刪除,即如果有連續(xù)空格只保留一個(gè)?!締栴}分析】可使用split()方法以空格為分隔符將字符串分隔成多個(gè)子串,然后使用join()方法通過空格將多個(gè)子串進(jìn)行連接。strs='Rainfallsonfieldandtree.'#創(chuàng)建字符串strsprint(strs) #輸出strssplit_strs=strs.split() #以空格為分隔符,將strs全部分割print(split_strs) #輸出分割后結(jié)果join_strs=''.join(split_strs) #用空格連接分割后的子串print(join_strs) #輸出連接后的字符串任務(wù)一【參考代碼】【運(yùn)行結(jié)果】程序運(yùn)行結(jié)果如圖4-7所示。圖4-7

例4-6程序運(yùn)行結(jié)果任務(wù)一4)替換字符串

replace()方法用于將字符串中的舊字符串替換成新字符串,其語法格式如下。str.replace(old,new[,max])

其中,str表示字符串;old表示將被替換的舊字符串;new表示新字符串,用于替換old;max是可選參數(shù),表示替換的最大次數(shù),缺省時(shí)替換所有。

例如,使用replace()方法將字符串“MondayTuesdayWednesday”中的“day”替換為“DAY”,可以用下面代碼實(shí)現(xiàn)。strs='MondayTuesdayWednesday'#將strs中的day替換為DAY,輸出結(jié)果為“MonDAYTuesDAYWednesDAY”print(strs.replace('day','DAY'))#將strs中的day替換為DAY,只替換兩次,輸出結(jié)果為“MonDAYTuesDAYWednesday”print(strs.replace('day','DAY',2))任務(wù)一5)移除字符串的首尾字符

strip()方法用于移除字符串首尾連續(xù)的空白字符或指定字符,其語法格式如下。str.strip([chars])其中,str表示字符串;chars表示移除的字符串首尾指定的字符,缺省時(shí)為空格。任務(wù)一

例如,使用strip()方法移除字符串“110Thisisanexample0001”中的“0”和“1”,可以用下面代碼實(shí)現(xiàn)。strs='110Thisisanexample0001' #創(chuàng)建字符串#移除strs兩側(cè)的1,輸出結(jié)果為“0Thisisanexample000”print(strs.strip('1'))#移除strs兩側(cè)的1和0,輸出結(jié)果為“Thisisanexample”print(strs.strip('10'))6)轉(zhuǎn)換字符串的大小寫

lower()方法用于將字符串中所有大寫字符轉(zhuǎn)換為小寫,而upper()方法則用于將字符串中所有小寫字符轉(zhuǎn)換為大寫,其語法格式如下。

str.lower()str.upper()任務(wù)一其中,str表示字符串。例如,使用lower()方法將字符串“ThisisanEXAMPLE”轉(zhuǎn)換為小寫,再使用upper()方法將其轉(zhuǎn)換為大寫,可以用下面代碼實(shí)現(xiàn)。strs='ThisisanEXAMPLE' #創(chuàng)建字符串#將strs中的大寫字符轉(zhuǎn)換為小寫,輸出結(jié)果為“thisisanexample”print(strs.lower())#將strs中的小寫字符轉(zhuǎn)換為大寫,輸出結(jié)果為“THISISANEXAMPLE”print(strs.upper())7)檢測字符串isalnum()方法用于檢測字符串是否由字母和數(shù)字,或兩種中的一種組成,如果是則返回True,否則返回False,其語法格式如下。str.isalnum()任務(wù)一其中,str表示要檢測的字符串。例如,使用isalnum()方法判斷字符串“2021example”是否由字母和數(shù)字組成,可以用下面代碼實(shí)現(xiàn)。strs='2021example'#創(chuàng)建字符串print(strs.isalnum())#判斷strs中是否只有字母和數(shù)字,輸出結(jié)果為True任務(wù)實(shí)施完成本任務(wù),須首先輸入字符串;接著定義回文串標(biāo)志(flag,初值為True)、首字符索引(low,初值為0)和尾字符索引(high,初值為字符串長度減1);然后循環(huán)判斷索引為low和high的字符是否相等,如果不相等則flag設(shè)為False,并退出循環(huán),否則low加1,high減1,進(jìn)行下一次判斷,直到low大于等于high;最后根據(jù)flag的值輸出字符串是否是回文串。模擬雙色球號碼生成器任

務(wù)

雙色球包括紅球和藍(lán)球,紅球由6個(gè)互不重復(fù)的1~33的隨機(jī)號碼組成,藍(lán)球是1個(gè)1~16的隨機(jī)號碼。本任務(wù)將帶領(lǐng)大家編寫Python程序,利用列表保存隨機(jī)生成的號碼,模擬雙色球號碼生成器。任務(wù)二模擬雙色球號碼生成器任務(wù)描述知識鏈接列表(list)是包含零個(gè)或多個(gè)元素的有序序列。列表的長度和內(nèi)容都是可變的,用戶可自由對列表中的元素進(jìn)行添加、刪除或修改等操作。列表沒有長度限制,元素類型也可以不同,可以同時(shí)包含數(shù)字、字符串等基本類型,和列表、元組、字典、集合及其他自定義數(shù)據(jù)類型的對象,使用非常靈活。任務(wù)二一、列表的創(chuàng)建和訪問創(chuàng)建列表只需將逗號分隔的不同元素使用方括號括起來即可。例如:animal=['elephant','monkey','snake','tiger']

#創(chuàng)建列表animalnumber=[1,2,3,4,5] #創(chuàng)建列表number與字符串一樣,可以通過下標(biāo)索引的方式來訪問列表中的元素。列表的正索引也是從0開始的,同樣也可以是負(fù)索引。例如,使用animal[0]訪問上述列表animal中索引為0的元素,取值為“elephant”。與整數(shù)和字符串不同,列表要處理一組數(shù)據(jù),因此,列表必須通過顯式的數(shù)據(jù)賦值才能生成,簡單將一個(gè)列表賦值給另一個(gè)列表不會生成新的列表對象,只會對原有列表生成一個(gè)新的引用。任務(wù)二【例

4-7】創(chuàng)建書包列表,記錄書包里的物品?!緟⒖即a】#創(chuàng)建列表schoolbag并賦值schoolbag=['語文書','數(shù)學(xué)書','練習(xí)冊','筆盒']schoolbag1=schoolbag #將schoolbag賦給schoolbag1print(schoolbag,schoolbag1) #輸出schoolbag和schoolbag1schoolbag[0]='英語書' #將第一個(gè)元素的值修改為“英語書”print(schoolbag,schoolbag1) #輸出schoolbag和schoolbag1【運(yùn)行結(jié)果】程序運(yùn)行結(jié)果如圖4-9所示。圖4-9

例4-7程序運(yùn)行結(jié)果任務(wù)二

還可以使用list()函數(shù)將字符串、range對象、元組等轉(zhuǎn)換為列表。其語法格式為“l(fā)ist(obj)”,其中obj為需要轉(zhuǎn)換的對象。例如:

list('helloworld')

#將字符串轉(zhuǎn)換為列表,結(jié)果為['h','e','l','l','o','','w','o','r','l','d']list(range(1,10,2))#將range對象轉(zhuǎn)換為列表,結(jié)果為[1,3,5,7,9]1.使用while循環(huán)遍歷列表

使用while循環(huán)遍歷列表,首先須獲取列表的長度,將其作為while循環(huán)的判斷條件。任務(wù)二二、列表的遍歷【例

4-8】使用while循環(huán)輸出書包中的每項(xiàng)物品。【問題分析】使用len()函數(shù)獲取列表的長度,作為while循環(huán)的次數(shù)?!緟⒖即a】#創(chuàng)建書包列表schoolbag并賦值schoolbag=['語文書','數(shù)學(xué)書','英語書','漫畫書']length=len(schoolbag) #獲取列表的長度賦給lengthi=0 #循環(huán)變量i初值為0whilei<length:

#當(dāng)i小于length時(shí)循環(huán)print(schoolbag[i]) #輸出列表元素i+=1 #循環(huán)變量加1任務(wù)二【運(yùn)行結(jié)果】程序運(yùn)行結(jié)果如圖4-10所示。圖4-10例4-8程序運(yùn)行結(jié)果2.使用for循環(huán)遍歷列表

使用for循環(huán)遍歷列表,只需將要遍歷的列表作為for循環(huán)表達(dá)式中的序列即可。任務(wù)二【例

4-9】使用for循環(huán)輸出書包中的每項(xiàng)物品?!緟⒖即a】#創(chuàng)建書包列表schoolbag并賦值schoolbag=['語文書','數(shù)學(xué)書','英語書','漫畫書']foriteminschoolbag: #將列表作為for循環(huán)表達(dá)式中的序列print(item) #輸出item任務(wù)二【運(yùn)行結(jié)果】程序運(yùn)行結(jié)果如圖4-11所示。圖4-11例4-9程序運(yùn)行結(jié)果

由于列表屬于序列類型,所以它也支持通用序列的所有操作。除了這些操作,Python還提供了大量方法用于列表元素的添加、刪除和排序等。

1.添加元素

列表可使用append()、extend()或insert()方法來添加元素。(1)append()方法:在列表末尾添加新的元素,其語法格式如下。任務(wù)二三、列表的基本操作

list.append(obj)其中,list表示列表,obj表示添加到列表末尾的對象。例如:number=[0,1,2,3] #創(chuàng)建列表number并賦值number.append(4) #使用append()方法給number末尾添加元素4print(number) #輸出number,結(jié)果為[0,1,2,3,4](2)extend()方法:在列表末尾一次性添加另一個(gè)序列中的多個(gè)值(用新列表擴(kuò)展原來的列表),其語法格式如下。任務(wù)二【例

4-10】在書包中再放入練習(xí)冊和筆盒?!締栴}分析】創(chuàng)建書包列表schoolbag、練習(xí)冊列表workbook和筆盒列表penbox,其中,workbook包含語文練習(xí)冊和數(shù)學(xué)練習(xí)冊,penbox包含鉛筆、油筆和橡皮。使用extend()方法將workbook列表添加到schoolbag中,使用append()方法將penbox添加到schoolbag中。【參考代碼】##創(chuàng)建書包列表schoolbag并賦值schoolbag=['語文書','數(shù)學(xué)書','英語書','漫畫書']print(schoolbag) #輸出schoolbag#創(chuàng)建練習(xí)冊列表workbook并賦值workbook=['語文練習(xí)冊','數(shù)學(xué)練習(xí)冊']penbox=['鉛筆','油筆','橡皮'] #創(chuàng)建筆盒列表penbox并賦值#使用extend()方法將workbook添加到schoolbag中schoolbag.extend(workbook)print(schoolbag) #輸出schoolbag#使用append()方法將penbox添加到schoolbag中schoolbag.append(penbox)print(schoolbag) #輸出schoolbag任務(wù)二【參考代碼】【運(yùn)行結(jié)果】程序運(yùn)行結(jié)果如圖4-12所示。圖4-12例4-10程序運(yùn)行結(jié)果任務(wù)二【程序說明】使用extend()方法時(shí),是將workbook看作一個(gè)序列,將這個(gè)序列和schoolbag序列合并,因此,添加元素后,schoolbag中包含了6個(gè)元素。使用append()方法時(shí),是將penbox看作一個(gè)對象,整體打包添加到schoolbag列表中,因此,添加元素后schoolbag中包含了7個(gè)元素,其中第7個(gè)元素是一個(gè)列表。(3)insert()方法:將指定對象插入到列表的指定位置,其語法格式如下。

ist.insert(index,obj)其中,list表示列表,index表示插入的索引位置,obj表示插入列表中的對象。例如:number=[1,2,4,5] #創(chuàng)建列表number并賦值number.insert(2,3)#使用insert()方法將元素3添加到列表索引為2的位置print(number) #輸出number,結(jié)果為[1,2,3,4,5]2.刪除元素

在列表中,刪除元素的常用方法有3種,分別是del命令、pop()方法和remove()方法。(1)del命令:根據(jù)索引刪除列表中的元素。例如:任務(wù)二number=[1,2,3,4,5]

#創(chuàng)建列表number并賦值delnumber[2] #使用del命令刪除number中索引為2的元素print(number) #輸出number,結(jié)果為[1,2,4,5]del命令還可以使用分片的方式刪除列表中的元素。例如:number=[1,2,3,4,5]

#創(chuàng)建列表number并賦值delnumber[1:3] #使用del命令刪除索引從1到3(不含)的元素print(number) #輸出number,結(jié)果為[1,4,5](2)pop()方法:根據(jù)索引刪除列表中的元素,并返回該元素的值,其語法格式如下。任務(wù)二

list.pop([index])

其中,list表示列表,index表示刪除列表元素的索引值,為可選參數(shù),缺省時(shí)為?1,刪除列表中的最后一個(gè)元素。例如:number=[1,2,3,4,5] #創(chuàng)建列表number并賦值number.pop() #使用pop()方法刪除number中的元素,返回值為5print(number) #輸出number,結(jié)果為[1,2,3,4]number.pop(0)#使用pop()方法刪除number中索引為0的元素,返回值為1print(number) #輸出number,結(jié)果為[2,3,4](3)remove()方法:刪除列表中某個(gè)值的第一個(gè)匹配項(xiàng),其語法格式如下。任務(wù)二

list.remove(obj)其中,list表示列表,obj表示列表中要刪除的對象。#創(chuàng)建書包列表schoolbag并賦值schoolbag=['語文書','數(shù)學(xué)書','英語書','漫畫書']print(schoolbag) #輸出schoolbagschoolbag.pop(2) #使用pop()方法刪除索引為2的元素“英語書”print(schoolbag) #輸出schoolbagschoolbag.remove('漫畫書') #使用remove()方法刪除元素“漫畫書”print(schoolbag) #輸出schoolbag【例

4-11】從書包中拿走英語書和漫畫書?!締栴}分析】使用pop()方法刪除“英語書”,使用remove()方法刪除“漫畫書”?!緟⒖即a】(2)extend()方法:在列表末尾一次性添加另一個(gè)序列中的多個(gè)值(用新列表擴(kuò)展原來的列表),其語法格式如下。任務(wù)二【例

4-10】在書包中再放入練習(xí)冊和筆盒?!締栴}分析】創(chuàng)建書包列表schoolbag、練習(xí)冊列表workbook和筆盒列表penbox,其中,workbook包含語文練習(xí)冊和數(shù)學(xué)練習(xí)冊,penbox包含鉛筆、油筆和橡皮。使用extend()方法將workbook列表添加到schoolbag中,使用append()方法將penbox添加到schoolbag中?!緟⒖即a】##創(chuàng)建書包列表schoolbag并賦值schoolbag=['語文書','數(shù)學(xué)書','英語書','漫畫書']print(schoolbag) #輸出schoolbag#創(chuàng)建練習(xí)冊列表workbook并賦值workbook=['語文練習(xí)冊','數(shù)學(xué)練習(xí)冊']penbox=['鉛筆','油筆','橡皮'] #創(chuàng)建筆盒列表penbox并賦值任務(wù)二【運(yùn)行結(jié)果】程序運(yùn)行結(jié)果如圖4-13所示。圖4-13例4-11程序運(yùn)行結(jié)果remove()方法只能刪除列表中第一個(gè)匹配的元素,如果要刪除所有匹配的元素,就需要搭配循環(huán)語句實(shí)現(xiàn)。3.分片賦值

分片賦值就是以分片的形式給列表賦值,可以一次為多個(gè)元素賦值。例如:任務(wù)二number=[1,2,3,4] #創(chuàng)建列表number并賦值print(number) #輸出number,結(jié)果為[1,2,3,4]number[2:]=[5,6,7] #替換索引從2開始到最后的元素print(number) #輸出number,結(jié)果為[1,2,5,6,7]分片賦值還可以在不替換任何原有元素的情況下插入新的元素。number=[1,7] #創(chuàng)建列表number并賦值#在number中索引為1的位置插入列表[2,3,4,5,6]中的元素number[1:1]=[2,3,4,5,6]print(number) #輸出number,結(jié)果為[1,2,3,4,5,6,7]

分片賦值也可以刪除元素。任務(wù)二number=[1,2,3,4,5,6,7] #創(chuàng)建列表并賦值number[1:6]=[] #用空列表替換number中索引1到索引6(不含)的元素print(number) #輸出number,結(jié)果為[1,7]

list.reverse()4.列表排序

將列表中的元素排序的方法有3種,分別是reverse()方法、sort()方法和sorted()函數(shù)。(1)reverse()方法:將列表中的元素反向存放,其語法格式如下。其中,list表示列表,該方法沒有參數(shù),沒有返回值。例如:

任務(wù)二number=[1,2,3,4] #創(chuàng)建列表number并賦值number.reverse() #使用reverse()方法將number中的元素反向存放print(number) #輸出number,結(jié)果為[4,3,2,1]

list.sort([key=None][,reverse=False])

(2)sort()方法:將列表中的元素進(jìn)行排序(默認(rèn)為升序排序),其語法格式如下。其中,list表示列表;key為可選參數(shù),如果指定了該參數(shù),會使用該參數(shù)的方法進(jìn)行排序;reverse為可選參數(shù),表示是否降序排序,缺省時(shí)為False?!纠?/p>

4-12】將數(shù)字從大到小排序,將英文單詞從短到長排序。任務(wù)二【問題分析】降序排序須指定參數(shù)reverse為True,要以序列內(nèi)元素的長度來排序,須使用參數(shù)key指定排序依據(jù)為len()函數(shù)。【參考代碼】#創(chuàng)建數(shù)字列表number并賦值number=[5,6,9,3,12,15,18,20,35,62]number.sort(reverse=True) #使用sort()方法對number降序排序print(number) #輸出number#創(chuàng)建英文單詞列表words并賦值words=['chicken','fox','duck','dog','rabbit','sheep']words.sort(key=len) #使用sort()方法對words按長度升序排序print(words) #輸出words任務(wù)二【運(yùn)行結(jié)果】程序運(yùn)行結(jié)果如圖4-14所示。圖4-14例4-12程序運(yùn)行結(jié)果

(3)sorted()函數(shù):與sort()方法不同,內(nèi)置函數(shù)sorted()返回新列表,并不對原列表進(jìn)行任何修改,其語法格式如下。

sorted(iterable[,key=None][,reverse=False])其中,iterable表示可迭代對象,如列表;參數(shù)key和reverse的用法與sort()方法中的相同。例如:任務(wù)二number=[1,5,2,3,4] #創(chuàng)建列表number并賦值#將number中的元素升序排序后賦給變量number_newnumber_new=sorted(number)print(number) #輸出number,結(jié)果為[1,5,2,3,4]print(number_new) #輸出number_new,結(jié)果為[1,2,3,4,5]任務(wù)實(shí)施完成本任務(wù),須首先定義空列表,用于保存隨機(jī)生成的不重復(fù)的雙色球號碼;接著循環(huán)生成1~33的隨機(jī)數(shù),由于紅球號碼要互不相同,故須判斷該隨機(jī)數(shù)是否在列表中,如果不在,則添加到列表中,直到列表的長度等于6;然后隨機(jī)生成一個(gè)1~16的隨機(jī)數(shù),添加到列表中;最后遍歷并輸出列表中的雙色球號碼。開發(fā)“詩詞大會”游戲任

務(wù)

《中國詩詞大會》是一檔文化類演播室益智競賽節(jié)目,競賽形式多樣,如選擇、填空、詩詞識別、飛花令、詩詞接龍等。本任務(wù)將帶領(lǐng)大家編寫Python程序,利用字典設(shè)計(jì)題庫,開發(fā)簡單的“詩詞大會”游戲。任務(wù)三開發(fā)“詩詞大會”游戲任務(wù)描述知識鏈接

字典是Python中常用的一種數(shù)據(jù)存儲結(jié)構(gòu),它由“鍵-值”對組成,表示一種映射關(guān)系,每個(gè)“鍵-值”對稱為一個(gè)元素。其中,“鍵”可以是Python中任意不可變數(shù)據(jù)類型,如數(shù)字、字符串、元組等,但不能是列表、集合、字典等可變數(shù)據(jù)類型;“值”可以是任意數(shù)據(jù)類型。字典任務(wù)三詩

美《中國詩詞大會》是繼《中國漢字聽寫大會》《中國成語大會》《中國謎語大會》之后,為貫徹落實(shí)習(xí)近平總書記關(guān)于弘揚(yáng)中華優(yōu)秀傳統(tǒng)文化的指示精神,為讓古代經(jīng)典詩詞,深深印在國民大眾的腦子里,成為“中華民族文化基因”,而由央視科教頻道推出的一檔文化類演播室益智競賽節(jié)目?!吨袊娫~大會》以“賞中華詩詞,尋文化基因,品生活之美”為宗旨,通過演播室比賽的形式,重溫經(jīng)典詩詞,繼承和發(fā)揚(yáng)中華優(yōu)秀傳統(tǒng)文化,帶動全民重溫那些曾經(jīng)學(xué)過的古詩詞,分享詩詞之美,感受詩詞之趣。#創(chuàng)建字典stu_infostu_info={'num':'20210101','name':'小藍(lán)','age':10}

直接賦值創(chuàng)建字典的語法格式如下。

字典的元素放在大括號中,元素之間用逗號分隔,“鍵”與“值”之間用冒號分隔。例如,創(chuàng)建一個(gè)學(xué)生信息字典,包括學(xué)生學(xué)號、姓名和年齡3個(gè)元素,可以用下面代碼實(shí)現(xiàn)。1.直接賦值創(chuàng)建字典一、字典的創(chuàng)建任務(wù)三

變量名={鍵1:值1,鍵2:值2,鍵3:值3,……}#直接賦值創(chuàng)建字典stu_info1={'num':'20210101','name':'小藍(lán)','age':10}#通過其他字典創(chuàng)建stu_info2=dict(stu_info1)#通過“(鍵,值)”對的列表創(chuàng)建stu_info3=dict([('num','20210101'),('name','小藍(lán)'),('age',10)])#通過關(guān)鍵字參數(shù)創(chuàng)建stu_info4=dict(num='20210101',name='小藍(lán)',age=10)#通過dict和zip結(jié)合創(chuàng)建stu_info5=dict(zip(['num','name','age'],['20210101','小藍(lán)',10]))

使用內(nèi)置函數(shù)dict()可通過其他字典、“(鍵,值)”對的序列或關(guān)鍵字參數(shù)來創(chuàng)建字典。例如,通過下面5種方式使用dict()函數(shù)可創(chuàng)建相同的字典。

2.使用內(nèi)置函數(shù)dict()創(chuàng)建字典任務(wù)三任務(wù)三zip()函數(shù)將可迭代的對象作為參數(shù),將對象中對應(yīng)的元素打包成一個(gè)個(gè)元組,然后返回由這些元組組成的zip對象。例如:list_str=['a','b','c','d'] #創(chuàng)建列表并賦值list_num=[1,2,3,4] #創(chuàng)建列表并賦值list_new=zip(list_str,list_num) #打包為元組組成的zip對象#用list()函數(shù)轉(zhuǎn)換為列表輸出,結(jié)果為[('a',1),('b',2),('c',3),('d',4)]print(list(list_new))#創(chuàng)建字典,“值”默認(rèn)為Nonestu_age1=dict.fromkeys(['小藍(lán)','小舞'])#輸出stu_age1,結(jié)果為{'小藍(lán)':None,'小舞':None}print(stu_age1)#創(chuàng)建字典,“值”賦為10stu_age2=dict.fromkeys(['小藍(lán)','小舞'],10)#輸出stu_age2,結(jié)果為{'小藍(lán)':10,'小舞':10}print(stu_age2)

在Python中,當(dāng)所有鍵對應(yīng)同一個(gè)值時(shí),可使用fromkeys()方法創(chuàng)建字典,其語法格式如下。

3.使用fromkeys()方法創(chuàng)建字典任務(wù)三

dict.fromkeys(seq[,value])其中,seq為字典的“鍵”的列表;value為鍵對應(yīng)的同一值,缺省時(shí)默認(rèn)為None。例如:任務(wù)三字典中的“鍵”是唯一的,創(chuàng)建字典時(shí)若出現(xiàn)“鍵”相同的情況,則后定義的“鍵-值”對將覆蓋先定義的“鍵-值”對。例如:x={'a':1,'b':2,'b':'3'} #直接賦值創(chuàng)建字典xprint(x) #輸出字典x,結(jié)果為{'a':1,'b':'3'}#創(chuàng)建字典stu_info={'num':'20210101','name':'小藍(lán)','age':10}stu_info['num'] #根據(jù)num獲取學(xué)號,結(jié)果為“20210101”stu_info['name'] #根據(jù)name獲取姓名,結(jié)果為“小藍(lán)”

字典中的“鍵”可作為下標(biāo)訪問對應(yīng)的“值”,如果字典中不存在這個(gè)“鍵”則會拋出異常,其語法格式如下。

1.根據(jù)鍵訪問值二、字典的訪問任務(wù)三

dict[key]

其中,dict表示字典名,key表示要查找的鍵。例如:#stu_info.get('name') #使用get()方法獲取學(xué)生姓名,結(jié)果為“小藍(lán)”stu_info.get('sex') #使用get()方法獲取學(xué)生性別,返回值為Nonestu_info.get('sex','女')#設(shè)置返回默認(rèn)值為“女”,返回值為“女”

在訪問字典時(shí),若不確定字典中是否有某個(gè)鍵,可通過get()方法獲取,若該鍵存在,則返回其對應(yīng)的值,若不存在,則返回默認(rèn)值,其語法格式如下。

2.使用get()方法訪問值任務(wù)三

dict.get(key[,default=None])

其中,dict表示字典名;key表示要查找的鍵;default表示默認(rèn)值,如果指定鍵的值不存在,返回該默認(rèn)值,當(dāng)default缺省時(shí),返回None。例如,使用get()方法訪問前面定義的stu_info字典,可以用下面代碼實(shí)現(xiàn)。任務(wù)三【例4-13】創(chuàng)建中英文字典,根據(jù)輸入的中文詞組輸出對應(yīng)的英文單詞?!締栴}分析】創(chuàng)建兩個(gè)列表分別保存中文詞組(鍵)和英文單詞(值),要求兩個(gè)列表一一對應(yīng);然后通過dict()和zip()函數(shù)創(chuàng)建字典;最后根據(jù)輸入的中文詞組,使用get()方法獲取對應(yīng)的值并輸出?!緟⒖即a】#創(chuàng)建中文詞組列表chinesechinese=['卷心菜','午餐','機(jī)器人','天空','花']#創(chuàng)建英文單詞列表englishenglish=['cabbage','lunch','robot','sky','flower']#使用dict()和zip()方法生成字典dictionary=dict(zip(chinese,english))word=input('請輸入中文詞組:') #輸入中文詞組,并賦給wordprint(dictionary.get(word)) #使用get()方法獲取word的值并輸出任務(wù)三。

圖4-16例4-13程序運(yùn)行結(jié)果【運(yùn)行結(jié)果】

程序運(yùn)行結(jié)果如圖4-16所示。#創(chuàng)建字典stu_info={'num':'20210101','name':'小藍(lán)','age':10}stu_info['age']=11 #修改age的值print(stu_info['age']) #輸出修改后的age值,結(jié)果為11stu_info['sex']='女' #添加學(xué)生性別#輸出添加后的字典,結(jié)果為{'num':'20210101','name':'小藍(lán)','age':11,'sex':'女'}print(stu_info)當(dāng)以指定“鍵”為下標(biāo)給字典元素賦值時(shí),有下面兩種含義。(1)若該“鍵”在字典中存在,則表示修改該“鍵”對應(yīng)的值。(2)若該“鍵”不存在,則表示添加一個(gè)新的“鍵-值”對,即添加一個(gè)新元素到字典中。例如:

與列表相似,Python也提供了大量方法用于字典元素的修改、添加、刪除、更新、復(fù)制等操作。1.修改和添加元素三、字典的基本操作任務(wù)三#創(chuàng)建字典stu_info={'num':'20210101','name':'小藍(lán)','age':10}delstu_info['age'] #刪除age“鍵-值”對#輸出刪除后的字典,結(jié)果為{'num':'20210101','name':'小藍(lán)'}print(stu_info)要刪除字典中的元素或整個(gè)字典,可以使用del命令、clear()方法、pop()方法或popitem()方法。(1)del命令:根據(jù)“鍵”刪除字典中的元素,例如:

2.刪除元素任務(wù)三(2)clear()方法:刪除字典中的所有元素,其語法格式如下。

dict.clear()#創(chuàng)建字典stu_info={'num':'20210101','name':'小藍(lán)','age':10}stu_info.clear() #清空字典print(stu_info) #輸出清空后的字典,結(jié)果為{}其中,dict表示字典名。該方法不包含任何參數(shù),也沒有返回值。例如:任務(wù)三(3)pop()方法:刪除指定的“鍵-值”對,并返回該“鍵”的值,其語法格式如下。

dict.pop(key[,default])其中,dict表示字典名;key表示刪除的鍵;default是默認(rèn)值,當(dāng)字典中沒有要刪除的key時(shí),該方法返回指定的默認(rèn)值。例如:#創(chuàng)建字典stu_info={'num':'20210101','name':'小藍(lán)','age':10}stu_info.pop('age') #刪除age“鍵-值”對,并返回age的值10stu_info.pop('age',11) #無指定鍵,返回默認(rèn)值11任務(wù)三(4)popitem()方法:隨機(jī)刪除并返回一個(gè)“鍵-值”對,其語法格式如下。

dict.popitem()其中,dict表示字典名。該方法無參數(shù),返回值為一個(gè)隨機(jī)的“鍵-值”對。例如:#創(chuàng)建字典stu_info={'num':'20210101','name':'小藍(lán)','age':10}stu_info.popitem() #隨機(jī)刪除并返回某“鍵-值”對,如('age',10)#輸出字典,結(jié)果為{'num':'20210101','name':'小藍(lán)'}print(stu_info)

dict.update(dict1)update()方法用于將新字典的“鍵-值”對一次性全部添加到當(dāng)前字典中,如果兩個(gè)字典中存在相同的“鍵”,則以新字典中的“值”更新當(dāng)前字典,其語法格式如下。

3.更新字典任務(wù)三其中,dict表示當(dāng)前字典,dict1表示新字典。例如:

#創(chuàng)建字典stu_infostu_info={'num':'20210101','name':'小藍(lán)','age':10}#修改age的值,同時(shí)添加新元素stu_info.update({'age':11,'sex':'女'})#輸出字典,結(jié)果為{'num':'20210101','name':'小藍(lán)','age':11,'sex':'女'}print(stu_info)任務(wù)三【例4-14】更新中英文字典?!緟⒖即a】dictionary={'卷心菜':'cabbage','午餐':'lunch','機(jī)器人':'robot','天空':'sky','花':'flower'}

#創(chuàng)建字典dictionary并賦值print(dictionary)

#輸出dictionarydictionary.pop('卷心菜')

#刪除“卷心菜”鍵-值對print(dictionary)

#輸出dictionary#添加新字典dictionary.update({'公園':'park','橋':'bridge'})print(dictionary)

#輸出dictionarydictionary['午餐']=['lunch','nooning']

#修改“午餐”的值print(dictionary)

#輸出dictionary任務(wù)三。

圖4-17例4-14程序運(yùn)行結(jié)果【運(yùn)行結(jié)果】

程序運(yùn)行結(jié)果如圖4-17所示。

dict.copy()復(fù)制字典可使用copy()方法,返回字典的淺復(fù)制,其語法格式如下。

4.復(fù)制字典任務(wù)三

其中,dict表示需要復(fù)制的字典,該方法無參數(shù),返回一個(gè)新字典。例如:#創(chuàng)建字典stu_infostu_info={'num':'20210101','name':'小藍(lán)','age':10}stu_info1=stu_info.copy() #復(fù)制stu_info,并賦給stu_info1#輸出stu_info1,結(jié)果為{'num':'20210101','name':'小藍(lán)','age':10}print(stu_info1)任務(wù)三。

在Python中,可使用3種方法復(fù)制字典:直接賦值、淺復(fù)制和深復(fù)制。

(1)直接賦值:復(fù)制對象的引用。

(2)淺復(fù)制:使用copy()方法復(fù)制父對象及其子對象的引用。

(3)深復(fù)制:使用deepcopy()方法完全復(fù)制父對象及其子對象,此方法包含在copy模塊中。任務(wù)三【例4-15】使用直接賦值、淺復(fù)制和深復(fù)制3種方法復(fù)制中英文字典?!緟⒖即a】importcopy #導(dǎo)入copy模塊#創(chuàng)建字典dictionary并賦值dictionary={'卷心菜':'cabbage','午餐':['lunch','nooning']}dictionary1=dictionary #直接賦值dictionary2=dictionary.copy() #淺復(fù)制dictionary3=copy.deepcopy(dictionary)

#深復(fù)制#將dictionary中鍵為“卷心菜”的值改為“pamphrey”dictionary['卷心菜']='pamphrey'#移除dictionary中鍵為“午餐”的值列表中的“nooning”dictionary['午餐'].remove('nooning')print('dictionary=',dictionary)

#輸出dictionaryprint('dictionary1=',dictionary1)

#輸出dictionary1print('dictionary2=',dictionary2) #輸出dictionary2print('dictionary3=',dictionary3) #輸出dictionary3任務(wù)三。

圖4-18例4-15程序運(yùn)行結(jié)果【運(yùn)行結(jié)果】

程序運(yùn)行結(jié)果如圖4-18所示。任務(wù)三。

圖4-19直接賦值示意圖【程序說明】

“dictionary1=dictionary”是直接賦值,dictionary和dictionary1都指向同一個(gè)對象,如圖4-19所示。因此,修改dictionary中的任何一個(gè)值,dictionary1中也會隨之改變。任務(wù)三。

圖4-20淺復(fù)制示意圖

“dictionary2=dictionary.copy()”是淺復(fù)制,dictionary和dictionary2分別是獨(dú)立的對象,但它們的子對象還是指向同一對象,如圖4-20所示。因此,修改“dictionary['卷心菜']='pamphrey'”不會改變dictionary2中的值,但修改dictionary中的子對象“dictionary['午餐'].remove('nooning')”時(shí),dictionary2也會隨之改變。任務(wù)三。

圖4-20淺復(fù)制示意圖

“dictionary3=copy.deepcopy(dictionary)”是深復(fù)制,dictionary3完全復(fù)制了父對象及其子對象,它和dictionary是完全獨(dú)立的,如圖4-21所示。因此,修改dictionary中的任何一個(gè)值,dictionary3中的值都不會隨之改變。

dict.items()

使用item()方法可遍歷字典中所有的“鍵-值”對,該方法以dict_items形式返回可遍歷的“(鍵,值)”元組,其語法格式如下。

當(dāng)字典包含大量元素時(shí),可使用遍歷的方法對元素進(jìn)行訪問,遍歷字典有以下3種方法。1.遍歷字典中所有的“鍵-值”對四、字典的遍歷任務(wù)三其中,dict表示字典。2.遍歷字典中所有的鍵當(dāng)不需要使用字典中的值時(shí),可使用keys()方法只遍歷字典中的鍵,該方法以dict_keys形式返回字典中所有的鍵,其語法格式如下。

dict.values()

當(dāng)只需要使用字典中的值時(shí),可使用values()方法,該方法以dict_values形式返回字典中所有的值,其語法格式如下。

其中,dict表示字典名。3.遍歷字典中所有的值任務(wù)三其中,dict表示字典。

dict.keys()dict_items、dict_keys和dict_values是Python的內(nèi)部數(shù)據(jù)類型,專用于表示字典的鍵值對、鍵和值,可使用list()函數(shù)將其轉(zhuǎn)換為列表。任務(wù)三【例4-16】輸出中英文字典中所有的中文詞組及其對應(yīng)的英文單詞、中文詞組和英文單詞?!緟⒖即a】dictionary={'卷心菜':'cabbage','午餐':'lunch','機(jī)器人':'robot','天空':'sky','花':'flower'} #創(chuàng)建字典dictionary并賦值print('中英文字典中所有中文詞組及其對應(yīng)的英文單詞:')foritemindictionary.items():

#遍歷字典所有的“鍵-值”對print(item)

#輸出每個(gè)“鍵-值”對print('中英文字典中所有中文詞組:')forchineseindictionary.keys():

#遍歷字典所有的鍵print(chinese,end='')

#輸出每個(gè)鍵print('\n中英文字典中所有英文單詞:')forenglishindictionary.values():

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論