Python數(shù)據(jù)分析、挖掘與可視化(慕課版)電子教案(參考)_第1頁
Python數(shù)據(jù)分析、挖掘與可視化(慕課版)電子教案(參考)_第2頁
Python數(shù)據(jù)分析、挖掘與可視化(慕課版)電子教案(參考)_第3頁
Python數(shù)據(jù)分析、挖掘與可視化(慕課版)電子教案(參考)_第4頁
Python數(shù)據(jù)分析、挖掘與可視化(慕課版)電子教案(參考)_第5頁
已閱讀5頁,還剩218頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

山東工商學(xué)院教案學(xué)院(部):計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院適用學(xué)期:課程名稱Python數(shù)據(jù)分析、挖掘與可視化課程代碼學(xué)時(shí)分配總學(xué)時(shí):64學(xué)分講授:48課程類別必修課(是)選修課()實(shí)驗(yàn):16授課專業(yè)授課班級(jí)課堂討論:任課教師職稱習(xí)題課:所選教材《Python數(shù)據(jù)分析、挖掘與可視化》,董付國(guó),人民郵電出版社線上:20本課程教學(xué)目的與要求通過本課程的學(xué)習(xí),使得學(xué)生能夠理解Python的編程模式,熟練運(yùn)用Python內(nèi)置函數(shù)與運(yùn)算符、列表、元組、字典、集合等基本數(shù)據(jù)類型以及相關(guān)列表推導(dǎo)式、切片、序列解包等語法來解決實(shí)際問題,熟練掌握Python分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、函數(shù)設(shè)計(jì)以及類的設(shè)計(jì)與使用,掌握numpy數(shù)組運(yùn)算和矩陣運(yùn)算、pandas基本數(shù)據(jù)結(jié)構(gòu)以及數(shù)據(jù)分析與處理、機(jī)器學(xué)習(xí)基本算法原理以及sklearn實(shí)現(xiàn)、matplotlib數(shù)據(jù)可視化與科學(xué)計(jì)算可視化。能夠根據(jù)問題性質(zhì)和特點(diǎn)選擇合適的機(jī)器學(xué)習(xí)算法,能夠根據(jù)數(shù)據(jù)特點(diǎn)選擇合適的可視化方式。本課程教學(xué)重點(diǎn)與難點(diǎn)Python數(shù)據(jù)分析、挖掘與可視化環(huán)境的搭建、相關(guān)擴(kuò)展庫的安裝與配置;Python程序設(shè)計(jì)基礎(chǔ)快速入門;numpy數(shù)組運(yùn)算與矩陣運(yùn)算;pandas數(shù)據(jù)分析與處理;機(jī)器學(xué)習(xí)算法原理與sklearn應(yīng)用;matplotlib數(shù)據(jù)可視化應(yīng)用。參考書目董付國(guó).《Python程序設(shè)計(jì)(第3版)》,清華大學(xué)出版社,2020董付國(guó).《Python程序設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)書》,清華大學(xué)出版社,2018董付國(guó).《Python程序設(shè)計(jì)基礎(chǔ)(第2版)》,清華大學(xué)出版社,2018董付國(guó).《Python程序設(shè)計(jì)基礎(chǔ)與應(yīng)用》,清華大學(xué)出版社,2018董付國(guó).《Python可以這樣學(xué)》,清華大學(xué)出版社,2017董付國(guó).《Python程序設(shè)計(jì)開發(fā)寶典》,清華大學(xué)出版社,2017

