版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Python程序設計—從基礎到開發(fā)
第1章Python語言介紹1.1Python語言簡介1.2安裝與配置Python環(huán)境1.3Python開發(fā)環(huán)境IDLE簡介1.4Python基本輸入輸出1.5Python代碼規(guī)范1.6使用幫助1.1Python語言簡介Python是一種面向對象、解釋型計算機程序設計語言,由荷蘭人GuidovanRossum于1989年底發(fā)明,第一個公開發(fā)行版發(fā)行于1991年,Python源代碼同樣遵循GPL(GNUGeneralPublicLicense)協議。Python語法簡潔而清晰,具有豐富和強大的類庫。它常被昵稱為膠水語言,能夠把用其他語言制作的各種模塊(尤其是C/C++)很輕松地聯結在一起。正因為Python語言的簡潔、優(yōu)雅、開發(fā)效率高,它常被用于網站開發(fā),網絡編程,圖形處理,黑客編程等等。Python由荷蘭的GuidovanRossum設計。Python第一個版本于1991年初公開發(fā)行。。Python2.0于2000年10月發(fā)布,增加了許多新的語言特性。Python3.0于2008年12月發(fā)布,此版本不完全兼容Python2.0,導致Python2.0與Python3.0不兼容。Python3.5在2015年9月發(fā)布Python3.6正式版在2016年12月發(fā)布,主要的新特性包括:async和await關鍵字可用于生成器和推導;改善CPython實現,在不破壞兼容性的情況下降低內存占用和提高速度;可插拔支持JIT、跟蹤器和調試器;引入新的字符串和數字格式,為變量加入類型注釋,簡化定制子類創(chuàng)建的方法,等等。Python語言的發(fā)展歷史TIOBE2016年8月編程語言排行榜TIOBE2021年2月編程語言排行榜是一種面向對象、解釋型計算機程序設計語言純粹的自由軟件Python語法簡潔清晰,用空格(space)作為語句縮進Python具有豐富和強大的庫。它常被昵稱為膠水語言,能夠把用其他語言制作的各種模塊(尤其是C/C++)很輕松地聯結在一起。Python快速生成程序的原型封裝Python可以調用的擴展類庫跨平臺,程序無需修改在Windows、Linux、Unix、Mac等操作系統(tǒng)上使用支持函數式編程函數式編程什么是函數式編程?在維基百科中給出了詳細的定義,函數式編程(英語:functionalprogramming)或稱函數程序設計,又稱泛函編程,是一種編程范型,它將電腦運算視為數學上的函數計算,并且避免使用程序狀態(tài)以及易變對象。函數編程語言最重要的基礎是λ演算(lambdacalculus)。而且λ演算的函數可以接受函數當作輸入(引數)和輸出(傳出值)。主要思想是把運算過程盡量寫成一系列嵌套的函數調用。函數式編程函數式編程的特點:1.把計算視為函數而非指令2.純函數式編程:不需要變量,沒有副作用,測試簡單3.支持高階函數,代碼簡潔Python支持的函數式編程:不是純函數式編程:允許有變量支持高階函數:函數也可以作為變量傳入支持閉包:有了閉包就能返回函數有限度地支持匿名函數高階函數(能接受函數做參數的函數)Map()是python內置的高階函數,它接受一個函數f和一個list;它通過把f分別作用在每一個list元素上,得到一個新的iterator(新list)
并返回。Web開發(fā),基于python的優(yōu)秀web框架如Django網絡編程,網頁解析,如爬蟲程序開發(fā)科學計算,各種實驗數據的處理以及相關實驗模擬等,機器學習等數據庫應用多媒體開發(fā)電子游戲開發(fā)需要什么應用就能找到什么庫應用領域1.1.3Python語言的應用領域1.Web開發(fā)Python語言支持Web網站開發(fā),比較流行的開發(fā)框架有web2py、django等。許多大型網站就是用Python開發(fā)的,例如YouTube、Instagram,還有國內的豆瓣。很多大公司,包括Google、Yahoo等,甚至NASA(美國航空航天局)都大量地使用Python。
利用py2exe模塊可以將Python程序轉換為.exe可執(zhí)行程序,使得Python程序可以脫離Python系統(tǒng)環(huán)境來運行。2.網絡編程
Python語言提供了socket模塊,對Socket接口進行了二次封裝,支持Socket接口的訪問;還提供了urllib、cookielib、httplib、scrapy等大量模塊,用于對網頁內容進行讀取和處理,并結合多線程編程以及其他有關模塊可以快速開發(fā)網頁爬蟲之類的應用程序。3.科學計算與數據可視化
Python中用于科學計算與數據可視化的模塊有很多,例如NumPy、SciPy、SymPy、Matplotlib、Traits、TraitsUI、Chaco、TVTK、Mayavi、VPython、OpenCV等,涉及的應用領域包括數值計算、符號計算、二維圖表、三維數據可視化、三維動畫演示、圖像處理以及界面設計等。
4.數據庫應用
Python數據庫模塊有很多,例如,可以通過內置的sqlite3模塊訪問SQLite數據庫,使用pywin32模塊訪問Access數據庫,使用pymysql模塊訪問MySQL數據庫,使用pywin32和pymssql模塊來訪問SQLSever數據庫。5.多媒體開發(fā)
PyMedia模塊是一個用于多媒體操作的Python模塊,可以對包括WAV、MP3、AVI等多媒體格式文件進行編碼、解碼和播放;PyOpenGL模塊封裝了OpenGL應用程序編程接口,通過該模塊可在Python程序中集成二維或三維圖形;PIL(PythonImagingLibrary,Python圖形庫)為Python提供了強大的圖像處理功能,并提供廣泛的圖像文件格式支持。6.電子游戲應用
Pygame就是用來開發(fā)電子游戲軟件的Python模塊,在SDL庫的基礎上開發(fā),可以支持多個操作系統(tǒng)。使用Pygame模塊,可以在Python程序中創(chuàng)建功能豐富的游戲和多媒體程序。目前使用Python的企業(yè)Google在其網絡搜索系統(tǒng)中廣泛應用了Python,并且聘用了Python的創(chuàng)作者。YouTube視頻分享服務大部分是由Python編寫的。流行的P2P文件分享系統(tǒng)Bittorrent是一個Python程序。Intel、Cisco、Hewlett-Packard、Seagate、Qualcomm和IBM使用Python進行硬件測試。IndustrialLight&Magic、Pixar等公司使用Python制作動畫電影。NASA、LosAlamos、Fermilab、JPL等使用Python實現科學計算任務。IRobot使用Python開發(fā)了商業(yè)機器人真空吸塵器。ESRI在其流行的GIS地圖產品中使用Python作為終端用戶的定制工具。NSA在加密和智能分析中使用Python。Python缺點任何編程語言都有缺點,Python缺點主要有:(1)運行速度慢。(2)代碼不能加密。(3)用縮進來區(qū)分語句關系的方式還是給很多初學者帶來了困惑。即便是很有經驗的Python程序員也可能陷入陷阱當中。最常見的情況是tab和空格的混用會導致錯誤。1.2安裝與配置Python環(huán)境1.2安裝與配置Python環(huán)境1.2.2運行Python安裝成功后,cmd打開命令提示符窗口,敲入python后,會出現圖1-2命令提示符窗口。在窗口中看到python的版本信息的畫面,就說明Python安裝成功。1.3Python開發(fā)環(huán)境IDLE簡介1.3.1IDLE的啟動安裝Python后,我們可以從“開始”菜單→“所有程序”→“Python3.7”→“IDLE(Python3.7)”來啟動IDLE。Python的命令執(zhí)行方式
啟動Python解釋器后,可以直接在其提示符(>>>)后輸入語句。例如,先在提示符>>>后輸入一個輸出語句,下一行將接著輸出結果。>>>print("Hello,World!")Hello,World!>>>print(1+3/4)1.751.3.2利用IDLE創(chuàng)建Python程序可在IDLE界面中使用菜單“File”→“NewFile”命令啟動編輯器(圖1-4所示),來創(chuàng)建一個程序文件,輸入代碼并保存為文件(務必要保證擴展名為“.py”)。p=input("Pleaseinputyourpassword:\n")ifp!="123":print("passworderror!")1.3.2利用IDLE創(chuàng)建Python程序Python程序員通常選用第三方集成開發(fā)環(huán)境(IDE,IntegratedDevelopmentEnvironment)進行程序設計。常用的IDE有Notepad++,PyScripter,PyCharm,EclipsewithPyDev,Komodo,WingIDE等,它們通常具有一些自動代碼完成、參數提示、代碼錯誤檢查等功能1.3.3IDLE常用編輯功能對于“Format”菜單,常用的選項及解釋如下所示:Indentregion:使所選內容右移一級,即增加縮進量。Dedentregion:使所選內容組左移一級,即減少縮進量。Commentoutregion:將所選內容變成注釋。Uncommentregion:去除所選內容每行前面的注釋符。Newindentwidth:重新設定制表位縮進寬度,范圍2~16,寬度為2相當于1個空格。Expandword:單詞自動完成。Toggletabs:打開或關閉制表位。1.3.4在IDLE中運行和調試程序1.運行Python程序要使用IDLE執(zhí)行程序的話,可以從“Run”菜單中選擇“RunModule”菜單項(或按F5鍵)2.使用IDLE的調試器在“PythonShell”窗口中單擊“Debug”菜單中的“Debugger”菜單項,就可以啟動IDLE的交互式調試器。這時,IDLE會打開圖1-6的“DebugControl”窗口,并在“PythonShell”窗口中輸出“[DEBUGON]”并后跟一個“>>>”提示符。這樣,我們就能像平時那樣使用這個“PythonShell”窗口了,只不過現在輸入的任何命令都是允許在調試器下。在“DebugControl”窗口查看局部變量和全局變量等有關內容。1.3.4在IDLE中運行和調試程序>>>[DEBUGON]>>>x=3單擊GO[DEBUGON]>>>y=4單擊GO[DEBUGON]>>>z=5[DEBUGON]>>>常用的Python第三方編輯器Python程序員通常選用第三方集成開發(fā)環(huán)境(IDE,IntegratedDevelopmentEnvironment)進行程序設計。常用的IDE有Notepad++,PyScripter,PyCharm,EclipsewithPyDev,Anaconda3,WingIDE,Visualstudio.NET等,它們通常具有一些自動代碼完成、參數提示、代碼錯誤檢查等功能PyScript2.6
綠色軟件,支持python3.4,支持64bit,良好代碼提示,支持中文,免費PyScript使用中文編碼的設置PyCharm
支持python3.x,良好代碼提示,中文編碼不需設置,免費版Python功能齊全但菜單為英文pipinstallpygamepipinstall***.whl(離線包)1.4Python基本輸入輸出1.4.1Python基本輸入輸入是通過input()函數來實現的,input()的一般格式為:a=input('提示:')基本輸入如果需要輸入整數或小數,則需要使用int或float函數進行轉。例如:
1.4Python基本輸入輸出1.4.2Python基本輸出Python2.7和Python3.5的輸出方法也不完全一致。在Python2.7中,使用print語句進行輸出,而Python3.5中使用print()函數進行輸出。foriinrange(10,20):print(i,end='
') Python基本輸出Python基本輸出1.5Python代碼規(guī)范(1)縮進Python程序是依靠代碼塊的縮進來體現代碼之間的邏輯關系的(2)注釋方法一:以#開始,表示本行#之后的內容為注釋。#循環(huán)輸出0到9數字foriinrange(10):print(i,end='')方法二:包含在一對三引號'''...'''或"""..."""之間且不屬于任何語句的內容將被解釋器認為是注釋。1.5Python代碼規(guī)范(3)每個import只導入一個模塊。而不要一次導入多個模塊。(4)如果一行語句太長,可以在行尾加上反斜杠“\”來換行分成多行,但是更建議使用括號來包含多行內容。(5)必要的空格與空行運算符兩側、函數參數之間、逗號兩側建議使用空格分開。不同功能的代碼塊之間、不同的函數定義之間建議增加一個空行以增加可讀性。(6)常量名所有字母大寫,由下劃線連接各個單詞。類名首字母大寫。1.6使用幫助使用格式如下:help(對象)下面分3種情況進行說明。1.查看內置函數和類型的幫助信息>>>help(max)2.查看模塊中的成員函數信息>>>importos>>>help(os.fdopen)上例查看os模塊中的fdopen成員函數信息3.查看整個模塊的信息使用help(模塊名)就能查看整個模塊的幫助信息。注意先import導入該模塊。例如:查看math模塊方法:>>>importmath>>>help(math)Python是一種解釋型語言Python是一種解釋型語言Python程序源碼可以直接從源代碼運行程序。Python解釋器將源代碼轉換為字節(jié)碼,然后把編譯好的字節(jié)碼轉發(fā)到Python虛擬機(PVM)中進行執(zhí)行。Python是一種解釋型語言當運行Python文件的時候,Python解釋器會執(zhí)行兩個步驟:把源代碼編譯為字節(jié)碼(以.pyc文件保存)把編譯好的字節(jié)碼轉發(fā)到PVM中加以執(zhí)行解釋型語言和編譯型語言根本區(qū)別在于:編譯型語言會將原文件通過編譯生成目標程序,而解釋型語言不會將整個源文件編譯生成目標程序,解釋型語言進行解釋執(zhí)行,Python語言就屬于這種執(zhí)行方式,可以理解為,解釋一句,執(zhí)行一句,這就是解釋性語言的精髓所在。第2章Python語法基礎
472.1Python數據類型2.1.1數值類型Python數值類型用于存儲數值。整型(int):通常被稱為是整型或整數,是正或負整數,不帶小數點。長整型(long):無限大小的整數,整數最后是一個大寫或小寫的L。在Python3里,只有一種整數類型
int,沒有Python2中的Long。浮點型(float):浮點型由整數部分與小數部分組成,浮點型也可以使用科學計數法表示(2.78e2就是2.78x102=278)復數(complex):復數由實數部分和虛數部分構成,可以用a+bj,或者complex(a,b)表示,復數的虛部以字母j或J結尾。如:2+3j。48Python使用單引號和雙引號來表示字符串是一樣的。1.創(chuàng)建和訪問字符串創(chuàng)建字符串很簡單,只要為變量分配一個值即可。例如:var1='HelloWorld!'var2="PythonProgramming"2.Python轉義字符需要在字符中使用特殊字符時,Python用反斜杠(\)轉義字符2.1.2字符串493.Python字符串運算符Python字符串運算符如表2-2所示。a='Hello'b='Python'2.1.2字符串504.字符串格式化Python支持格式化字符串的輸出。盡管這樣可能會用到非常復雜的表達式,但最基本的用法是將一個值插入到有字符串格式符的模板中。在Python中,字符串格式化使用與C語言中printf函數一樣的語法。print(“我的名字是%s年齡是%.2f"%('xmj',41))Python用一個元祖將多個值傳遞給模板,每個值對應一個字符串格式符。上例將'xmj'插入到%s處,41插入到%d處。所以輸出結果:我的名字是xmj年齡是412.1.2字符串514.字符串格式化2.1.2字符串522.1.3布爾類型Python支持布爾類型的數據,布爾類型只有True和False兩種值。and與運算:只有兩個布爾值都為True時,計算結果才為True。or或運算:只要有一個布爾值為True,計算結果就是True。not非運算:把True變?yōu)镕alse,或者把False變?yōu)門rue:在Python中,布爾類型還可以與其他數據類型做and、or和not運算,這時下面的幾種情況會被認為是FALSE:為0的數字,包括0,0.0;空字符串'',"";表示空值的None;空集合,包括空元祖(),空序列[],空字典{};其他的值都為TRUE。例如:a='python'print(aandTrue)#結果是Trueb=''print(borFalse)#結果是False53在Python中,邏輯值True和False作為數值,則分別是整型值1和0參與運算。例如:>>>x=False>>>a=x+(5>4)#結果a是1>>>b=x+5#結果b是5542.1Python數據類型2.1.4空值空值是Python里一個特殊的值,用None表示。它不支持任何運算也沒有任何內置函數方法。None和任何其他的數據類型比較永遠返回False。在Python中未指定返回值的函數會自動返回None。2.1.5Python數字類型轉換x=20
#八進制為24y=345.6print(oct(x)) #打印結果是0o24print(int(y)) #打印結果是345print(float(x)) #打印結果是20.0print(chr(65)) #A的ASCII為65,打印結果是Aprint(ord('B')) #B的ASCII為66,打印結果是66552.2常量和變量2.2.1變量變量在程序中就是用一個變量名表示,變量名必須是大小寫英文、數字和_的組合,且不能用數字開頭,比如:在Python中,等號=是賦值語句,可以把任意數據類型賦值給變量,同一個變量可以反復賦值,而且可以是不同類型的變量,例如:a=123 #a是整數a='ABC' #a變?yōu)樽址@種變量本身類型不固定的語言稱之為動態(tài)語言,與之對應的是靜態(tài)語言。562.2常量和變量理解變量572.2.2常量所謂常量就是不能變的變量,比如常用的數學常數π就是一個常量。在Python中,通常用全部大寫的變量名表示常量:PI=3事實上PI仍然是一個變量,Python根本沒有任何機制保證PI不會被改變,所以,用全部大寫的變量名表示常量只是一個習慣上的用法,實際上是可以改變變量PI的值。582.3運算符與表達式Python語言支持運算符有以下幾種類型。?算術運算符?比較(即關系)運算符?賦值運算符?邏輯運算符?位運算符?成員操作符?標識操作符592.3運算符與表達式1.算術運算符算術運算符實現數學運算,Python語言算術運算符如表2-5所示。假設其中變量a=10和變量b=20。602.關系運算符關系運算符用于兩個值進行比較,運算結果為True(真)或False(假)。Python中的關系運算符如表2-6所示。假設其中變量a=10和變量b=20。613.邏輯運算符Python中提供了三種邏輯運算符,它們是:and(邏輯與,二元運算符)or(邏輯或,二元運算符)not(邏輯非,一元運算符)624.賦值運算符賦值運算符“=”的一般格式為:變量=表達式它表示將其右側的表達式求出結果,賦給其左側的變量。例如:
i=3*(4+5) #i的值變?yōu)?7635.位運算符
位(bit)是計算機中表示信息的最小單位,位運算符作用于位和位操作。Python中位運算符如下:按位與(&)、按位或(|)、按位異或(^)、按位求反(~)、左移(<<)、右移(>>)。位運算符是對其操作數按其二進制形式逐位進行運算。a= 00111100b= 00001101a&b= 00001100a|b= 00111101a^b= 00110001~a= 11000011646.Python成員運算Python成員運算符判斷序列中是否有某個成員。成員運算符如表2-9所示。657.Python標識運算符標識符比較兩個對象的內存位置。
668.Python運算符優(yōu)先級在一個表達式中出現多種運算時,將按照預先確定的順序計算并解析各個部分,這個順序稱為運算符優(yōu)先級。672.3.2表達式表達式是一個或多個運算的組合。Python語言的表達式與其他語言的表達式沒有顯著的區(qū)別。每個符合Python語言規(guī)則的表達式的計算都是一個確定的值。對于常量、變量的運算和對于函數的調用都可以構成表達式。在后續(xù)章節(jié)中介紹的序列、函數、對象都可以成為表達式一部分。682.4序列數據結構數據結構是計算機存儲、組織數據的方式。序列是Python中最基本的數據結構。序列中的每個元素都分配一個數字即它的位置或索引,第一個索引是0,第二個索引是1,依此類推。序列都可以進行的操作包括索引,截取(切片),加,乘,成員檢查。此外,Python已經內置確定序列的長度以及確定最大和最小的元素的方法。Python內置序列類型最常見的是列表、元組、字符串。另外,Python提供了字典和集合這樣的數據結構,它們屬于無順序的數據集合體,不能通過位置索引號來訪問數據元素。692.4.1列表列表(list)是最常用的Python數據類型,列表的數據項不需要具有相同的類型。列表類似其他語言的數組,但功能比數組強大的多。創(chuàng)建一個列表,只要把逗號分隔的不同的數據項使用方括號括起來即可。實例如下:list1=['中國','美國',1997,2000]list2=[1,2,3,4,5]列表索引從0開始。列表可以進行截取(切片)、組合等。702.4.1列表1.訪問列表中的值list1=['中國','美國',1997,2000];list2=[1,2,3,4,5,6,7];print("list1[0]:",list1[0])print("list2[1:5]:",list2[1:5])712.4.1列表2.更新列表可以對列表的數據項進行修改或更新,實例如下:list=['中國','chemistry',1997,2000];print("Valueavailableatindex2:")print(list[2])list[2]=2001;print("Newvalueavailableatindex2:")print(list[2])3.刪除列表元素方法一:使用del語句來刪除列表的的元素方法二:使用remove()方法來刪除列表的元素方法三:使用pop()方法方法來刪除列表的指定位置的元素,無參數時刪除最后一個元素722.4.1列表4.添加列表元素可以使用
append()方法在列表末尾添加元素,如下實例:list1=['中國','美國',1997,2000]list1.append(2003)print(list1)以上實例輸出結果:['中國','美國',1997,2000,2003]732.4.1列表4.添加列表可以使用
+=,+連接另一個列表74>>list01=[1,2,3]>>>list02=[4,5,6]>>>>>>list01.extend(list02)>>>list01[1,2,3,4,5,6]2.4.1列表5.列表排序Python列表有一個內置的list.sort()排序方法可以對原列表進行排序。還有一個sorted()內置函數,它會從原列表構建一個新的排序列表。例如:list1=[5,2,3,1,4]list1.sort()#list1是[1,2,3,4,5]調用sorted()函數即可返回一個新的已排序列表。list1=[5,2,3,1,4]list2=sorted([5,2,3,1,4])#list2是[1,2,3,4,5],list1不變list.sort()和sorted()接受布爾值的reverse參數,這用于標記是否降序排序。list1=[5,2,3,1,4]list1.sort(reverse=True)#list1是[5,4,3,2,1],True是降序排序,False是升序排序752.4.1列表6.定義多維列表可以將多維列表視為列表的嵌套,即多維列表的元素值也是一個列表。只是維度比父列表小一。例如:a=["張三",90,80,70]b=["李四",98,88,77]c=["王五",99,89,77]>>>m=[a,b,c]>>>m[['張三',90,80,70],['李四',98,88,77],['王五',99,89,77]]>>>m=[['張三',90,80,70],['李四',98,88,77],['王五',99,89,77]]76張三908070李四988877王五9989772.4.1列表6.定義多維列表可以將多維列表視為列表的嵌套,即多維列表的元素值也是一個列表,只是維度比父列表小一。例如:定義1個二維列表。list2=[["CPU","內存"],["硬盤","聲卡"]]二維列表比一維列表多一個索引,可以如下獲取元素:列表名[索引1][索引2]例如:定義3行6列的二維列表,打印出元素值。77張三908070李四998977王五998977定義多維列表rows=3cols=6matrix=[[0forcolinrange(6)]forrowinrange(rows)]#列表生成式foriinrange(rows):forjinrange(cols):matrix[i][j]=i*3+jprint(matrix[i][j],end=",")print('\n')>>>print[x*xforxinrange(1,11)][1,4,9,16,25,36,49,64,81,100]78[[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0]]列表生成式列表生成式(ListComprehensions)是Python內置的一種極其強大的生成list列表的表達式。如果要生成一個list[1,2,3,4,5,6,7,8,9]可以用range(1,10):>>>L=list(range(1,10))
#L是[1,2,3,4,5,6,7,8,9]可是,如果要生成[1*1,2*2,3*3,...,10*10],可以使用循環(huán):>>>L=[]>>>forxinrange(1,10):L.append(x*x)>>>L#[1,4,9,16,25,36,49,64,81]而列表生成式,可以用一句代替以上的繁瑣循環(huán)來完成上面的操作:>>>[x*xforxinrange(1,11)][1,4,9,16,25,36,49,64,81,100]79列表生成式80生成所有的撲克牌的列表>>>color=["草花","方塊","紅桃","黑桃"]>>>rank=["A","1","2","3","4","5","6","7","8","9","10","J","Q","K"]>>>print([m+nformincolorforninrank])formincolor
forninrank
l.append(m+n)['草花A','草花1','草花2','草花3','草花4','草花5','草花6','草花7','草花8','草花9','草花10','草花J','草花Q','草花K','方塊A','方塊1','方塊2','方塊3','方塊4','方塊5','方塊6','方塊7','方塊8','方塊9','方塊10','方塊J','方塊Q','方塊K','紅桃A','紅桃1','紅桃2','紅桃3','紅桃4','紅桃5','紅桃6','紅桃7','紅桃8','紅桃9','紅桃10','紅桃J','紅桃Q','紅桃K','黑桃A','黑桃1','黑桃2','黑桃3','黑桃4','黑桃5','黑桃6','黑桃7','黑桃8','黑桃9','黑桃10','黑桃J','黑桃Q','黑桃K']8182Python列表內置函數和方法832.4.2元組Python的元組(tuple)與列表類似,不同之處在于元組的元素不能修改。元組使用小括號(),列表使用方括號[]。元組中的元素類型也可以不相同。1.創(chuàng)建元組tup1=('中國','美國',1997,2000)tup2=(1,2,3,4,5)tup3="a","b","c","d"2.訪問元組tup1=('中國','美國',1997,2000)tup2=(1,2,3,4,5,6,7)print("tup1[0]:",tup1[0])#輸出元組的第一個元素print("tup2[1:5]:",tup2[1:5])#切片,輸出從第二個元素開始到第五個元素print(tup2[2:])843.元組連接元組中的元素值是不允許修改的,但可以對元組進行連接組合,實例如下:tup1=(12,34,56)tup2=(78,90)#tup1[0]=100 #修改元組元素操作是非法的。tup3=tup1+tup2 #連接元組,創(chuàng)建一個新的元組print(tup3)以上實例輸出結果:(12,34,56,78,90)4.刪除元組元組中的元素值是不允許刪除的,但可以使用del語句來刪除整個元組。85元組與列表轉換可以使用下面方法將元祖轉換為列表:列表對象=list(元組對象)tup=(1,2,3,4,5)list1=list(tup) #元組轉為列表print(list1) #返回[1,2,3,4,5]可以使用下面方法將列表轉換為元祖:元組對象=tuple(列表對象)nums=[1,3,5,7,8,13,20]print(tuple(nums)) #列表轉為元組,返回(1,3,5,7,8,13,20)862.4.3字典Python字典(dict)是一種可變容器模型,且可存儲任意類型對象,如字符串、數字、元組等。字典也被稱作關聯數組或哈希表。1.創(chuàng)建字典鍵值對key-value一個簡單的字典實例:dict={'zhangsan':91,'wangwu':80}也可如此創(chuàng)建字典:dict1={'abc':456};dict2={'abc':123,98.6:37};872.4.3字典2.訪問字典里的值訪問字典里的值時把相應的鍵放入方括號里,如下實例:dict={'Name':'王海','Age':17,'Class':'計算機一班'}print("dict['Name']:",dict['Name'])print("dict['Age']:",dict['Age'])3.修改字典dict={'Name':'王海','Age':17,'Class':'計算機一班'}dict['Age']=18 #更新鍵/值對(updateexistingentry)dict['School']="中原工學院" #增加新的鍵/值對(addnewentry)print("dict['Age']:",dict['Age'])print("dict['School']:",dict['School'];882.4.3字典4.刪除字典元素del語句允許使用鍵從字典中刪除元素(條目)。clear()方法清空字典所有元素。顯示刪除一個字典用del命令,如下實例:dict={'Name':'王海','Age':17,'Class':'計算機一班'}deldict['Name'] #刪除鍵是'Name'的元素(條目)dict.clear() #清空詞典所有元素deldict #刪除詞典,用del后字典不再存在892.4.3字典5.in運算字典里的in運算用于判斷某鍵是否在字典里,對于value值不適用。功能與has_key(key)方法相似。dict={'Name':'王海','Age':17,'Class':'計算機一班'}print('Age'indict) 6.獲取字典中的所有值dict1.values()以列表返回字典中的所有值。dict={'Name':'王海','Age':17,'Class':'計算機一班'}print(dict.values())dict1.keys()以列表返回一個字典所有的鍵。902.4.3字典5.in運算字典里的in運算用于判斷某鍵是否在字典里,對于value值不適用。功能與has_key(key)方法相似。dict={'Name':'王海','Age':17,'Class':'計算機一班'}print('Age'indict) 6.獲取字典中的所有值dict1.values()以列表返回字典中的所有值。dict={'Name':'王海','Age':17,'Class':'計算機一班'}print(dict.values())dict1.keys()以列表返回一個字典所有的鍵。912.4.4集合集合(set)是一個無序不重復元素的序列。集合基本功能是進行成員關系測試和刪除重復元素。1.創(chuàng)建集合可以使用大括號({})或者set()函數創(chuàng)建集合,注意:創(chuàng)建一個空集合必須用set()而不是{},因為{}是用來創(chuàng)建一個空字典。s1=set("hello") #利用字符串創(chuàng)建字典print(s1) #輸出{'l','h','o','e'},因為是無序的,不重復元素print(type(s1)) #輸出<class'set'>s2=set([3,5,9,10]) #創(chuàng)建一個數值集合student={'Tom','Jim','Mary','Tom','Jack','Rose'}print(student) #輸出集合,重復的元素被自動去掉score=[12,34,11,12,15,34]s2=set(score) #{34,11,12,15}922.4.4集合2.成員測試由于集合本身是無序的,所以不能對集合進行索引或切片操作,只能循環(huán)遍歷,或者使用in、notin來判斷集合元素存在/不存在。if('Rose'instudent):print('Rose在集合中')else:print('Rose不在集合中')93集合運算可以使用“-”、“|”、“&”運算符進行集合的差集、并集、交集運算。#set可以進行集合運算a=set('abcd')#a={'a','b','c','d'}b=set('cdef')print(a)print("a和b的差集:",a-b)#a和b的差集{'a','b'}print("a和b的并集:",a|b)#a和b的并集{'a','b','c','d','e'}print("a和b的交集:",a&b)#a和b的交集{'c','d'}print("a和b中不同時存在的元素:",a^b)#a和b中不同時存在的元素942.4.4集合4.集合中添加元素add()方法向集合內增加元素,如果添加的元素已經存在的話,則不執(zhí)行任何操作。s1=set(("Google","baidu","Taobao"))s1.add("Facebook")print(s1)#輸出{'Taobao','Facebook','Google','baidu'}952.4.4集合5.刪除集合元素remove(x)方法將元素x從集合s中移除,如果元素不存在,則會發(fā)生KeyError錯誤。s1=set(("Google","baidu","Taobao"))s1.remove("baidu")print(s1)#輸出{'Taobao','Google'}還可以使用pop()方法從集合中刪除并且返回一個任意的值。s1=set(("Google","baidu","Taobao"))a=s1.pop()#返回一個任意的值,如'baidu'b=s1.pop()#返回一個任意的值,如'Taobao'6.刪除集合所有元素clear()方法刪除集合中所有的元素。s1=set(("Google","baidu","Taobao"))s1.clear()#空集合962.4.4集合97ASCII碼表h是
0110
1000e是
0110
0101A010000016598第3章Python控制語句3.1選擇結構三種基本程序結構中的選擇結構,可用if語句、if…else語句和if…elif…else語句實現。if語句的語法形式如下所示:if表達式:
語句1#比較輸入的整數是否大于6a=input("請輸入一個整數:")#取得一個字符串a=int(a)#將字符串轉換為整數ifa>6:print(a,"大于6")【例3-1】輸入一個年份,判斷是否為閏年。閏年的年份必須滿足以下兩個條件之一:(1)能被4整除,但不能被100整除的年份都是閏年。(2)能被400整除的年份都是閏年。分析:設變量year表示年份,判斷year是否滿足條件(1)的邏輯表達式是:year%4==0andyear%100!=0條件(2)的邏輯表達式是:year%400==0兩者取“或”,即得到判斷閏年的邏輯表達式為:(year%4==0andyear%100!=0)oryear%400==0【例3-1】輸入一個年份,判斷是否為閏年。閏年的年份必須滿足以下兩個條件之一:(1)能被4整除,但不能被100整除的年份都是閏年。(2)能被400整除的年份都是閏年。分析:設變量year表示年份,判斷year是否滿足條件(1)的邏輯表達式是:year%4==0andyear%100!=0條件(2)的邏輯表達式是:year%400==0兩者取“或”,即得到判斷閏年的邏輯表達式為:(year%4==0andyear%100!=0)oryear%400==0if…else語句的語法形式如下所示:if表達式:
語句1else:
語句23.1.2if…else語句a=input("請輸入一個整數:")#取得一個字符串a=int(a)#將字符串轉換為整數ifa>6:print(a,"大于6")else
:print(a,"小于等于6")if表達式1:
語句1elif表達式2:
語句2
……elif表達式n:
語句nelse:
語句n+13.1.3if…elif…else語句多分支例題【例題】輸入學生的成績score,按分數輸出其等級:score≥90為優(yōu),90>score≥80為良,80>score≥70為中等,70>score≥60為及格,score<60為不及格。score=int(input(“請輸入成績”))#int()轉換字符串為整型ifscore>=90:print("優(yōu)")elifscore>=80:print("良")elifscore>=70:print("中")elifscore>=60:print("及格")else:print("不及格")3.2.1while語句while判斷條件:
執(zhí)行語句3.2循環(huán)結構count=0whilecount<9:print('Hello')count=count+1print("Goodbye!")print('Hello')print('Hello')print('Hello')print('Hello')print('Hello')print('Hello')print('Hello')print('Hello')print('Hello')print("Goodbye!")HelloHelloHelloHelloHelloHelloHelloHelloHelloGoodbye!3.2.1while語句while判斷條件:
執(zhí)行語句3.2循環(huán)結構count=0whilecount<9:
print('Thecountis:',count)count=count+1print("Goodbye!")Thecountis:0Thecountis:1Thecountis:2Thecountis:3Thecountis:4Thecountis:5Thecountis:6Thecountis:7Thecountis:8Goodbye!累加和【例題】求1+2+3+…+100。分析:計算累加和需要兩個變量,變量sum存放累加和,變量counter存放加數。重復將加數counter加到sum中。程序代碼:sum=0counter=1whilecounter<=100:sum=sum+countercounter+=1print("1到100之和為:",sum)3.2.2for語句for語句可以遍歷任何序列的項目,如一個列表、元祖或者一個字符串。1.for循環(huán)的語法for循環(huán)的語法格式如下:for循環(huán)索引值in序列
循環(huán)體for循環(huán)把字符串中字符遍歷出來。forletterin'Python':#第一個實例print('當前字母:',letter)for循環(huán)把列表中元素遍歷出來。fruits=['banana','apple','mango']forfruitinfruits:#第二個實例print('元素:',fruit)print("Goodbye!")程序運行結果:當前字母:P當前字母:y當前字母:t當前字母:h當前字母:o當前字母:n元素:banana元素:apple元素:mangoGoodbye!計算1~10的整數之和,可以用一個sum變量做累加。程序代碼:sum=0for(x=1;x<=10;x++)forxin[1,2,3,4,5,6,7,8,9,10]:sum=sum+xprint(sum)Python提供一個range()內置函數,可以生成一個整數序列。range(1,101)就可以生成1~100的整數序列,計算1~100的整數之和如下:sum=0forxinrange(1,101):sum=sum+xprint(sum)foriinrange(26):print(chr(ord("a")+i),end=",")abcdefghijklmnopqrstuvwxyz
字母的ASCII編碼是連續(xù)的3.2.2for語句2.通過索引循環(huán)對于一個列表,另外一種執(zhí)行循環(huán)的遍歷方式是通過索引(元素下標)。實例如下:fruits=['banana','apple','mango']foriinrange(len(fruits)):#
fori
in[0,1,2]:print('當前水果:',fruits[i])print("Goodbye!")3.2.3continue和break語句break語句在while循環(huán)和for循環(huán)中都可以使用,一般放在if選擇結構中,一旦break語句被執(zhí)行,將使得整個循環(huán)提前結束。素數n=55math.sqrt(n)i=2,3,4,5,……,n-1whilei<=n-1:ifn%i==0:breaki=i+1ifi==n:print“is”continue語句的作用是終止當前循環(huán),并忽略continue之后的語句,然后回到循環(huán)的頂端,提前進入下一次循環(huán)。sum=0forxin[1,2,3,4,5,6,7,8,9,10]:
ifx%2==0:break
sum=sum+xprint(sum)3.2.4循環(huán)嵌套Python語言允許在一個循環(huán)體里面嵌入另一個循環(huán)。如在while循環(huán)中可以嵌入for循環(huán);也可以在for循環(huán)中嵌入while循環(huán)。嵌套層次一般不超過3層,以保證可讀性。【例3-6】打印九九乘法表。【例3-7】使用嵌套循環(huán)輸出2~100之間的素數。3.3常用算法及應用實例累加與累乘【例3-8】求自然對數e的近似值,近似公式為:e=1+1/1!+1/2!+1/3!+...+1/n!求最大數和最小數求數據中的最大數和最小數的算法是類似的,可采用“打擂”算法。【例3-9】求區(qū)間[100,200]內10個隨機整數中的最大數。枚舉法枚舉法又稱為窮舉法,此算法將所有可能出現的情況一一進行測試,如計算“百錢買百雞”問題3.3常用算法及應用實例遞推與迭代1.遞推利用遞推算法或迭代算法,可以將一個復雜的問題轉換為一個簡單過程的重復執(zhí)行。這兩種算法的共同特點是,通過前一項的計算結果推出后一項。不同的是,遞推算法不存在變量的自我更迭,而迭代算法則在每次循環(huán)中用變量的新值取代其原值。【例3-12】輸出斐波那契(Fibonacci)數列的前20項即1,1,2,3,5,8,…。遞推與迭代2.迭代迭代法也稱輾轉法,是一種不斷用變量的舊值遞推新值的過程。【例3-14】迭代法求a的平方根。求平方根的公式為:
xn+1=(xn+a/xn)/2,求出的平方根精度是前后項差絕對值小于10-5。游戲初步——猜單詞游戲【案例】游戲初步——猜單詞游戲。計算機隨機產生一個單詞,打亂字母順序,供玩家去猜。
歡迎參加猜單詞游戲
把字母組合成一個正確的單詞.亂序后單詞:yaes請你猜:easy真棒,你猜對了!是否繼續(xù)(Y/N):y亂序后單詞:diufctlfi請你猜:difficutl對不起不正確.繼續(xù)猜:difficult真棒,你猜對了!是否繼續(xù)(Y/N):n第4章Python函數與模塊4.1函數的定義和使用在Python程序開發(fā)過程中,將完成某一特定功能并經常使用的代碼編寫成函數,放在函數庫(模塊)中供大家選用,在需要使用時直接調用,這就是程序中的函數。def函數名(函數參數):
函數體
return表達式或者值def
printHello(): #打印'hello'字符串print('hello')
def
printNum(): #輸出0--9數字foriinrange(0,10):print(i)return
defadd(a,b): #實現兩個數的和returna+bdefadd(a,b):returna+bprint(add(1,2))【例4-1】編寫函數實現最大公約數算法,通過函數調用代碼實現求最大公約數。4.1.2函數的使用lambda表達式可以用來聲明匿名函數,即沒有函數名字的臨時使用的小函數,只可以包含一個表達式,且該表達式的計算結果為函數的返回值,不允許包含其他復雜的語句,但在表達式中可以調用其他函數。例如:f=lambdax,y,z:x+y+zprint(f(1,2,3))等價于定義:deff(x,y,z):returnx+y+zprint(f(1,2,3))函數使用return返回值,也可以將Lambda表達式作為函數的返回值。最后需要補充一點:Python中函數是可以返回多個值的,如果返回多個值,會將多個值放在一個元組或者其他類型的集合中來返回。4.1.3lambda表達式deff(x,y,z):returnx+y+zprint(f(1,2,3))函數使用return返回值,也可以將Lambda表達式作為函數的返回值。最后需要補充一點:Python中函數是可以返回多個值的,如果返回多個值,會將多個值放在一個元組或者其他類型的集合中來返回。4.1.4函數的返回值defdemo(s):result=[0,0]forchins:if'a'<=ch<='z':result[1]+=1
elif'A'<=ch<='Z':result[0]+=1returnresult #返回列表print(demo('aaaabbbbC'))4.2.1函數形參和實參的區(qū)別形參全稱是形式參數,在用def關鍵字定義函數時函數名后面括號里的變量稱作為形式參數。實參全稱為實際參數,在調用函數時提供的值或者變量稱作為實際參數。例如:#這里的a和b就是形參defadd(a,b):returna+b#下面是調用函數add(1,2) #這里的1和2是實參4.2函數參數在Python中參數傳遞采用的是值傳遞,這個和C語言有點類似。對于絕大多數情況下,在函數內部直接修改形參的值不會影響實參。4.2.2參數的傳遞defaddOne(a):a+=1print(a) #輸出4a=3addOne(a)print(a) #輸出3在有些情況下,可以通過特殊的方式在函數內部修改實參的值。4.2.2參數的傳遞defmodify1(m,K):m=2K=[4,5,6]returndefmodify2(m,K):m=2K[0]=0#同時修改了實參的內容return#主程序n=100L=[1,2,3]modify1(n,L)print(n,L)modify2(n,L)4.2.3函數參數的類型在Python中函數參數定義和傳遞的方式相比而言就靈活多。1.默認值參數在于它能夠給函數參數提供默認值。def
display(a='hello',b='red'):print(a+b)#主程序display()display(b=‘world’,a=“qqq”)display(a='china')display('world')4.2.3函數參數的類型2.關鍵字參數避免了用戶需要牢記位置參數順序的麻煩。defdisplay(a,b):print(a)print(b)下面2句達到的效果是相同的。display(a='world',b='hello')display(b='hello',a='world')4.2.3函數參數的類型3.任意個數參數一般情況下我們在定義函數時,函數參數的個數是確定的,然而某些情況下我們是不能確定參數的個數的,比如要存儲某個人的名字和它的小名,某些人小名可能有2個或者更多個,此時無法確定參數的個數,只需在參數前面加上'*'或者'**'。def
storename(name,*nickName):print('realnameis%s'%name)forninnickName:print('小名',n)#主程序storename('張海')storename('張海','小海')storename('張海','小海','小豆豆')'*'和'**'表示能夠接受0到任意多個參數,'*'表示將沒有匹配的值都放在同一個元組中,'**'表示將沒有匹配的值都放在一個字典中。4.2.4變量的作用域1.局部變量在函數內定義的變量只在該函數內起作用,稱為局部變量。deffun():x=3count=2whilecount>0:print(x)count=count-1fun()print(x) #錯誤4.2.4變量的作用域2.全局變量還有一種變量叫做全局變量,它是在函數外部定義的,作用域是整個程序。全局變量可以直接在函數里面使用,但是如果要在函數內部改變全局變量值,必須使用global關鍵字進行聲明。x=2 #全局變量deffun1():print(x,end="")deffun2():globalx #在函數內部改變全局變量值必須使用global關鍵字
x=x+1print(x,end="")fun1()fun2()print(x,end="")4.3閉包和函數的遞歸調用4.3.1閉包(closure)在Python中,閉包指函數的嵌套。可以在函數內部定義一個嵌套函數。def
func_lib():
defadd(x,y):returnx+yreturnadd#返回函數對象
fadd=func_lib()print(fadd(1,2))4.3.2函數的遞歸調用1.遞歸調用函數在執(zhí)行的過程中直接或間接調用自己本身,稱為遞歸調用。Python語言允許遞歸調用。def
fac(x):ifx==1: #遞歸調用結束的條件
return1else:
return(fac(x-1)*x) #調用fac()函數本身print(fac(5))4.3.2函數的遞歸調用2.遞歸調用的執(zhí)行過程遞歸調用的執(zhí)行過程分為遞推過程和回歸過程兩部分。4.4內置函數內置函數(built-infunctions)又稱系統(tǒng)函數,或內建函數,是指Pyth
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 安全生產數字化轉型責任制實施細則
- 砌塊勾縫施工工藝
- 2026年安全生產應知應會考試題道知識點帶答案
- 貫徹落實企業(yè)全員崗位安全生產責任制的實施方案
- 物流企業(yè)駕駛員檢修維修安全操作規(guī)程
- 中外歷史綱要(下) 板塊4 第13單元 第37講 第2課時 社會主義國家的發(fā)展與變化
- 第一單元測試卷-2025-2026學年語文三年級上冊統(tǒng)編版
- 耕作學試題及其答案
- 企業(yè)數字化轉型對勞動力就業(yè)穩(wěn)定性影響跨國比較研究方法
- 摩托駕駛證考試題
- 2026年南京市中考語文試卷及答案
- 2026廣西數字金服科技有限公司招聘6人筆試模擬試題及答案詳解
- 2026年江蘇省蘇州市《保安員證》考試題庫含答案(完整)
- 2025年MLED直顯產業(yè)白皮書(節(jié)選)
- 公立醫(yī)院行政管理崗招聘考試核心考點筆記:醫(yī)療質量安全核心制度
- 腳手架施工安全技術安全生產模板
- 2026年政府會計考試高頻考點解析
- 2026年備考安全員之B證(項目負責人)通關題庫(附帶答案)
- YY 0017-2026骨接合植入器械金屬接骨板
- 肝移植科普講解
- 架空輸電線路工作人員崗位技能培訓考試題庫含答案
評論
0/150
提交評論