山東工商學(xué)院教案本次授課內(nèi)容1.1Python開發(fā)環(huán)境搭建與使用1.2Python編碼規(guī)范1.3標(biāo)準(zhǔn)庫、擴(kuò)展庫對(duì)象的導(dǎo)入與使用本次課的教學(xué)目的熟練掌握Python開發(fā)環(huán)境的搭建與使用。了解Python編碼規(guī)范。理解病熟練掌握標(biāo)準(zhǔn)庫與擴(kuò)展庫對(duì)象的導(dǎo)入與使用。本次課教學(xué)重點(diǎn)與難點(diǎn)系統(tǒng)環(huán)境變量path的設(shè)置,安裝擴(kuò)展庫??s進(jìn)對(duì)業(yè)務(wù)邏輯的影響,變量命名規(guī)則。導(dǎo)入標(biāo)準(zhǔn)庫與擴(kuò)展庫對(duì)象的幾種形式及其區(qū)別。教學(xué)方法教學(xué)手段PPT、邊講邊練、線上線下結(jié)合課堂教學(xué)時(shí)間分配教學(xué)內(nèi)容時(shí)間分配(分)課前線上自學(xué)>60Anaconda3安裝、擴(kuò)展庫安裝20JupyterNotebook與Spyder簡(jiǎn)單使用15Python編碼規(guī)范10標(biāo)準(zhǔn)庫、擴(kuò)展庫對(duì)象的導(dǎo)入與使用25練習(xí)、答疑20課堂教學(xué)設(shè)計(jì)簡(jiǎn)要介紹常用Python開發(fā)環(huán)境。演示Anaconda3軟件的安裝。講解和演示擴(kuò)展庫安裝方法與注意事項(xiàng)。簡(jiǎn)單演示IDLE、JupyterNotebook、Spyder的使用。簡(jiǎn)單介紹Python編碼規(guī)范,演示代碼縮進(jìn)的重要性。講解和演示標(biāo)準(zhǔn)庫對(duì)象與擴(kuò)展庫對(duì)象的導(dǎo)入與使用。練習(xí)、答疑。實(shí)驗(yàn)安裝Anaconda32020.2或2020.7。安裝或升級(jí)擴(kuò)展庫python-docx、openpyxl、numpy、jieba、pandas、pypinyin、matplotlib。思考題及作業(yè)題描述Python標(biāo)準(zhǔn)庫和擴(kuò)展庫文件所在文件夾結(jié)構(gòu)。備注教學(xué)后記課堂重點(diǎn)內(nèi)容詳解第一節(jié)課1.1.1IDLEIDLE是Python安裝包自帶的開發(fā)環(huán)境,沒有集成任何擴(kuò)展庫,也不具備強(qiáng)大的項(xiàng)目管理功能,如果用來開發(fā)大型系統(tǒng)的話,需要花費(fèi)較多的時(shí)間在環(huán)境配置和項(xiàng)目管理上,對(duì)用戶綜合能力的要求非常高。圖1-1安裝Python之后的開始菜單打開之后看到的界面就是IDLE默認(rèn)的交互式開發(fā)環(huán)境,圖1-2展示了Python3.7IDLE的交互式開發(fā)環(huán)境界面,其他版本與此基本類似。圖1-2IDLE交互式開發(fā)環(huán)境界面為了便于反復(fù)修改和長(zhǎng)期保存代碼,經(jīng)常需要?jiǎng)?chuàng)建程序文件,可以在IDLE中單擊菜單“File”==>“NewFile”,輸入代碼之后將其保存為擴(kuò)展名為.py或.pyw的文件,注意文件名不要和標(biāo)準(zhǔn)庫或已安裝的擴(kuò)展庫文件名相同,否則會(huì)影響代碼運(yùn)行甚至無法啟動(dòng)Python解釋器。保存后按F5鍵或單擊菜單“Run”==>“RunModule”運(yùn)行程序,然后結(jié)果會(huì)顯示到交互式窗口中,如圖1-3所示。圖1-3使用IDLE編寫和運(yùn)行Python程序1.1.2Anaconda3Anaconda3支持Windows、Linux和MacOS,主要提供了JupyterNotebook和Spyder兩個(gè)開發(fā)環(huán)境,自帶大量常用擴(kuò)展庫,得到了廣大初學(xué)者和教學(xué)、科研人員的喜愛。圖1-4開始菜單圖1-5JupyterNotebook主頁面右上角菜單(1)JupyterNotebook圖1-6JupyterNotebook運(yùn)行界面(2)Spyder圖1-7Spyder運(yùn)行界面1.1.3安裝擴(kuò)展庫庫或包一般指包含若干模塊的文件夾,模塊指一個(gè)包含若干函數(shù)定義、類定義或常量的Python源程序文件。標(biāo)準(zhǔn)的Python安裝包只包含了內(nèi)置模塊和標(biāo)準(zhǔn)庫,沒有包含任何擴(kuò)展庫,開發(fā)人員可以根據(jù)實(shí)際需要再安裝和使用合適的擴(kuò)展庫。Python自帶的pip工具是管理擴(kuò)展庫的主要方式,支持Python擴(kuò)展庫的安裝、升級(jí)和卸載等操作。常用pip命令的使用方法如表1-1所示。表1-1常用pip命令使用方法pip命令示例說明pipfreeze列出已安裝模塊及其版本號(hào)pipinstallSomePackage[==version]在線安裝SomePackage模塊,可以使用方括號(hào)內(nèi)的形式指定擴(kuò)展庫版本pipinstallSomePackage.whl通過whl文件離線安裝擴(kuò)展庫pipinstall--upgradeSomePackage升級(jí)SomePackage模塊pipuninstallSomePackage卸載SomePackage模塊第二節(jié)課1.2Python編碼規(guī)范一個(gè)好的Python代碼不僅應(yīng)該是正確的,還應(yīng)該是漂亮的、優(yōu)雅的,讀起來賞心悅目。代碼布局和排版在很大程度上決定了可讀性的好壞,變量名、函數(shù)名、類名等標(biāo)識(shí)符名稱也會(huì)對(duì)代碼可讀性帶來一定的影響,而編寫優(yōu)雅代碼則需要長(zhǎng)期的練習(xí)才能具有相應(yīng)的功底和能力。(1)縮進(jìn)Python對(duì)代碼縮進(jìn)是硬性要求,嚴(yán)格使用縮進(jìn)來體現(xiàn)代碼的邏輯從屬關(guān)系。一般以4個(gè)空格為一個(gè)縮進(jìn)單位,并且相同級(jí)別的代碼塊應(yīng)具有相同的縮進(jìn)量。(2)空格與空行在每個(gè)類、函數(shù)定義或一段完整的功能代碼之后增加一個(gè)空行,在運(yùn)算符兩側(cè)各增加一個(gè)空格,逗號(hào)后面增加一個(gè)空格,讓代碼適當(dāng)松散一點(diǎn),不要過于密集。(3)標(biāo)識(shí)符命名在Python中定義變量名和函數(shù)名的時(shí)候,應(yīng)該遵守下面的規(guī)范。必須以英文字母、漢字或下劃線開頭。名字中可以包含漢字、英文字母、數(shù)字和下畫線,不能有空格或任何標(biāo)點(diǎn)符號(hào)。不能使用關(guān)鍵字,例如yield、lambda、def、else、for、break、if、while、try、return這樣的變量名都是非法的。對(duì)英文字母的大小寫敏感,例如student和Student是不同的變量。不建議使用系統(tǒng)內(nèi)置的模塊名、類型名或函數(shù)名以及已導(dǎo)入的模塊名及其成員名作變量名或者自定義函數(shù)名,例如type、max、min、len、list這樣的變量名都是不建議作為變量名的,也不建議使用math、random、datetime、re或其他內(nèi)置模塊和標(biāo)準(zhǔn)庫的名字作為變量名或者自定義函數(shù)名。(4)續(xù)行盡量不要寫過長(zhǎng)的語句,應(yīng)盡量保證一行代碼不超過屏幕寬度(并且一般建議一個(gè)函數(shù)不超過一個(gè)屏幕的高度)。如果語句確實(shí)太長(zhǎng)而超過屏幕寬度,最好在行尾使用續(xù)行符“\”表示下一行代碼仍屬于本條語句,或者使用圓括號(hào)把多行代碼括起來表示是一條語句。例如下面的代碼:expression1=1+2+3\#使用\作為續(xù)行符+4+5expression2=(1+2+3#把多行表達(dá)式放在圓括號(hào)中表示是一條語句+4+5)(5)注釋對(duì)關(guān)鍵代碼和重要的業(yè)務(wù)邏輯代碼進(jìn)行必要的注釋,方便代碼的閱讀和維護(hù)。在Python中有兩種常用的注釋形式:#和三引號(hào)。井號(hào)#用于單行注釋,表示本行中#符號(hào)之后的內(nèi)容不作為代碼運(yùn)行;三引號(hào)常用于大段說明性文本的注釋,也可以用于界定包含換行符的長(zhǎng)字符串。(6)圓括號(hào)圓括號(hào)除了用來表示多行代碼為一條語句,還常用來修改表達(dá)式計(jì)算順序或者增加代碼可讀性避免歧義。1.3標(biāo)準(zhǔn)庫、擴(kuò)展庫對(duì)象的導(dǎo)入與使用1.3.1import模塊名[as別名]importmathimportrandomimportposixpathaspathprint(math.sqrt(16))#計(jì)算并輸出16的平方根print(math.cos(math.pi/4))#計(jì)算余弦值print(random.choices('abcd',k=8))#從字符串'abcd'隨機(jī)選擇8個(gè)字符#允許重復(fù)print(path.isfile(r'C:\Windows\notepad.exe'))#測(cè)試指定路徑是否為文件運(yùn)行結(jié)果為:4.00.7071067811865476['d','a','d','b','a','a','d','d']True1.3.2from模塊名import對(duì)象名[as別名]frommathimportpiasPIfromos.pathimportgetsizefromrandomimportchoicer=3print(round(PI*r*r,2))#計(jì)算半徑為3的圓面積print(getsize(r'C:\Windows\notepad.exe'))#計(jì)算文件大小,單位為字節(jié)print(choice('Python'))#從字符串中隨機(jī)選擇一個(gè)字符運(yùn)行結(jié)果為:28.27245760t1.3.3from模塊名import*fromitertoolsimport*characters='1234'foritemincombinations(characters,3):#從4個(gè)字符中任選3個(gè)的組合print(item,end='')#end=''表示輸出后不換行print('\n'+'='*20)#行號(hào)后輸出20個(gè)等于號(hào)foriteminpermutations(characters,3):#從4個(gè)字符中任選3個(gè)的排列print(item,end='')運(yùn)行結(jié)果為:('1','2','3')('1','2','4')('1','3','4')('2','3','4')====================('1','2','3')('1','2','4')('1','3','2')('1','3','4')('1','4','2')('1','4','3')('2','1','3')('2','1','4')('2','3','1')('2','3','4')('2','4','1')('2','4','3')('3','1','2')('3','1','4')('3','2','1')('3','2','4')('3','4','1')('3','4','2')('4','1','2')('4','1','3')('4','2','1')('4','2','3')('4','3','1')('4','3','2')

山東工商學(xué)院教案本次授課內(nèi)容2.1常用內(nèi)置數(shù)據(jù)類型2.2運(yùn)算符與表達(dá)式本次課的教學(xué)目的了解Python常用內(nèi)置類型理解和熟練使用Python運(yùn)算符本次課教學(xué)重點(diǎn)與難點(diǎn)數(shù)字大小沒有限制,實(shí)數(shù)計(jì)算會(huì)有誤差,字典的鍵和集合中的元素不允許重復(fù)并且必須為不可變類型的數(shù)據(jù),包含一個(gè)元素的元組必須有逗號(hào)。關(guān)系運(yùn)算符可以連用,關(guān)系運(yùn)算符、成員測(cè)試運(yùn)算符和邏輯運(yùn)算符具有惰性求值的特點(diǎn),列表、元組、字符串比較大小時(shí)逐個(gè)比較其中的元素大小直至得出確定的結(jié)論,關(guān)系運(yùn)算符作用于集合時(shí)表示集合的包含關(guān)系而不關(guān)心元素大小。教學(xué)方法教學(xué)手段PPT、邊講邊練、線上線下結(jié)合課堂教學(xué)時(shí)間分配教學(xué)內(nèi)容時(shí)間分配(分)課前線上自學(xué)>60Python常用內(nèi)置類型35Python運(yùn)算符與表達(dá)式35練習(xí)、答疑20課堂教學(xué)設(shè)計(jì)講解Python常用內(nèi)置類型的概念與簡(jiǎn)單實(shí)用。講解Python表達(dá)式概念以及常用運(yùn)算符的功能與用法。練習(xí)、答疑。實(shí)驗(yàn)數(shù)值、列表、元組、字典、集合、字符串簡(jiǎn)單實(shí)用。常用運(yùn)算符功能與使用。思考題及作業(yè)題1.列表、元組、字典、集合、字符串在形式上有什么區(qū)別?2.簡(jiǎn)單描述關(guān)系運(yùn)算符與邏輯運(yùn)算符的惰性求值特點(diǎn)。備注教學(xué)后記課堂重點(diǎn)內(nèi)容詳解第一節(jié)課2.1常用內(nèi)置數(shù)據(jù)類型常用的內(nèi)置對(duì)象如表2-1所示。表2-1Python內(nèi)置對(duì)象對(duì)象類型類型名稱示例簡(jiǎn)要說明數(shù)字intfloatcomplex8888888888888888888889.8,3.14,6.626e-345+6j,5j數(shù)字大小沒有限制,且內(nèi)置支持復(fù)數(shù)及其運(yùn)算字符串str'Readabilitycounts.'"I'm

aPythonteacher."'''Tomsai,"let'sgo."'''r'C:\Windows\notepad.exe'使用單引號(hào)、雙引號(hào)、三引號(hào)作為定界符,不同定界符之間可以互相嵌套;前面加字母r或R表示原始字符串,任何字符都不進(jìn)行轉(zhuǎn)義字節(jié)串bytesb'helloworld'以字母b引導(dǎo)列表list[79,

89,

99]['a',{3},(1,2),['c',2],{65:'A'}]所有元素放在一對(duì)方括號(hào)中,元素之間使用逗號(hào)分隔,其中的元素可以是任意類型元組tuple(1,

0,

0)(0,)所有元素放在一對(duì)圓括號(hào)中,元素之間使用逗號(hào)分隔,元組中只有一個(gè)元素時(shí)后面的逗號(hào)不能省略字典dict{'red':(1,0,0),'green':(0,1,0),'blue':(0,0,1)}所有元素放在一對(duì)大括號(hào)中,元素之間使用逗號(hào)分隔,元素形式為“鍵:值”,其中“鍵”不允許重復(fù)并且必須為不可變類型,“值”可以是任意類型的數(shù)據(jù)集合set{'bread',

'beer',

'orange'}所有元素放在一對(duì)大括號(hào)中,元素之間使用逗號(hào)分隔,元素不允許重復(fù)且必須為不可變類型布爾型boolTrue,

False邏輯值,首字母必須大寫空類型NoneTypeNone空值,首字母必須大寫異常NameErrorValueErrorTypeErrorKeyErrorPython內(nèi)置異常類文件f=open('test.txt','w',encoding='utf8')Python內(nèi)置函數(shù)open()使用指定的模式打開文件,返回文件對(duì)象其他可迭代對(duì)象生成器對(duì)象、range對(duì)象、zip對(duì)象、enumerate對(duì)象、map對(duì)象、filter對(duì)象等等具有惰性求值的特點(diǎn),空間占用小,適合大數(shù)據(jù)處理2.1.1整數(shù)、實(shí)數(shù)、復(fù)數(shù)Python內(nèi)置的數(shù)字類型有整數(shù)、實(shí)數(shù)和復(fù)數(shù)。其中,整數(shù)類型除了常見的十進(jìn)制整數(shù),還有:二進(jìn)制。以0b開頭,每一位只能是0或1,例如0b10011100。八進(jìn)制。以0o開頭,每一位只能是0、1、2、3、4、5、6、7這八個(gè)數(shù)字之一,例如0o777。十六進(jìn)制。以0x開頭,每一位只能是0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f之一,其中a表示10,b表示11,以此類推,例如0xa8b9。2.1.2列表、元組、字典、集合列表、元組、字典、集合是Python內(nèi)置的容器對(duì)象,其中可以包含多個(gè)元素。這幾個(gè)類型具有很多相似的操作,但互相之間又有很大的不同。#創(chuàng)建列表對(duì)象x_list=[1,2,3]#創(chuàng)建元組對(duì)象x_tuple=(1,2,3)#創(chuàng)建字典對(duì)象,元素形式為“鍵:值”x_dict={'a':97,'b':98,'c':99}#創(chuàng)建集合對(duì)象x_set={1,2,3}#使用下標(biāo)訪問列表中指定位置的元素,元素下標(biāo)從0開始print(x_list[1])#元組也支持使用序號(hào)作為下標(biāo),1表示第二個(gè)元素的下標(biāo)print(x_tuple[1])#訪問字典中特定“鍵”對(duì)應(yīng)的“值”,字典對(duì)象的下標(biāo)是“鍵”print(x_dict['a'])#查看列表長(zhǎng)度,也就是其中元素的個(gè)數(shù)print(len(x_list))#查看元素2在元組中首次出現(xiàn)的位置print(x_tuple.index(2))#查看字典中哪些“鍵”對(duì)應(yīng)的“值”為98forkey,valueinx_dict.items():ifvalue==98:print(key)#查看集合中元素的最大值print(max(x_set))運(yùn)行結(jié)果為:229731B32.1.3字符串字符串是包含若干字符的容器對(duì)象,其中可以包含漢字、英文字母、數(shù)字和標(biāo)點(diǎn)符號(hào)等任意字符。字符串使用單引號(hào)、雙引號(hào)、三單引號(hào)或三雙引號(hào)作為定界符,其中三引號(hào)里的字符串可以換行,并且不同的定界符之間可以互相嵌套。在字符串前面加上英文字母r或R表示原始字符串,其中的每個(gè)字符都表示字面含義,不再進(jìn)行轉(zhuǎn)義。'Helloworld''這個(gè)字符串是數(shù)字"123"和字母"abcd"的組合''''Tomsaid,"Let'sgo"''''''學(xué)習(xí)就怕滿,懶,難,

心里有了滿,懶,難,不看不鉆就不前。

心里去掉滿,懶,難,邊學(xué)邊干,螞蟻也能爬泰山。'''r'C:\Windows\notepad.exe'第二節(jié)課2.2運(yùn)算符與表達(dá)式常用的Python運(yùn)算符如表2-2所示。雖然Python運(yùn)算符有一套嚴(yán)格的優(yōu)先級(jí)規(guī)則,但并不建議花費(fèi)太多精力記憶,而是應(yīng)該在編寫復(fù)雜表達(dá)式時(shí)盡量使用圓括號(hào)來明確說明其中的邏輯來提高代碼可讀性。表2-2Python運(yùn)算符運(yùn)算符功能說明+算術(shù)加法,列表、元組、字符串合并與連接,正號(hào)-算術(shù)減法,集合差集,相反數(shù)*算術(shù)乘法,序列重復(fù)/真除法//求整商,向下取整%求余數(shù)**冪運(yùn)算,指數(shù)可以為小數(shù),例如0.5表示計(jì)算平方根<、<=、>、>=、==、!=(值)大小比較,集合的包含關(guān)系比較and、or、not邏輯與、邏輯或、邏輯非in成員測(cè)試is測(cè)試兩個(gè)對(duì)象是否為同一個(gè)對(duì)象的引用|、^、&、<<、>>、~位或、位異或、位與、左移位、右移位、位求反&、|、^集合交集、并集、對(duì)稱差集2.2.1算術(shù)運(yùn)算符(1)+運(yùn)算符除了用于算術(shù)加法以外,還可以用于列表、元組、字符串的連接。print(3+5)print(3.4+4.5)print((3+4j)+(5+6j))print('abc'+'def')print([1,2]+[3,4])print((1,2)+(3,))運(yùn)行結(jié)果為:87.9(8+10j)abcdef[1,2,3,4](1,2,3)(2)-運(yùn)算符除了用于整數(shù)、實(shí)數(shù)、復(fù)數(shù)之間的算術(shù)減法和相反數(shù)之外,還可以計(jì)算集合的差集。print(7.9-4.5)#注意,結(jié)果有誤差print(5-3)num=3print(-num)print(--num)#注意,這里的--是兩個(gè)負(fù)號(hào),負(fù)負(fù)得正print(-(-num))#與上一行代碼含義相同print({1,2,3}-{3,4,5})#計(jì)算差集print({3,4,5}-{1,2,3})運(yùn)行結(jié)果為:3.40000000000000042-333{1,2}{4,5}(3)*運(yùn)算符除了表示整數(shù)、實(shí)數(shù)、復(fù)數(shù)之間的算術(shù)乘法,還可用于列表、元組、字符串這幾個(gè)類型的對(duì)象與整數(shù)的乘法,表示序列元素的重復(fù),生成新的列表、元組或字符串。print(33333*55555)print((3+4j)*(5+6j))print('重要的事情說三遍!'*3)print([0]*5)print((0,)*3)運(yùn)行結(jié)果為:1851814815(-9+38j)重要的事情說三遍!重要的事情說三遍!重要的事情說三遍![0,0,0,0,0](0,0,0)(4)運(yùn)算符/和//在Python中分別表示真除法和求整商。在使用時(shí),要特別注意整除運(yùn)算符//“向下取整”的特點(diǎn)。例如,-17/4的結(jié)果是-4.25,在數(shù)軸上小于-4.25的最大整數(shù)是-5,所以-17//4的結(jié)果是-5。print(17/4)print(17//4)print((-17)/4)print((-17)//4)運(yùn)行結(jié)果為:4.254-4.25-5(5)%運(yùn)算符可以用于求余數(shù)運(yùn)算,還可以用于字符串格式化。在計(jì)算余數(shù)時(shí),結(jié)果與%右側(cè)的運(yùn)算數(shù)符號(hào)一致。print(365%7)print(365%2)print('%c,%c,%c'%(65,97,48))#把65、97、48格式化為字符運(yùn)行結(jié)果為:11A,a,0(6)**運(yùn)算符表示冪運(yùn)算。使用時(shí)應(yīng)注意,該運(yùn)算符具有右結(jié)合性,也就是說,如果有兩個(gè)連續(xù)的**運(yùn)算符,那么先計(jì)算右邊的再計(jì)算左邊的,除非使用圓括號(hào)明確修改表達(dá)式的計(jì)算順序。print(2**4)print(3**3**3)print(3**(3**3))#與上一行代碼含義相同print((3**3)**3)#使用圓括號(hào)修改計(jì)算順序print(9**0.5)#計(jì)算9的平方根print((-1)**0.5)#對(duì)復(fù)數(shù)計(jì)算平方根得到復(fù)數(shù)運(yùn)行結(jié)果為:1676255974849877625597484987196833.0(6.123233995736766e-17+1j)2.2.2關(guān)系運(yùn)算符Python關(guān)系運(yùn)算符用于比較兩個(gè)對(duì)象的值之間的大小,要求操作數(shù)之間可以比較大小。當(dāng)關(guān)系運(yùn)算符作用于集合時(shí),用來測(cè)試集合之間的包含關(guān)系。當(dāng)作用于列表、元組或字符串時(shí),逐個(gè)比較對(duì)應(yīng)位置上的元素,直到得到確定的結(jié)論為止。#關(guān)系運(yùn)算符優(yōu)先級(jí)低于算術(shù)運(yùn)算符print(3+2<7+8)#等價(jià)于3<5and5>2print(3<5>2)#等價(jià)于3==3and3<5print(3==3<5)#第一個(gè)字符'1'<'2',直接得出結(jié)論print('12345'>'23456')#第一個(gè)字符'a'>'A',直接得出結(jié)論print('abcd'>'Abcd')#第一個(gè)數(shù)字85<91,直接得出結(jié)論print([85,92,73,84]<[91,82,73])#前兩個(gè)數(shù)字相等,第三個(gè)數(shù)字101>99print([180,90,101]>[180,90,99])#第一個(gè)集合不是第二個(gè)集合的超集print({1,2,3,4}>{3,4,5})#第一個(gè)集合不是第二個(gè)集合的子集print({1,2,3,4}<={3,4,5})#前三個(gè)元素相等,并且第一個(gè)列表有多余的元素print([1,2,3,4]>[1,2,3])運(yùn)行結(jié)果為:TrueTrueTrueFalseTrueTrueTrueFalseFalseTrue2.2.3成員測(cè)試運(yùn)算符print(60in[70,60,50,80])print('abc'in'a1b2c3dfg')print([3]in[[3],[4],[5]])print('3'inmap(str,range(5)))print(5inrange(5))運(yùn)行結(jié)果為:TrueFalseTrueTrueFalse2.2.4集合運(yùn)算符A={35,45,55,65,75}B={65,75,85,95}print(A|B)print(A&B)print(A-B)print(B-A)print(A^B)運(yùn)行結(jié)果為:{65,35,85,55,75,45,95}{65,75}{35,45,55}{85,95}{35,45,85,55,95}2.2.5邏輯運(yùn)算符print(3inrange(5)and'abc'in'abcdefg')print(3-3or5-2)print(not5)print(not[])運(yùn)行結(jié)果為:True3FalseTrue

山東工商學(xué)院教案本次授課內(nèi)容2.3常用內(nèi)置函數(shù)2.4綜合應(yīng)用與例題解析本次課的教學(xué)目的熟練掌握常用內(nèi)置函數(shù)了解Python函數(shù)式編程模式本次課教學(xué)重點(diǎn)與難點(diǎn)內(nèi)置函數(shù)max()、min()、sorted()的key參數(shù)可以用來指定排序規(guī)則,range()函數(shù)限定的是左閉右開區(qū)間,函數(shù)式編程模式。教學(xué)方法教學(xué)手段PPT、邊講邊練、線上線下結(jié)合課堂教學(xué)時(shí)間分配教學(xué)內(nèi)容時(shí)間分配(分)課前線上自學(xué)>60常用內(nèi)置函數(shù)50例題講解20練習(xí)、答疑20課堂教學(xué)設(shè)計(jì)講解與演示常用內(nèi)置函數(shù)的語法和功能。講解例題。練習(xí)、答疑。實(shí)驗(yàn)練習(xí)書上內(nèi)置函數(shù)的演示代碼和例題代碼。思考題及作業(yè)題本章習(xí)題中編程題1-6備注教學(xué)后記課堂重點(diǎn)內(nèi)容詳解第一節(jié)課2.3常用內(nèi)置函數(shù)2.3.1類型轉(zhuǎn)換(1)int()、float()、complex()print(int(3.5))#獲取實(shí)數(shù)的整數(shù)部分print(int('119'))#把整數(shù)字符串轉(zhuǎn)換為整數(shù)print(int('1111',2))#把1111看作二進(jìn)制數(shù),轉(zhuǎn)換為十進(jìn)制數(shù)print(int('1111',8))#把1111看作八進(jìn)制數(shù),轉(zhuǎn)換為十進(jìn)制數(shù)print(int('1111',16))#把1111看作十六進(jìn)制數(shù),轉(zhuǎn)換為十進(jìn)制數(shù)print(int('9\n'))#自動(dòng)忽略字符串兩個(gè)的空白字符print(float('3.1415926'))#把字符串轉(zhuǎn)換為實(shí)數(shù)print(float('-inf'))#負(fù)無窮大print(complex(3,4))#復(fù)數(shù)print(complex(6j))print(complex('3'))運(yùn)行結(jié)果為:311915585436993.1415926-inf(3+4j)6j(3+0j)(2)bin()、oct()、hex()print(bin(8888))#把整數(shù)轉(zhuǎn)換為二進(jìn)制print(oct(8888))#把整數(shù)轉(zhuǎn)換為八進(jìn)制print(hex(8888))#把整數(shù)轉(zhuǎn)換為十六進(jìn)制運(yùn)行結(jié)果為:0b100010101110000o212700x22b8(3)ord()、chr()、str()print(ord('a'))#返回字符的ASCII碼print(ord('董'))#返回漢字字符的Unicode編碼print(chr(65))#返回指定ASCII碼對(duì)應(yīng)的字符print(chr(33891))#返回指定Unicode編碼對(duì)應(yīng)的漢字print(str([1,2,3,4]))#把列表轉(zhuǎn)換為字符串print(str({1,2,3,4}))#把集合轉(zhuǎn)換為字符串運(yùn)行結(jié)果為:9733891A董[1,2,3,4]{1,2,3,4}(4)list()、tuple()、dict()、set()print(list(),tuple(),dict(),set())s={3,2,1,4}print(list(s),tuple(s))lst=[1,1,2,2,3,4]#在轉(zhuǎn)換為集合時(shí)會(huì)自動(dòng)去除重復(fù)的元素print(tuple(lst),set(lst))#list()會(huì)把字符串中每個(gè)字符都轉(zhuǎn)換為列表中的元素#tuple()、set()函數(shù)也具有類似的特點(diǎn)print(list(str(lst)))print(dict(name='Dong',sex='Male',age=41))運(yùn)行結(jié)果為:[](){}set()[1,2,3,4](1,2,3,4)(1,1,2,2,3,4){1,2,3,4}['[','1',',','','1',',','','2',',','','2',',','','3',',','','4',']']{'name':'Dong','sex':'Male','age':41}(5)eval()print(eval('3+4j'))#對(duì)字符串求值得到復(fù)數(shù)print(eval('8**2'))#計(jì)算表達(dá)式8**2的值print(eval('[1,2,3,4,5]'))#對(duì)字符串形式求值得到列表print(eval('{1,2,3,4}'))#對(duì)字符串求值得到集合運(yùn)行結(jié)果為:(3+4j)64[1,2,3,4,5]{1,2,3,4}2.3.2最大值、最小值data=[3,22,111]print(data)#對(duì)列表中的元素直接比較大小,輸出最大元素print(max(data))print(min(data))#返回轉(zhuǎn)換成字符串之后最大的元素print(max(data,key=str))data=['3','22','111']print(max(data))#返回長(zhǎng)度最大的字符串print(max(data,key=len))data=['abc','Abcd','ab']#最大的字符串print(max(data))#長(zhǎng)度最大的字符串print(max(data,key=len))#全部轉(zhuǎn)換為小寫之后最大的字符串print(max(data,key=str.lower))data=[1,1,1,2,2,1,3,1]#出現(xiàn)次數(shù)最多的元素#也可以查閱資料使用標(biāo)準(zhǔn)庫collections中的Counter類實(shí)現(xiàn)print(max(set(data),key=data.count))#最大元素的位置,列表方法__getitem__()用于獲取指定位置的值print(max(range(len(data)),key=data.__getitem__))運(yùn)行結(jié)果為:[3,22,111]111333111abcAbcdAbcd162.3.3元素?cái)?shù)量、求和data=[1,2,3,4]#列表中元素的個(gè)數(shù)print(len(data))#所有元素之和print(sum(data))data=(1,2,3)print(len(data))print(sum(data))data={1,2,3}print(len(data))print(sum(data))data='Readabilitycounts.'print(len(data))data={97:'a',65:'A',48:'0'}print(len(data))print(sum(data))運(yùn)行結(jié)果為:4103636193210第二節(jié)課2.3.4排序、逆序fromrandomimportshuffledata=list(range(20))shuffle(data)#隨機(jī)打亂順序print(data)print(sorted(data))#升序排序print(sorted(data,key=str))#按轉(zhuǎn)換成字符串后的大小升序排序print(sorted(data,key=str,#按轉(zhuǎn)換成字符串后的大小reverse=True))#降序排序運(yùn)行結(jié)果為:[6,16,14,15,8,13,12,1,3,17,4,0,19,11,2,7,9,10,5,18][0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19][0,1,10,11,12,13,14,15,16,17,18,19,2,3,4,5,6,7,8,9][9,8,7,6,5,4,3,2,19,18,17,16,15,14,13,12,11,10,1,0]fromrandomimportshuffledata=list(range(20))#創(chuàng)建列表shuffle(data)#隨機(jī)打亂順序print(data)reversedData=reversed(data)#生成reversed對(duì)象print(reversedData)print(list(reversedData))#根據(jù)reversed對(duì)象得到列表print(tuple(reversedData))#空元組,reversed對(duì)象中元素只能使用一次運(yùn)行結(jié)果為:[6,2,15,7,8,1,9,5,17,11,4,10,12,19,0,13,14,18,3,16]<list_reverseiteratorobjectat0x06C45EB0>[16,3,18,14,13,0,19,12,10,4,11,17,5,9,1,8,7,15,2,6]()2.3.5基本輸入輸出(1)內(nèi)置函數(shù)input()用來接收用戶的鍵盤輸入,不論用戶輸入什么內(nèi)容,input()一律返回字符串,必要的時(shí)候可以使用內(nèi)置函數(shù)int()、float()或eval()對(duì)用戶輸入的內(nèi)容進(jìn)行類型轉(zhuǎn)換。(2)內(nèi)置函數(shù)print()用于以指定的格式輸出信息,語法格式為:print(value1,value2,...,sep='',end='\n')其中,sep參數(shù)之前為需要輸出的內(nèi)容(可以有多個(gè));sep參數(shù)用于指定數(shù)據(jù)之間的分隔符,如果不指定則默認(rèn)為空格;end參數(shù)表示輸出完所有數(shù)據(jù)之后的結(jié)束符,如果不指定則默認(rèn)為換行符。2.3.6range()內(nèi)置函數(shù)range()的完整語法格式為range([start,]stop[,step]),其中參數(shù)start默認(rèn)為0,step默認(rèn)為1。該函數(shù)有range(stop)、range(start,stop)和range(start,stop,step)三種用法,返回具有惰性求值特點(diǎn)的range對(duì)象,其中包含左閉右開區(qū)間[start,stop)內(nèi)以step為步長(zhǎng)的整數(shù)范圍。該函數(shù)返回的range對(duì)象可以轉(zhuǎn)換為列表、元組或集合,可以使用for循環(huán)直接遍歷其中的元素,并且支持下標(biāo)和切片。2.3.7zip()內(nèi)置函數(shù)zip()用來把多個(gè)可迭代對(duì)象中對(duì)應(yīng)位置上的元素分別組合到一起,返回一個(gè)可迭代的zip對(duì)象,其中每個(gè)元素都是包含原來的多個(gè)可迭代對(duì)象對(duì)應(yīng)位置上元素的元組,最終結(jié)果中包含的元素個(gè)數(shù)取決于所有參數(shù)序列或可迭代對(duì)象中最短的那個(gè)??梢园褄ip對(duì)象轉(zhuǎn)換為列表或元組之后查看其中的內(nèi)容,也可以使用for循環(huán)逐個(gè)遍歷其中的元素。2.3.8map()、reduce()、filter()(1)map()內(nèi)置函數(shù)map()的語法為map(func,*iterables)該函數(shù)把一個(gè)可調(diào)用對(duì)象func依次映射到序列的每個(gè)元素上,并返回一個(gè)可迭代的map對(duì)象,其中每個(gè)元素是原序列中元素經(jīng)過可調(diào)用對(duì)象func處理后的結(jié)果,map()函數(shù)不對(duì)原序列做任何修改。fromoperatorimportaddprint(map(str,range(5)))print(list(map(str,range(5))))print(list(map(len,['abc','1234','test'])))#使用operator標(biāo)準(zhǔn)庫中的add運(yùn)算add運(yùn)算相當(dāng)于運(yùn)算符+#如果map()函數(shù)的第一個(gè)參數(shù)func能夠接收兩個(gè)參數(shù),則可以映射到兩個(gè)序列上fornuminmap(add,range(5),range(5,10)):print(num)運(yùn)行結(jié)果為:<mapobjectat0x00CA9770>['0','1','2','3','4'][3,4,4]5791113(2)reduce()在Python3.x中,reduce()不是內(nèi)置函數(shù),而是放到了標(biāo)準(zhǔn)庫functools中,需要導(dǎo)入之后才能使用,語法格式為:reduce(function,sequence[,initial])函數(shù)reduce()可以將一個(gè)接收2個(gè)參數(shù)的函數(shù)以迭代的方式從左到右依次作用到一個(gè)序列或迭代器對(duì)象的所有元素上,并且每一次計(jì)算的中間結(jié)果直接參與下一次計(jì)算,最終得到一個(gè)值。fromfunctoolsimportreducefromoperatorimportadd,mul,or_seq=range(1,10)print(reduce(add,seq))#累加seq中的數(shù)字print(reduce(mul,seq))#累乘seq中的數(shù)字seq=[{1},{2},{3},{4}]print(reduce(or_,seq))#對(duì)seq中的集合連續(xù)進(jìn)行并集運(yùn)算運(yùn)行結(jié)果為:45362880{1,2,3,4}(3)filter()seq=['abcd','1234','.,?!','']print(list(filter(str.isdigit,seq)))#只保留數(shù)字字符串print(list(filter(str.isalpha,seq)))#只保留英文字母字符串print(list(filter(str.isalnum,seq)))#只保留數(shù)字字符串和英文字符串print(list(filter(None,seq)))#只保留等價(jià)于True的元素運(yùn)行結(jié)果為:['1234']['abcd']['abcd','1234']['abcd','1234','.,?!']2.4綜合應(yīng)用與例題解析例2-1編寫程序,輸入一個(gè)正整數(shù),然后輸出各位數(shù)字之和。例如,輸入字符串1234,輸出10。#input()函數(shù)返回字符串num=input('請(qǐng)輸入一個(gè)自然數(shù):')#把字符串中的每個(gè)字符轉(zhuǎn)換為數(shù)字,然后求和print(sum(map(int,num)))例2-2編寫程序,輸入一個(gè)字符串,輸出翻轉(zhuǎn)(首尾交換)后的字符串,要求使用內(nèi)置函數(shù)實(shí)現(xiàn)。例如,輸入字符串12345,輸出54321。fromoperatorimportaddfromfunctoolsimportreduce#注意,input()本身就返回字符串,在輸入時(shí)不需要在內(nèi)容兩側(cè)加引號(hào)text=input('請(qǐng)輸入一個(gè)字符串:')print(reduce(add,reversed(text)))

山東工商學(xué)院教案本次授課內(nèi)容3.1列表與列表推導(dǎo)式3.2元組與生成器表達(dá)式本次課的教學(xué)目的熟練掌握列表常用方法。理解列表推導(dǎo)式語法。理解生成器表達(dá)式語法與工作原理。熟練掌握切片操作和序列解包。本次課教學(xué)重點(diǎn)與難點(diǎn)列表、元組、字符串的下標(biāo)可以是負(fù)數(shù),列表推導(dǎo)式,切片限定的是左閉右開區(qū)間。生成器表達(dá)式具有惰性求值特點(diǎn),并且其中的元素只能使用一次,序列解包要求等號(hào)兩側(cè)值的數(shù)量和變量的數(shù)量必須相等。教學(xué)方法教學(xué)手段PPT、邊講邊練、線上線下結(jié)合課堂教學(xué)時(shí)間分配教學(xué)內(nèi)容時(shí)間分配(分)課前線上自學(xué)>60列表對(duì)象的創(chuàng)建與下標(biāo)訪問10列表常用方法25列表推導(dǎo)式與切片15生成器表達(dá)式15序列解包10練習(xí)、答疑15課堂教學(xué)設(shè)計(jì)講解與演示列表對(duì)象的創(chuàng)建與下標(biāo)訪問。講解與演示列表常用方法。講解與演示列表推導(dǎo)式與切片。講解與演示生成器表達(dá)式。講解與演示序列解包。練習(xí)、答疑。實(shí)驗(yàn)教材3.1節(jié)、3.2節(jié)中的代碼。思考題及作業(yè)題本章習(xí)題中填空題1、2、3,判斷題1、4備注教學(xué)后記課堂重點(diǎn)內(nèi)容詳解第一節(jié)課3.1列表與列表推導(dǎo)式3.1.1創(chuàng)建列表>>>list((3,5,7,9,11))#將元組轉(zhuǎn)換為列表[3,5,7,9,11]>>>list(range(1,10,2))#將range對(duì)象轉(zhuǎn)換為列表[1,3,5,7,9]>>>list(map(str,range(10)))#將map對(duì)象轉(zhuǎn)換為列表['0','1','2','3','4','5','6','7','8','9']>>>list(zip('abcd',[1,2,3,4]))#將zip對(duì)象轉(zhuǎn)換為列表[('a',1),('b',2),('c',3),('d',4)]>>>list(enumerate('Python'))#將enumerate對(duì)象轉(zhuǎn)換為列表[(0,'P'),(1,'y'),(2,'t'),(3,'h'),(4,'o'),(5,'n')]>>>list(filter(str.isdigit,'a1b2c3d456'))#將filter對(duì)象轉(zhuǎn)換為列表['1','2','3','4','5','6']>>>list('helloworld')#將字符串轉(zhuǎn)換為列表#每個(gè)字符轉(zhuǎn)換為列中的一個(gè)元素['h','e','l','l','o','','w','o','r','l','d']>>>list({3,7,5})#將集合轉(zhuǎn)換為列表#集合中的元素是無序的[3,5,7]>>>x=list()#創(chuàng)建空列表>>>x=[1,2,3]>>>delx#刪除列表對(duì)象>>>x#對(duì)象刪除后無法再訪問,拋出異常NameError:name'x'isnotdefined3.1.2使用下標(biāo)訪問列表中的元素列表、元組和字符串屬于有序序列,其中的元素有嚴(yán)格的先后順序,可以使用整數(shù)作為下標(biāo)來隨機(jī)訪問其中任意位置上的元素。列表、元組和字符串都支持雙向索引,有效索引范圍為[-L,L-1],其中L表示列表、元組或字符串的長(zhǎng)度。正向索引時(shí)0表示第1個(gè)元素,1表示第2個(gè)元素,2表示第3個(gè)元素,以此類推;反向索引時(shí)-1表示最后1個(gè)元素,-2表示倒數(shù)第2個(gè)元素,-3表示倒數(shù)第3個(gè)元素,以此類推。如果指定的下標(biāo)不在有效范圍內(nèi),代碼會(huì)拋出異常提示下標(biāo)越界。3.1.3列表常用方法(1)append()、insert()、extend()append()用于向列表尾部追加一個(gè)元素;insert()用于向列表任意指定位置插入一個(gè)元素,該位置之后的元素向后移動(dòng),下標(biāo)加1;extend()用于將另一個(gè)列表中的所有元素追加至當(dāng)前列表的尾部。這幾個(gè)方法都沒有返回值,或者說返回空值None。(2)pop()、remove()pop()用于刪除并返回指定位置上的元素,不指定位置時(shí)默認(rèn)是最后一個(gè),如果列表為空或指定位置不存在會(huì)拋出異常;remove()用于刪除列表中第一個(gè)值與指定值相等的元素,如果不存在則拋出異常。(3)count()、index()count()用于返回列表中指定元素出現(xiàn)的次數(shù);index()用于返回指定元素在列表中首次出現(xiàn)的位置,如果不存在則拋出異常。(4)sort()、reverse()列表的sort()方法用于按照指定的規(guī)則對(duì)列表中所有元素進(jìn)行排序,與內(nèi)置函數(shù)sorted()一樣支持key參數(shù)和reverse參數(shù)。列表的reverse()方法用于翻轉(zhuǎn)列表中的所有元素,首位交換。下面的代碼演示了列表方法sort()和reverse()的用法,因?yàn)槭褂秒S機(jī)模塊random生成測(cè)試數(shù)據(jù),所以每次允許結(jié)果不相同。3.1.4列表推導(dǎo)式列表推導(dǎo)式可以使用非常簡(jiǎn)潔的方式對(duì)列表或其他可迭代對(duì)象的元素進(jìn)行遍歷、過濾或再次計(jì)算,快速生成滿足特定需求的新列表。列表推導(dǎo)式的語法形式為:[expressionforexpr1insequence1ifcondition1forexpr2insequence2ifcondition2forexpr3insequence3ifcondition3...forexprNinsequenceNifconditionN]列表推導(dǎo)式在邏輯上等價(jià)于一個(gè)循環(huán)語句(循環(huán)結(jié)構(gòu)將在第4章介紹),只是形式上更加簡(jiǎn)潔。例如,下面的代碼data=[numfornuminrange(20)ifnum%2==1]等價(jià)于data=[]fornuminrange(20):ifnum%2==1:data.append(num)3.1.5切片操作切片是用來獲取列表、元組、字符串等有序序列中部分元素的一種語法。在形式上,切片使用2個(gè)冒號(hào)分隔的3個(gè)數(shù)字來完成。[start:end:step]其中第一個(gè)數(shù)字start表示切片開始位置,默認(rèn)為0;第二個(gè)數(shù)字end表示切片截止(但不包含)位置(默認(rèn)為列表長(zhǎng)度);第三個(gè)數(shù)字step表示切片的步長(zhǎng)(默認(rèn)為1),省略步長(zhǎng)時(shí)還可以同時(shí)省略最后一個(gè)冒號(hào)。另外,當(dāng)step為負(fù)整數(shù)時(shí),表示反向切片,這時(shí)start應(yīng)該在end的右側(cè)。data=list(range(20))print(data[:])#獲取所有元素的副本print(data[:3])#前三個(gè)元素print(data[3:])#下標(biāo)3之后的所有元素print(data[::3])#每3個(gè)元素選取1個(gè)print(data[-3:])#最后3個(gè)元素print(data[:-5])#除最后5個(gè)元素之外的所有元素運(yùn)行結(jié)果為:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19][0,1,2][3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19][0,3,6,9,12,15,18][17,18,19][0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]第二節(jié)課3.2元組與生成器表達(dá)式可以通過把若干元素放在一對(duì)圓括號(hào)中創(chuàng)建元組,如果只有一個(gè)元素的話則需要多加一個(gè)逗號(hào),例如(3,)。也可以使用tuple()函數(shù)把列表、字典、集合、字符串以及range對(duì)象、map對(duì)象、zip對(duì)象或其他類似對(duì)象轉(zhuǎn)換為元組。3.2.1元組與列表的區(qū)別元組可以看作是輕量級(jí)列表,二者有很多相似之處,都屬于有序序列,支持雙向索引和切片操作,支持運(yùn)算符+、*和in,對(duì)于內(nèi)置函數(shù)的支持也是大同小異。二者之間的根本區(qū)別在于,元組是不可變的,而列表是可變的。元組是不可變的,不能直接修改元組中元素的值,也不能為元組增加或刪除元素。因此,元組沒有提供append()、extend()和insert()等方法,也沒有remove()和pop()方法。元組的訪問速度比列表更快,開銷更小。如果定義了一系列常量值,主要用途只是對(duì)它們進(jìn)行遍歷或其他類似操作,那么一般建議使用元組而不用列表。元組可以使得代碼更加安全。例如,調(diào)用函數(shù)時(shí)使用元組傳遞參數(shù)可以防止在函數(shù)中修改元組,而使用列表則無法保證這一點(diǎn)。元組可用作字典的鍵,也可以作為集合的元素,但列表不可以,包含列表的元組也不可以。3.2.2生成器表達(dá)式生成器表達(dá)式的用法與列表推導(dǎo)式非常相似,但是有本質(zhì)的不同。在形式上生成器表達(dá)式使用圓括號(hào)作為定界符,生成器表達(dá)式的結(jié)果是一個(gè)生成器對(duì)象。生成器對(duì)象具有惰性求值的特點(diǎn),只在需要時(shí)生成新元素,比列表推導(dǎo)式具有更高的效率,空間占用非常少,尤其適合大數(shù)據(jù)處理的場(chǎng)合。gen=(2**iforiinrange(8))#創(chuàng)建生成器對(duì)象print(gen)print(list(gen))#轉(zhuǎn)換為列表,用完了生成器對(duì)象中的所有元素print(tuple(gen))#轉(zhuǎn)換為元組,得到空元組gen=(2**iforiinrange(8))#重新創(chuàng)建生成器對(duì)象print(next(gen))#使用next()函數(shù)訪問下一個(gè)元素print(next(gen))foritemingen:#使用for循環(huán)訪問剩余的所有元素print(item,end='')運(yùn)行結(jié)果為:<generatorobject<genexpr>at0x00D5B5A0>[1,2,4,8,16,32,64,128]()12481632641283.2.3序列解包序列解包的本質(zhì)是對(duì)多個(gè)變量同時(shí)進(jìn)行賦值,也就是把一個(gè)序列或可迭代對(duì)象中的多個(gè)元素的值同時(shí)賦值給多個(gè)變量,要求等號(hào)左側(cè)變量的數(shù)量和等號(hào)右側(cè)值的數(shù)量必須一致。x,y,z=1,2,3#多個(gè)變量同時(shí)賦值x,y,z=(False,3.5,'exp')#元組支持序列解包x,y,z=[1,2,3]#列表支持序列解包x,y=y,x#交換兩個(gè)變量的值x,y,z=map(int,'123')#map對(duì)象支持序列解包data={'a':97,'b':98}x,y=data.values()#使用字典的“值”進(jìn)行序列解包

山東工商學(xué)院教案本次授課內(nèi)容3.3字典3.4集合本次課的教學(xué)目的熟練掌握字典對(duì)象的常用操作。熟練掌握集合對(duì)象的常用操作。本次課教學(xué)重點(diǎn)與難點(diǎn)字典的鍵可以作為下標(biāo),字典的get()方法,使用字典的鍵作為下標(biāo)的賦值語句的兩種含義。集合常用方法。教學(xué)方法教學(xué)手段PPT、邊講邊練、線上線下結(jié)合課堂教學(xué)時(shí)間分配教學(xué)內(nèi)容時(shí)間分配(分)課前線上自學(xué)>60字典元素訪問、刪除、添加、修改20集合常用操作10字符串常用方法30練習(xí)、答疑30課堂教學(xué)設(shè)計(jì)講解與演示字典創(chuàng)建與元素訪問。講解與演示字典元素的修改、添加與刪除。講解與演示集合對(duì)象常用操作。講解與演示字符串常用方法語法及功能。實(shí)驗(yàn)例3-1、3-2、3-3、3-4、3-5、3-6、3-7、3-9、3-10思考題及作業(yè)題本章習(xí)題中填空題4,判斷題2、3,編程題1、2、3、4、5、6,操作題備注教學(xué)后記課堂重點(diǎn)內(nèi)容詳解第一節(jié)課3.3字典字典屬于容器對(duì)象,其中包含若干元素,每個(gè)元素包含“鍵”和“值”兩部分,這兩部分之間使用冒號(hào)分隔,表示一種對(duì)應(yīng)關(guān)系。不同元素之間用逗號(hào)分隔,所有元素放在一對(duì)大括號(hào)中。字典中元素的“鍵”可以是Python中任意不可變數(shù)據(jù),例如整數(shù)、實(shí)數(shù)、復(fù)數(shù)、字符串、元組等類型,但不能使用列表、集合、字典或其他可變類型作為字典的“鍵”,包含列表等可變數(shù)據(jù)的元組也不能作為字典的“鍵”。另外,字典中的“鍵”不允許重復(fù),“值”是可以重復(fù)的。data=dict(name='張三',age=18,sex='M')print(data)data=dict.fromkeys([1,2,3,4])#以指定的數(shù)據(jù)為“鍵”,“值”為空print(data)data=dict(zip('abcd',[97,98,99,100]))print(data)data={ch:ord(ch)forchin'abcd'}#字典推導(dǎo)式print(data)運(yùn)行結(jié)果為:{'name':'張三','age':18,'sex':'M'}{1:None,2:None,3:None,4:None}{'a':97,'b':98,'c':99,'d':100}{'a':97,'b':98,'c':99,'d':100}3.3.1字典元素訪問字典支持下標(biāo)運(yùn)算,把下標(biāo)作為“鍵”并返回對(duì)應(yīng)的“值”,如果字典中不存在這個(gè)“鍵”會(huì)拋出異常。字典的get()方法獲取指定“鍵”對(duì)應(yīng)的“值”,如果指定的“鍵”不存在,get()方法會(huì)返回空值或指定的值。data=dict(name='張三',age=18,sex='M')print(data['name'])#使用“鍵”作為下標(biāo),訪問“值”print(data.get('age'))print(data.get('address','不存在這個(gè)鍵'))#“鍵”不存在,返回默認(rèn)值print(list(data))#把所有的“鍵”轉(zhuǎn)換為列表print(list(data.values()))#把所有的“值”轉(zhuǎn)換為列表print(list(data.items()))#把所有的元素轉(zhuǎn)換為列表forkey,valueindata.items():#遍歷字典的“鍵:值”元素print(key,value,sep='\t')運(yùn)行結(jié)果為:張三18不存在這個(gè)鍵['name','age','sex']['張三',18,'M'][('name','張三'),('age',18),('sex','M')]name 張三age 18sex M3.3.2字典元素修改、添加與刪除(1)當(dāng)以指定“鍵”為下標(biāo)為字典元素賦值時(shí),有兩種含義:1)若該“鍵”存在,表示修改該“鍵”對(duì)應(yīng)的值;2)若不存在,表示添加一個(gè)新元素。sock={'IP':'','port':80}sock['port']=8080#修改已有元素的“值”sock['protocol']='TCP'#增加新元素print(sock)運(yùn)行結(jié)果為:{'IP':'','port':8080,'protocol':'TCP'}(2)使用字典對(duì)象的update()方法可以將另一個(gè)字典的元素一次性全部添加到當(dāng)前字典對(duì)象,如果兩個(gè)字典中存在相同的“鍵”,則以另一個(gè)字典中的“值”為準(zhǔn)對(duì)當(dāng)前字典進(jìn)行更新。sock={'IP':'','port':80}#更新了一個(gè)元素的“值”,增加了一個(gè)新元素sock.update({'IP':'2','protocol':'TCP'})print(sock)運(yùn)行結(jié)果為:{'IP':'2','port':80,'protocol':'TCP'}(3)可以使用字典對(duì)象的pop()刪除指定“鍵”對(duì)應(yīng)的元素,同時(shí)返回對(duì)應(yīng)的“值”。字典方法popitem()方法用于刪除并返回一個(gè)包含兩個(gè)元素的元組,其中的兩個(gè)元素分別是字典元素的“鍵”和“值”。另外,也可以使用del刪除指定的“鍵”對(duì)應(yīng)的元素。sock={'IP':'2','port':80,'protocol':'TCP'}print(sock.pop('IP'))#刪除并返回指定“鍵”的元素print(sock.popitem())#刪除并返回一個(gè)元素delsock['port']#刪除指定“鍵”的元素print(sock)運(yùn)行結(jié)果為:2('protocol','TCP'){}3.4集合3.4.1集合概述Python集合是無序、可變的容器對(duì)象,所有元素放在一對(duì)大括號(hào)中,元素之間使用逗號(hào)分隔,同一個(gè)集合內(nèi)的每個(gè)元素都是唯一的,不允許重復(fù)。集合中只能包含數(shù)字、字符串、元組等不可變類型的數(shù)據(jù),而不能包含列表、字典、集合等可變類型的數(shù)據(jù),包含列表等可變類型數(shù)據(jù)的元組也不能作為集合的元素。除了把元素放在一對(duì)大括號(hào)中創(chuàng)建集合,也可以使用set()函數(shù)將列表、元組、字符串、range對(duì)象等其他可迭代對(duì)象轉(zhuǎn)換為集合,還可以使用集合推導(dǎo)式生成特定的集合。如果原來的數(shù)據(jù)中存在重復(fù)元素,在轉(zhuǎn)換為集合的時(shí)候重復(fù)的元素只保留一個(gè),自動(dòng)去除重復(fù)元素。如果原序列或迭代對(duì)象中有可變類型的數(shù)據(jù),無法轉(zhuǎn)換成為集合,拋出異常。當(dāng)不再使用某個(gè)集合時(shí),可以使用del語句刪除整個(gè)集合。3.4.2集合常用方法(1)add()、update()data={30,40,50}data.add(20)#增加新元素20data.add(50)#集合中已包含50,忽略本次操作data.update({40,60})#忽略40,增加新元素60print(data)運(yùn)行結(jié)果為:{50,20,40,60,30}(2)pop()、remove()、discard()data={30,40,50}data.remove(30)#刪除元素30data.discard(30)#集合中沒有30,忽略本次操作print(data.pop())#刪除并返回集合中的一個(gè)元素print(data)運(yùn)行結(jié)果為:40{50}第二節(jié)課3.5字符串常用方法3.5.1encode()bookName='《Python可以這樣學(xué)》'print(bookName.encode())print(bookName.encode('gbk'))print(bookName.encode('gbk').decode('gbk'))運(yùn)行結(jié)果為:b'\xe3\x80\x8aPython\xe5\x8f\xaf\xe4\xbb\xa5\xe8\xbf\x99\xe6\xa0\xb7\xe5\xad\xa6\xe3\x80\x8b'b'\xa1\xb6Python\xbf\xc9\xd2\xd4\xd5\xe2\xd1\xf9\xd1\xa7\xa1\xb7'《Python可以這樣學(xué)》3.5.2format()#0表示format()方法的參數(shù)下標(biāo),對(duì)應(yīng)于第一個(gè)參數(shù)#.4f表示格式化為實(shí)數(shù),保留4位小數(shù)print('{0:.4f}'.format(10/3))print('{0:.2%}'.format(1/3))#格式化為百分?jǐn)?shù)字符串,總寬度為10,保留2位小數(shù),>表示右對(duì)齊print('{0:>10.2%}'.format(1/3))#逗號(hào)表示在數(shù)字字符串中插入逗號(hào)作為千分符,#x表示格式化為十六進(jìn)制數(shù)print("{0:,}inhexis:{0:#x},inoctis{0:#o}".format(5555555))#可以先格式化下標(biāo)為1的參數(shù),再格式化下標(biāo)為0的參數(shù)#o表示八進(jìn)制數(shù),但不帶前面的引導(dǎo)符0oprint("{1}inhexis:{1:#x},{0}inoctis{0:o}".format(6666,66666))#_表示在數(shù)字中插入下畫線作為千分符print('{0:_},{0:#_x}'.format(10000000))運(yùn)行結(jié)果為:3.333333.33%33.33%5,555,555inhexis:0x54c563,inoctis0o2514254366666inhexis:0x1046a,6666inoctis1501210_000_000,0x98_9680從Python3.6.x開始支持一種新的字符串格式化方式,官方叫做FormattedStringLiterals,其含義與字符串對(duì)象的format()方法類似,但形式更加簡(jiǎn)潔。其中大括號(hào)里面的變量名表示占位符,在進(jìn)行格式化時(shí),使用前面定義的同名變量的值對(duì)格式化字符串中的占位符進(jìn)行替換。如果當(dāng)前作用域中沒有該變量的定義,代碼會(huì)拋出異常。width=8height=6print(f'Rectangleof{width}*{height}\nArea:{width*height}')運(yùn)行結(jié)果為:Rectangleof8*6Area:483.5.3index()、rindex()、count()text='處處飛花飛處處;聲聲笑語笑聲聲。'print(text.rindex('處'))print(text.index('聲'))print(text.count('處'))運(yùn)行結(jié)果為:6843.5.4replace()、maketrans()、translate()(1)字符串方法replace()用來替換字符串中指定字符或子字符串的所有重復(fù)出現(xiàn),每次只能替換一個(gè)字符或一個(gè)字符串,把指定的字符串參數(shù)作為一個(gè)整體對(duì)待,類似于Word、WPS、記事本、寫字板等文本編輯器的“全部替換”功能。該方法返回一個(gè)新字符串,并不修改原字符串。text="Python是一門非常棒的編程語言。"#replace()方法返回替換后的新字符串,可以直接再次調(diào)用replace()方法print(text.replace('棒','優(yōu)雅').replace('編程','程序設(shè)計(jì)'))prin

溫馨提示

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

評(píng)論

0/150

提交評(píng)論