版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Machine
Learning
with
Python1.1目錄1.21.3Python概述Python變量與簡(jiǎn)單數(shù)據(jù)類型Python程序結(jié)構(gòu)1.4案例——人機(jī)對(duì)話猜數(shù)1.5延伸閱讀——開源編程Python概述本節(jié)介紹Python的產(chǎn)生與發(fā)展、Python的特點(diǎn)、Python的應(yīng)用領(lǐng)域和PyCharm1.13
Python的產(chǎn)生Python語言起源于1989年年末。Guido從高級(jí)教學(xué)語言ABC(AllBasicCode)中汲取了大量語法,并從系統(tǒng)編程語言Modula-3借鑒了錯(cuò)誤處理機(jī)制,從而開發(fā)了命名為Python的新腳本解釋程序。Python的發(fā)展Python語言產(chǎn)生后,于1991年年初以開源方式公開發(fā)行第一個(gè)版本Python1.0。2000年10月發(fā)布了Python2.0,增加了許多新的語言特性。2008年12月發(fā)布了Python3.0,該版本在語法上有較大變化。Python3.x的設(shè)計(jì)理念更加合理、高效和人性化,代碼開發(fā)和運(yùn)行效率更高。Python官方于2019年9月宣布,2020年1月1日起停止對(duì)Python2.x的維護(hù)和更新。所以,使用Python2.x系列的用戶應(yīng)盡快轉(zhuǎn)換成3.x并且選擇較高的版本。1.1.1Python簡(jiǎn)介Python的產(chǎn)生與發(fā)展4
1.1.1
Python簡(jiǎn)介1)簡(jiǎn)單易學(xué)。Python語法結(jié)構(gòu)簡(jiǎn)單,遵循優(yōu)雅、明確、簡(jiǎn)單的設(shè)計(jì)理念,易學(xué)、易讀、易維護(hù)。2)解釋型語言。Python解釋器將源代碼轉(zhuǎn)換成Python的字節(jié)碼,由Python虛擬機(jī)逐條執(zhí)行字節(jié)碼指令,即可完成程序的執(zhí)行,用戶不再擔(dān)心如何編譯、鏈接是否正確等,使得Python更加簡(jiǎn)單方便。3)面向?qū)ο蟆ython既支持面向過程的編程又支持面向?qū)ο蟮木幊?,支持靈活的程序設(shè)計(jì)方式。4)免費(fèi)和開源。Python是FLOSS(自由/開放源碼軟件)之一。簡(jiǎn)單地說,用戶可以自由地發(fā)布這個(gè)軟件的副本,閱讀和更改其源代碼,并可將它的一部分用于新的自由軟件中。5)跨平臺(tái)和可移植性。由于Python的開源特性,經(jīng)過改動(dòng),Python已經(jīng)被移植到Windows、Linux、MacOS、Android等不同的平臺(tái)上工作。6)豐富的標(biāo)準(zhǔn)庫。除了Python官方提供的非常完善的標(biāo)準(zhǔn)庫外,還具有豐富的第三方庫,有助于處理各種工作,包括輸入/輸出、文件系統(tǒng)、數(shù)據(jù)庫、網(wǎng)絡(luò)編程、圖形處理、文本處理等,供開發(fā)者直接調(diào)用,省去編寫大量代碼的過程。7)可擴(kuò)展性和可嵌入性。如果用戶需要讓自己的一段關(guān)鍵代碼運(yùn)行更快,或者是編寫一些不愿開放的算法,則可以將那部分程序用C/C++編寫,然后在Python程序中調(diào)用它們。同樣,用戶可以把Python嵌入到C/C++程序中,為程序用戶提供腳本功能。Python的特點(diǎn)5
1.1.1Python簡(jiǎn)介1)操作系統(tǒng)管理與維護(hù)。Python提供API(ApplicationProgrammingInterface應(yīng)用程序編程接口)可以方便地對(duì)操作系統(tǒng)進(jìn)行管理和維護(hù)。2)科學(xué)計(jì)算與數(shù)據(jù)可視化。Python提供了很多用于科學(xué)計(jì)算與數(shù)據(jù)可視化的模塊,如NumPy、SciPy、Matplotlib等,可實(shí)現(xiàn)科學(xué)計(jì)算、二維圖表、三維數(shù)據(jù)可視化、三維動(dòng)畫演示、圖像處理以及界面設(shè)計(jì)等應(yīng)用領(lǐng)域。3)圖形用戶界面(GUI)開發(fā)。Python支持GUI開發(fā),可以使用Tkinter、wxPython、PyQt庫開發(fā)各種跨平臺(tái)的桌面軟件。4)文本處理。Python提供的re模塊能支持正則表達(dá)式,還提供SGML、XML分析模塊,可以利用Python開發(fā)XML程序。5)網(wǎng)絡(luò)編程及Web開發(fā)。Python提供的Socket模塊對(duì)Socket接口進(jìn)行了二次封裝,支持Socket接口的訪問,以支持網(wǎng)絡(luò)編程。Python還提供了urllib、cookielib、httplib、scrap等大量模塊用于對(duì)網(wǎng)頁內(nèi)容進(jìn)行讀取和處理,并結(jié)合多線程編程以及其他有關(guān)模塊可以快速實(shí)現(xiàn)Web應(yīng)用開發(fā)。Python還支持Web網(wǎng)站開發(fā),搭建Web框架,目前比較流行的開發(fā)框架有Web2Py、Django等。6)數(shù)據(jù)庫編程。Python提供了支持所有主流關(guān)系數(shù)據(jù)庫管理系統(tǒng)的接口DB-API(數(shù)據(jù)庫應(yīng)用程序編程接口)規(guī)范的模塊,用于與SQLite、MySQL、SQLServer、Oracle等數(shù)據(jù)庫通信。另外,Python自帶一個(gè)Gadfly模塊,提供了完整的SQL環(huán)境。7)游戲開發(fā)。Python在網(wǎng)絡(luò)游戲開發(fā)中得到廣泛應(yīng)用。Python提供的Pygame模塊可以在Python程序中創(chuàng)建功能豐富的游戲和多媒體程序。Python的應(yīng)用領(lǐng)域6
1.1.2
Python開發(fā)環(huán)境搭建Python的下載與安裝從Python官網(wǎng)下載Python安裝包。例如,選擇Windows環(huán)境的安裝包,網(wǎng)址為“/downloads/windows/”,運(yùn)行界面如圖1-1a所示,下載最新版Python3.7.4安裝包,如圖1-1b所示,可根據(jù)需要選擇下載32位、64位安裝包。
a)
圖1-1Python安裝包下載b)
7
1.1.2
Python的安裝與配置Python3.7.4安裝包下載后即可開始安裝,以64位系統(tǒng)為例,安裝過程如下:開始安裝Python。雙擊安裝包文件,安裝向?qū)Ы缑嫒鐖D1-2所示,選中“AddPython3.7toPATH”復(fù)
選框,以配置Python運(yùn)行路徑。定制安裝。單擊圖1-2中的“Customizeinstallation”選項(xiàng),選擇特性界面如圖1-3所示,此時(shí)不需做任何修改,直接單擊“Next”按鈕。設(shè)置高級(jí)選項(xiàng)。根據(jù)需要設(shè)置“AdvancedOptions”,如設(shè)置Python安裝路徑等,如圖1-4所示,單擊“Install”按鈕開始安裝,安裝進(jìn)度如圖1-5所示。安裝完成。安裝成功界面如圖1-6所示,單擊“Close”按鈕結(jié)束安裝。Python3.7.4程序組如圖1-7所示。圖1-2定制安裝Python8
圖1-3Python選定特性設(shè)置圖1-4Python高級(jí)選項(xiàng)設(shè)置圖1-5Python安裝進(jìn)行中圖1-6Python成功安裝
9
圖1-7Python3.7程序組10
1.1.2
Python的安裝與配置
系統(tǒng)環(huán)境變量的設(shè)置Windows中添加環(huán)境變量有以下方法。
安裝時(shí)直接添加。安裝Python系統(tǒng)時(shí)選中圖1-2中“AddPython3.7toPATH”復(fù)選框,則系統(tǒng)自動(dòng)將安裝路徑添加到環(huán)境變量Path中。安裝后手動(dòng)添加。如果安裝時(shí)未選中圖1-2中“AddPython3.7toPATH”復(fù)選框,則可在安裝完成后手動(dòng)添加。其方法如下(操作過程如圖1-8所示)。圖1-8手動(dòng)添加Python環(huán)境變量11
1.1.2
Python的安裝與配置
Python運(yùn)行Python安裝完成后,可以選擇圖1-7中“Python3.7(64-bit)”啟動(dòng)Python解釋器,也可以選擇圖1-7中“IDLE(Python3.764-bit)”啟動(dòng)Python集成開發(fā)環(huán)境IDLE。Python解釋器啟動(dòng)后,可以直接在其提示符(>>>)后輸入語句。例如,在提示符>>>后輸入一個(gè)輸出語句print("HelloPython!"),下一行直接解釋運(yùn)行輸出“HelloPython!”,不需編譯直接解釋運(yùn)行,如圖1-9所示。與直接運(yùn)行Python解釋器相似,IDLE同樣輸出“HelloPython!”,如圖1-10所示。圖1-9Python3.7.4解釋器運(yùn)行窗口圖1-10Python3.7.4IDLE運(yùn)行窗口12
1.1.2
Python的安裝與配置
JupyterNoteBook下載與安裝可以從官網(wǎng)“/distribution/#download-section”(如圖1-11所示)選擇合適系統(tǒng)(如Windows系統(tǒng))下合適的版本(如Python3.7version)下載,然后運(yùn)行安裝文件“Anaconda3-2019.07-Windows-x86_64.exe”,按提示步驟完成安裝即可,安裝完成后的程序組如圖1-12所示。圖1-11Anaconda下載界面圖1-12Anaconda程序組13
1.1.2Python的安裝與配置
JupyterNoteBook運(yùn)行單擊圖1-10中的JupyterNoteBook項(xiàng)啟動(dòng)JupyterNoteBook。啟動(dòng)JupyterNoteBook會(huì)打開一個(gè)網(wǎng)頁,在該網(wǎng)頁右上角單擊菜單“New”,選擇“Python3”(如圖1-13所示),即打開一個(gè)新窗口,可以在該窗口中編寫和運(yùn)行Python代碼,如圖1-14所示,另外,還可以選擇“File->Downloadas”命令將當(dāng)前代碼及運(yùn)行結(jié)果保存為不同形式的文件,方便以后學(xué)習(xí)和演示,如圖1-15所示。圖1-13JupyterNoteBook運(yùn)行界面
圖1-15JupyterNoteBook代碼和運(yùn)行結(jié)果保存不同形式圖1-14JupyterNoteBook運(yùn)行Python程序14
1.1.2
Python的安裝與配置
Pycharm下載與安裝PyCharm官方下載網(wǎng)址為“/pycharm/download/”,提供Professional(專業(yè)版)和Community(社區(qū)版,免費(fèi)開源版本)兩個(gè)版本的PyCharm供用戶選擇安裝。下面以Windows環(huán)境下安裝PyCharmCommunity版為例。安裝初始界面。運(yùn)行下載的PyCharm安裝包文件“pycharm-community-2019.2.2.exe”,進(jìn)入歡迎界面,如圖1-16所示,單擊“Next”按鈕。設(shè)置安裝路徑。選擇安裝位置,如圖1-17所示。設(shè)置后單擊“Next”按鈕。設(shè)置安裝選項(xiàng)??芍付ń⒖旖莘绞郊爸付ㄊ欠衽c“.py”文件關(guān)聯(lián),如圖1-18所示,設(shè)置后單擊“Next”按鈕。設(shè)置開始菜單文件夾。如圖1-19所示,設(shè)置后單擊“Next”按鈕,安裝進(jìn)度如圖1-20所示,完成后單擊“Next”按鈕。PyCharm安裝完成。如圖1-21所示,單擊“Finish”按鈕完成安裝。圖1-16PyCharm安裝歡迎界面
15
圖1-17PyCharm安裝目錄設(shè)置圖1-18PyCharm安裝選項(xiàng)設(shè)置圖1-19PyCharm開始菜單文件夾設(shè)置圖1-20PyCharm安裝進(jìn)度
16
圖1-21PyCharm安裝完成17
1.1.2
Python的安裝與配置
PyCharm運(yùn)行選擇“開始->所有程序->JetBrains->JetBrainsPyCharmCommunityEdition2019.2.2”啟動(dòng)PyCharm,其運(yùn)行窗口如圖1-22所示??梢孕陆≒ython源程序文件,輸入源程序并調(diào)試運(yùn)行等一系列操作。注意,PyCharm初始運(yùn)行界面為黑色背景,若需要改變背景顏色為其他顏色(如白色,如圖1-22所示),可以單擊“File->Setting...”選項(xiàng),彈出“Settings”對(duì)話框,選擇“Editor->ColorScheme->ConsoleColors”選項(xiàng),將“Scheme:”設(shè)置為“Default”選項(xiàng),背景即變?yōu)榘咨鐖D1-23所示。圖1-22PyCharm運(yùn)行窗口圖1-23設(shè)置PyCharm運(yùn)行窗口的背景顏色18
1.1.3Python程序基本編寫方法
交互式(命令行方式)進(jìn)入Python交互式的方法有以下兩種:從命令行窗口啟動(dòng)Python。選擇Windows開始菜單,在“搜索程序和文件”框中輸入cmd<Enter>(<Enter>表示按Enter鍵,下同),啟動(dòng)命令行窗口,在命令行窗口中輸入Python<Enter>,進(jìn)入Python交互式解釋器,如圖1-9所示。此時(shí)用戶可以在提示符>>>下輸入Python命令或調(diào)用函數(shù),以命令行方式交互式地使用Python解釋器。從Python程序組啟動(dòng)Python。選擇Windows開始菜單下的Python程序組(如圖1-7所示),單擊其中的“Python3.7(64-bit)”或“IDLE(Python3.764-bit)”菜單項(xiàng)均可啟動(dòng)Python交互式解釋器,如圖1-10所示。19
1.1.3Python程序基本編寫方法
腳本式(源程序文件方式)在交互方式下輸入Python代碼雖然方便,但是這些語句不能保存,無法重復(fù)執(zhí)行或留作將來使用。因此,Python提供源程序文件方式,用戶可以使用記事本、集成開發(fā)工具(IDLE、PyCharm等)編寫源代碼,并將源程序保存成擴(kuò)展名為“.py”的Python腳本“.py”文件,然后在Python的命令行方式下輸入如下語句執(zhí)行該腳本文件,同樣可以得到運(yùn)行結(jié)果。pythonfilename.py其中,filename是源程序文件名。20
1.1.3Python程序基本編寫方法【例1-2】編寫程序并保存為腳本文件,文件名為“example1_2.py”。程序?qū)崿F(xiàn)功能:在屏幕上分兩行輸出“HelloPython!”和“歡迎使用Python!”。1)用記事本等文本編輯器(注意不能使用MSWord等字處理軟件)編寫程序源代碼,內(nèi)容如下。文件以“example1_2.py”命名保存在“d:\python311”文件夾下。
#example1_2.py
#encoding:UTF-8
print("HelloPython!")#在屏墓上輸出“He1lo.Python!”
print("歡迎使用Pyhton!")#在屏幕上輸出“歡迎使用Python!”
啟動(dòng)命令提示符窗口運(yùn)行該源程序文件,輸入如下命令:
pythond:\python311\example1_2.py21
1.1.3Python程序基本編寫方法【例1-3】編寫程序,程序?qū)崿F(xiàn)功能:求兩個(gè)數(shù)之和。
【解】參考程序如下:
a=3 #給變量a賦值3
b=5 #給變量b賦值5
sum=a+b #求a,b之和,保存在sum中
print('a=',a,'b=',b,'sum=',sum) #輸出a,b及sum的值
程序運(yùn)行結(jié)果如下:
a=3b=5sum=822
1.1.3Python程序基本編寫方法
Python幫助在Python中可以使用help()方法獲取幫助信息。在IDLE的環(huán)境下獲得Python幫助信息分為以下3種情況。獲取內(nèi)置函數(shù)和類型的幫助信息。為獲得某個(gè)內(nèi)置函數(shù)的幫助信息,則可以在提示符>>>后面直接輸入:help(對(duì)象名)。例如,想獲得內(nèi)置函數(shù)sum的幫助信息,則在提示符后面輸入help(sum),即可獲得內(nèi)置函數(shù)sum的幫助信息,如圖1-28所示。獲取模塊中的成員函數(shù)信息。為獲得某個(gè)模塊中成員函數(shù)的幫助信息,則需先導(dǎo)入該模塊,然后再輸入:help(模塊名.對(duì)象名)。例如,想獲得math模塊中的fabs成員函數(shù)幫助信息,則需先導(dǎo)入math模塊,然后輸入help(math.fabs),即可獲得該函數(shù)的幫助信息,如圖1-29所示。圖1-28
Python內(nèi)置函數(shù)sum幫助信息圖1-29
math模塊中fabs函數(shù)的幫助信息23
1.1.3Python程序基本編寫方法
Python幫助獲取整個(gè)模塊的幫助信息。為獲得整個(gè)模塊的幫助信息,則需先導(dǎo)入該模塊,然后輸入:help(模塊名)。例如,想獲得math模塊中所有的幫助信息,則需先導(dǎo)入math模塊,然后輸入help(math),即可獲取整個(gè)模塊的幫助信息,如圖1-30所示。另外,Python提供了非常完善的Python幫助文檔,在Python安裝目錄的doc文件夾下,文件名為“python374.chm”,雙擊即可打開,如圖1-31所示。圖1-30整個(gè)math模塊中的幫助信息圖1-31Python的幫助文檔24
1.1.3Python程序基本編寫方法
Python錯(cuò)誤語法錯(cuò)誤。語法錯(cuò)誤是指不符合Python程序的語法規(guī)則,比如語句格式錯(cuò)、函數(shù)引用格式錯(cuò)等。Python解釋器在程序執(zhí)行過程會(huì)檢測(cè)出程序存在的語法錯(cuò)誤,并指出出錯(cuò)的一行,在最先找到的錯(cuò)誤位置做出標(biāo)記。邏輯錯(cuò)誤。邏輯錯(cuò)誤是指用戶編寫的程序已經(jīng)沒有語法錯(cuò)誤,可以運(yùn)行,但運(yùn)行卻得不到所期望的結(jié)果(或正確的結(jié)果)或者運(yùn)行期間發(fā)生錯(cuò)誤。Python錯(cuò)誤與調(diào)試25
1.1.3Python程序基本編寫方法
Python調(diào)試
Python調(diào)試方法主要有:可以通過Python解釋器查找、定位語法錯(cuò)誤??梢栽赑ython程序的某些關(guān)鍵位置增加print語句顯示直接出變量的值,從而確定程序執(zhí)行到此處是否出錯(cuò)。這種方法簡(jiǎn)單、直接,但比較麻煩,因?yàn)殚_發(fā)人員必須在所有可疑的地方都插入輸出語句,程序調(diào)試完成后,必須將這些輸出語句全部清除。可以利用調(diào)試器(Debugger)調(diào)試程序以幫助程序員查找程序的邏輯錯(cuò)誤。調(diào)試器的功能主要包括暫停程序執(zhí)行、檢查和修改變量、調(diào)用方法等,但調(diào)試器并不更改程序代碼。程序員可以利用調(diào)試器分析被調(diào)試程序的數(shù)據(jù),并監(jiān)視程序的執(zhí)行流程。IDLE、PyCharm等集成開發(fā)環(huán)境均提供了調(diào)試器幫助開發(fā)人員查找邏輯錯(cuò)誤。DebugControl調(diào)試工具可以完成各種調(diào)試跟蹤功能,其主要功能如表1-1所示。Python錯(cuò)誤與調(diào)試26
1.1.3Python程序基本編寫方法
DebugControl調(diào)試工具可以完成各種調(diào)試跟蹤功能,其主要功能如表1-1所示。表1-1DebugControl調(diào)試工具主要功能功能名稱功能使用說明執(zhí)行說明Go直接運(yùn)行代碼到指定的斷點(diǎn)處在源文件編程窗口中的指定代碼行處,按鼠標(biāo)右鍵設(shè)置SetBreakpoint,可以用ClearBreakpoint取消Step一次讓程序執(zhí)行一行代碼,如果當(dāng)前行是一個(gè)函數(shù)調(diào)用,則Debugger會(huì)跳進(jìn)這個(gè)函數(shù)里面在DebugControl窗口上直接單擊Step按鈕Over讓程序一次執(zhí)行一行代碼,如果當(dāng)前行是一個(gè)函數(shù)調(diào)用,則Debugger不會(huì)跳進(jìn)這個(gè)函數(shù),而是直接得到其運(yùn)行結(jié)果,并移動(dòng)到下一行在DebugControl窗口上直接單擊Over按鈕Out當(dāng)Debugger已進(jìn)入某一個(gè)函數(shù)調(diào)用的時(shí)候,可以直接跳出這個(gè)函數(shù);當(dāng)未進(jìn)入函數(shù)調(diào)用的時(shí)候(即在主程序中),則與Go作用相同在DebugControl窗口上直接單擊Out按鈕Quit退出調(diào)試過程在DebugControl窗口上直接單擊Quit按鈕Stack堆棧調(diào)用層次在DebugControl窗口上直接單擊Stack復(fù)選框Locals查看局部變量在DebugControl窗口上直接單擊Locals復(fù)選框Source跟進(jìn)源代碼在DebugControl窗口上直接單擊Source復(fù)選框Globals查看全局變量在DebugControl窗口上直接單擊Globals復(fù)選框27
1.1.3Python程序基本編寫方法1)代碼縮進(jìn)。代碼縮進(jìn)是Python語法中的強(qiáng)制要求。Python源程序的代碼之間的邏輯關(guān)系依賴于代碼塊的縮進(jìn)。對(duì)于類定義、函數(shù)定義、選擇結(jié)構(gòu),循環(huán)結(jié)構(gòu)以及異常處理結(jié)構(gòu),行尾的冒號(hào)以及下一行的縮進(jìn)表示一個(gè)代碼塊的開始,縮進(jìn)結(jié)束則表示一個(gè)代碼塊結(jié)束。同一個(gè)級(jí)別的代碼塊的縮進(jìn)量必須相同。在IDLE開發(fā)環(huán)境中,基本縮進(jìn)單位默認(rèn)為4個(gè)空格,也可以自定義基本縮進(jìn)量,選擇“Options->ConfigureIDLE”選項(xiàng),在彈出的Settings對(duì)話框的“Fonts/Tabs”選項(xiàng)卡中設(shè)置基本縮進(jìn)量2)適當(dāng)?shù)淖⑨?。注釋是為增?qiáng)代碼可讀性而添加的描述文字,對(duì)程序的執(zhí)行沒有任何影響。主要分為以下兩類注釋。單行注釋:程序中的單行注釋采用“#”開頭,可以從任意位置開始,既可以在語句行末尾、也可以獨(dú)立成行。多行注釋:可以使用多個(gè)“#”開頭進(jìn)行多行注釋,也可采用一對(duì)三引號(hào)將多行注釋字符串括起來。3)清晰的模塊導(dǎo)入。導(dǎo)入模塊時(shí)每個(gè)import語句導(dǎo)入一個(gè)模塊,盡量避免一次導(dǎo)入多個(gè)模塊。4)代碼過長折行處理。如果一行語句過長,可以考慮拆分成多個(gè)短一些的語句,以保證代碼具有較好的可讀性。也可以在行尾使用續(xù)行符“\”來表示下面緊接的一行仍屬于當(dāng)前語句,但一般建議使用圓括號(hào)來包含多行內(nèi)容。5)必要的空格和空行。最好在每個(gè)類、函數(shù)定義和一段完整的功能代碼之后增加一個(gè)空行,在運(yùn)算符兩側(cè)各增加一個(gè)空格,逗號(hào)后面增加一個(gè)空格等,以增強(qiáng)程序的可讀性。6)常量名中所有字母大寫,由下劃線連接各個(gè)單詞,類名中首字母大寫。變量和簡(jiǎn)單數(shù)據(jù)類型本節(jié)介紹Python的標(biāo)識(shí)符變量,基本數(shù)據(jù)類型,數(shù)據(jù)運(yùn)算符及表達(dá)式1.229
1.2.1
標(biāo)識(shí)符和變量標(biāo)識(shí)符標(biāo)識(shí)符在不同的應(yīng)用環(huán)境下有不同的含義,一般是用于標(biāo)識(shí)某個(gè)實(shí)體的符號(hào)。在計(jì)算機(jī)編程語言中,標(biāo)識(shí)符是命名變量、函數(shù)等名字的有效字符集合。在Python語言中,包、模塊、類、函數(shù)、變量等的名稱必須為合法有效的標(biāo)識(shí)符。合法的標(biāo)識(shí)符
在Python中,標(biāo)識(shí)符可以包括英文字母、數(shù)字及下劃線,但要符合以下規(guī)則。標(biāo)識(shí)符必須以字母或下劃線開始,不能以數(shù)字開始。標(biāo)識(shí)符區(qū)分英文字母的大小寫。標(biāo)識(shí)符中不能出現(xiàn)分隔符、標(biāo)點(diǎn)符號(hào)或運(yùn)算符。標(biāo)識(shí)符不能使用關(guān)鍵字。最好不要使用內(nèi)置模塊名、類型名、函數(shù)名、已經(jīng)導(dǎo)入的模塊名及其成員名作為標(biāo)識(shí)符。例如,a_int、c_float、_strname為正確的標(biāo)識(shí)符;而100int、yes=no、or為錯(cuò)誤的標(biāo)識(shí)符。30
關(guān)鍵字
關(guān)鍵字是預(yù)定義的保留標(biāo)識(shí)符。關(guān)鍵字有特殊的固定語法含義,不能在程序中被用戶定義為普通標(biāo)識(shí)符,否則將會(huì)產(chǎn)生編譯錯(cuò)誤。Python3的關(guān)鍵字如表2-1所示。下劃線標(biāo)識(shí)符通常以下劃線起始的標(biāo)識(shí)符具有特殊意義。以單下劃線起始(_xxx)的標(biāo)識(shí)符代表不能直接訪問的類屬性,需要通過類提供的接口進(jìn)行訪問,不能用“fromxxximport*”導(dǎo)入。以雙下劃線起始(__xxx)的標(biāo)識(shí)符代表類的私有成員。以雙下劃線起始和結(jié)尾(__xxx__)的標(biāo)識(shí)符代表Python中特殊方法專用的標(biāo)識(shí),如__init__代表類的構(gòu)造函數(shù)。表2-1Python3關(guān)鍵字FalseNoneTrueandasassertasyncawaitbreakclasscontinuedefdelelifelseexceptfinallyforfromglobalifimportinislambdanonlocalnotorpassraisereturntrywhilewithyield31
變量和常量
Python3的對(duì)象可分為不可變對(duì)象(immutable)和可變對(duì)象(mutable)。不可變對(duì)象一旦創(chuàng)建,其值在運(yùn)行中不能被修改,可變對(duì)象的值在運(yùn)行中可以被修改。Python程序中表示數(shù)據(jù)的量可以分為兩種:常量(不可變對(duì)象)和變量(可變對(duì)象)。常量常量是指在程序執(zhí)行過程中,其值不能發(fā)生改變的量,如3、-6、35.8、"xyz"等。但Python語言不支持常量,即沒有語法規(guī)則限制改變一個(gè)常量的值,Python語言只是使用約定,聲明在程序運(yùn)行中不會(huì)改變的變量即為常量,通常使用全部大寫字母(也可使用下劃線增加可讀性)表示常量名。例如,定義PI為常量的語句:>>>PI=3.14。變量變量指在程序執(zhí)行過程中,其值可以發(fā)生改變的量。變量用變量名標(biāo)識(shí),如x、a1、n等為合法的變量名。在Python中,不需要事先聲明變量名及其類型,直接賦值使用即可根據(jù)變量的值自動(dòng)創(chuàng)建各種類型的變量。例如,語句“n=5”的功能:Python根據(jù)整數(shù)對(duì)象5自動(dòng)創(chuàng)建了整型變量n,n指向整型對(duì)象5,即n賦值為5。32
1.2.2
基本數(shù)據(jù)類型Python語言中提供了幾種數(shù)據(jù)類型,包括數(shù)字(Number)、字符串(String)、列表(List)、元組(Tuple)、集合(Set)、字典(Dictionary)和序列(Sequence)等,下面分別進(jìn)行介紹。數(shù)字類型數(shù)字屬于Python不可變對(duì)象,即修改變量值的時(shí)候并不是真的修改變量的值,而是先把值存放到內(nèi)存單元中,然后修改變量使其指向了新的內(nèi)存單元地址。Python中有4種不同的數(shù)字類型,分別是int(整型)、float(浮點(diǎn)型)、bool(布爾型)和complex(復(fù)數(shù)型)。整型整型數(shù)字就是沒有小數(shù)部分的數(shù)值,包括正整數(shù)、0和負(fù)整數(shù),且無大小限制。整數(shù)可以使用不同的進(jìn)制來表示。十進(jìn)制整數(shù)。沒有前綴,其數(shù)碼為0~9,如12、9810、-167。八進(jìn)制整數(shù)。以0o作前綴,其數(shù)碼為0~7,八進(jìn)制整數(shù)通常為無符號(hào)數(shù),如0o13、0o100、0o2019,其對(duì)應(yīng)的十進(jìn)制數(shù)分別為11、64和1031。十六進(jìn)制整數(shù)。以0X或0x作前綴,其數(shù)碼為0~9,A-F或a-f(代表10-15),如0XB4、0xF0、0x34D,其對(duì)應(yīng)的十進(jìn)制數(shù)分別為180、240和845。33
浮點(diǎn)型浮點(diǎn)型數(shù)字就是包含小數(shù)點(diǎn)的實(shí)數(shù),如123.04、0.6789、-9.0909、56.3-e2、3.141e+18、-133.4e78等。布爾型布爾型是用來表示邏輯“是”、“非”的一種類型,只有兩個(gè)值,True和False。關(guān)于布爾值,Python中規(guī)定:任何對(duì)象都可以用來判斷其真假而用于條件、循環(huán)語句或邏輯運(yùn)算中。對(duì)象判斷中None、False、0值(0、0.0、0j)、空的序列值(''、[]、())、空的映射值{}都為False;其他對(duì)象值都為True。復(fù)數(shù)型復(fù)數(shù)由兩部分組成:實(shí)部和虛部。復(fù)數(shù)的基本形式為:a+bj、a+bJ或complex(a,b)。其中,a是實(shí)部,b是虛部。如3.33j、-23-1.12j、-812.j、.156j、(9.19+3e-27j)、-3.12+0J、1.9+e-1j等。字符類型字符串是Python中最常用的數(shù)據(jù)類型,可以使用單引號(hào)、雙引號(hào)或三引號(hào)來創(chuàng)建字符串。如'HelloWorld'、"Python"、'''Yes123'''等。34
序列、列表、元組、集合、字典序列序列是Python中一種最基本的數(shù)據(jù)結(jié)構(gòu),序列中每個(gè)元素都有一個(gè)與位置相關(guān)的序號(hào),稱為索引。通過索引可以訪問序列元素,從而進(jìn)行各種處理。列表列表是一種序列類型。用一對(duì)方括號(hào)“[]”將元素括起來,以逗號(hào)進(jìn)行分隔。列表中元素的類型可以不相同。如[3,5,7.9]、['gkh','yuv',4]、[True,5,7,'cde']等。元組元組也是一種序列類型。用一對(duì)圓括號(hào)“()”將元素括起來,以逗號(hào)隔開,元素類型可相同也可不同。如(2,4,6)、(False,'abc',2)、('gkh','yuv',3.7)等。集合集合是無序但不重復(fù)元素的序列。用一對(duì)花括號(hào)“{}”將元素括起來,以逗號(hào)隔開,如{'Tom','Jim','Jack','Luse'}。字典字典是Python中唯一內(nèi)建的映射類型,是一個(gè)無序的“鍵:值”對(duì)集合,可用來實(shí)現(xiàn)通過數(shù)據(jù)查找關(guān)聯(lián)數(shù)據(jù)的功能。字典用大括號(hào)“{}”來表示,鍵和值之間用冒號(hào)隔開。如{'Jack':1134,'Tom':2310,'Luse':6617}。35
1.2.3運(yùn)算符和表達(dá)式在計(jì)算機(jī)程序中,運(yùn)算符是表示實(shí)現(xiàn)某種運(yùn)算的符號(hào)。表達(dá)式是由運(yùn)算符(操作符)和運(yùn)算數(shù)(操作數(shù))組成的式子,即操作數(shù)、運(yùn)算符和圓括號(hào)按照一定規(guī)則連接起來組成表達(dá)式。運(yùn)算符表示對(duì)操作數(shù)進(jìn)行何種運(yùn)算的符號(hào),如+、-、*、/等運(yùn)算。操作數(shù)包含常量、變量和函數(shù)等。表達(dá)式通過運(yùn)算后產(chǎn)生運(yùn)算結(jié)果,返回結(jié)果對(duì)象,運(yùn)算結(jié)果對(duì)象的類型由操作數(shù)和運(yùn)算符共同決定。下面分別介紹運(yùn)算符、表達(dá)式及其相關(guān)知識(shí)。運(yùn)算符Python語言支持以下類型的運(yùn)算符:算術(shù)運(yùn)算符、關(guān)系(比較)運(yùn)算符、賦值運(yùn)算符、邏輯運(yùn)算符、位運(yùn)算符、成員運(yùn)算符、身份運(yùn)算符。算術(shù)運(yùn)算符算術(shù)運(yùn)算符實(shí)現(xiàn)數(shù)學(xué)運(yùn)算,其運(yùn)算對(duì)象通常是數(shù)值型數(shù)據(jù)。Python中的算術(shù)運(yùn)算符如表2-2所示,假設(shè)變量x為10,變量y為3。36
算術(shù)運(yùn)算符算術(shù)運(yùn)算符實(shí)現(xiàn)數(shù)學(xué)運(yùn)算,其運(yùn)算對(duì)象通常是數(shù)值型數(shù)據(jù)。Python中的算術(shù)運(yùn)算符如表1-2所示,假設(shè)變量x為10,變量y為3。表1-2算術(shù)運(yùn)算符運(yùn)算符示例功能描述運(yùn)行結(jié)果+(加)x+yx與y相加13-(減)x-yx與y相減7*(乘)x*yx與y相乘30/(除)x/yx除以y3.3333333333333335//(整除)x//yx整除y,返回x/y的整數(shù)部分3%(模)x%yx整除y的余數(shù),即x-(x//y)*y的值1-(負(fù)號(hào))-xx的負(fù)數(shù)-10+(正號(hào))+xx的正數(shù)10**(乘方)x**yx的y次冪100037
關(guān)系運(yùn)算符
關(guān)系運(yùn)算符用于對(duì)兩個(gè)值進(jìn)行比較,即對(duì)兩個(gè)操作數(shù)對(duì)象的大小關(guān)系進(jìn)行判斷,運(yùn)算結(jié)果為True(真)或False(假)。Python中的關(guān)系運(yùn)算符如表1-3所示,假設(shè)變量x為10,變量y為20。表1-3比較運(yùn)算符運(yùn)算符示例功能描述運(yùn)行結(jié)果==(等于)x==y比較兩個(gè)對(duì)象是否相等False!=(不等于)x!=y比較兩個(gè)對(duì)象是否不相等True>(大于)x>y返回x是否大于yFalse<(小于)x<y返回x是否小于yTrue>=(大于等于)x>=y返回x是否大于或等于yFalse<=(小于等于)x<=y返回x是否小于或等于yTrue38
賦值運(yùn)算符賦值運(yùn)算要求左操作數(shù)對(duì)象必須是值可以修改的變量。Python中的賦值運(yùn)算符如表1-4所示。表1-4賦值運(yùn)算符運(yùn)算符示例功能描述=y=x將x的值賦給變量y+=y+=x等價(jià)于y=y+x-=y-=x等價(jià)于y=y-x*=y*=x等價(jià)于y=y*x/=y/=x等價(jià)于y=y/x//=y//=x等價(jià)于y=y//x%=y%=x等價(jià)于y=y%x**=y**=x等價(jià)于y=y**x39
邏輯運(yùn)算符邏輯運(yùn)算符可以將多個(gè)關(guān)系運(yùn)算連接起來,形成更復(fù)雜的條件判斷。邏輯運(yùn)算的運(yùn)算結(jié)果為True(真)或False(假)。Python中的邏輯運(yùn)算符如表1-5所示。如變量值為數(shù)值型,則0被認(rèn)為False,其余值均被認(rèn)為True。表1-5邏輯運(yùn)算符運(yùn)算符示例功能描述運(yùn)行結(jié)果and(邏輯與)xandy如果x和y都為True,則返回True;否則,返回FalseTrueor(邏輯或)xory如果x和y都為False,則返回False;否則,返回TrueTruenot(邏輯非)notx如果x為True,則返回False;如果x為False,則返回TrueFalse40
位運(yùn)算符位運(yùn)算符只適用于整數(shù),運(yùn)算規(guī)則是將整數(shù)轉(zhuǎn)換為二進(jìn)制形式(注意采用補(bǔ)碼表示),按最低位對(duì)齊,缺少的高位補(bǔ)0,然后對(duì)二進(jìn)制數(shù)進(jìn)行逐位運(yùn)算,最后將得到的二進(jìn)制數(shù)據(jù)再轉(zhuǎn)換為十進(jìn)制數(shù)。Python中的位運(yùn)算符如表1-6所示。假設(shè)變量x為00000001,變量y為00111101。表1-6位運(yùn)算符運(yùn)算符示例功能描述十進(jìn)制結(jié)果二進(jìn)制結(jié)果&(按位與)y&x如果y和x對(duì)應(yīng)位都為1,則結(jié)果中該位為1;否則,該位為0100000001|(按位或)y|x如果y和x對(duì)應(yīng)位都為0,則結(jié)果中該位為0;否則,該位為16100111101^(按位異或)y^x如果y和x對(duì)應(yīng)位不同,則結(jié)果中該位為1;否則,該位為06000111100<<(左移位)y<<x將y左移x位(右側(cè)空出的低位補(bǔ)0)1220111
1010>>(右移位)y>>x將y右移x位(左側(cè)空出的高位補(bǔ)符號(hào)位)3000011110~(按位取反)~x如果x的某位為1,則結(jié)果中該位為0;否則,該位為1-21111111041
注意:按位取反時(shí)最高位(通常為符號(hào)位)也一起變反,因此,正數(shù)按位取反后變成了負(fù)數(shù)(符號(hào)位0變?yōu)?),而負(fù)數(shù)按位取反后變成了正數(shù)(符號(hào)位1變?yōu)?)。因此,按位取反的運(yùn)算規(guī)則是:~0=1,~1=0,對(duì)于一個(gè)整數(shù)x來說,~x=-(x+1)。例如:以8位二進(jìn)制位為例計(jì)算~5。其計(jì)算過程如下:變換為二進(jìn)制數(shù):(5)10=(00000101)2。按位取反:~5=~(00000101)2=(11111010)2,最高位為1,因此它是一個(gè)負(fù)數(shù)的二進(jìn)制補(bǔ)碼形式。轉(zhuǎn)換為十進(jìn)數(shù):(11111010)2其對(duì)應(yīng)的原碼是(00000110)2(轉(zhuǎn)換原則:除符號(hào)位外其余各位變反,然后整體加1,得到該整數(shù)的原碼),其對(duì)應(yīng)的十進(jìn)制整數(shù)為-6。成員運(yùn)算符成員運(yùn)算符用于判斷一個(gè)可迭代對(duì)象(序列、集合或字典)中是否包含某個(gè)元素(成員)。Python中的成員運(yùn)算符如表1-7所示。表1-7成員運(yùn)算符運(yùn)算符示例功能描述inxiny如果x是可迭代對(duì)象y的一個(gè)元素,則返回True;否則,返回Falsenotinxnotiny如果x不是可迭代對(duì)象y的一個(gè)元素,則返回True;否則,返回False42
身份運(yùn)算符身份運(yùn)算符用于比較兩個(gè)對(duì)象的存儲(chǔ)單元是否相同。Python中的身份運(yùn)算符如表1-8所示。表達(dá)式表達(dá)式是將不同類型的數(shù)據(jù)(常量、變量、函數(shù))用運(yùn)算符按照一定的規(guī)則連接起來的式子。因此,表達(dá)式由值、變量和運(yùn)算符等組成。在一個(gè)表達(dá)式中,Python會(huì)根據(jù)運(yùn)算符的優(yōu)先級(jí)和結(jié)合性進(jìn)行運(yùn)算。對(duì)于具有不同優(yōu)先級(jí)的運(yùn)算符,會(huì)先完成高優(yōu)先級(jí)的運(yùn)算,再完成低優(yōu)先級(jí)的運(yùn)算;對(duì)于具有相同優(yōu)先級(jí)的運(yùn)算符,其運(yùn)算順序由結(jié)合性來決定。結(jié)合性包括左結(jié)合和右結(jié)合兩種,左結(jié)合是按照從左向右的順序完成計(jì)算,如1+2+5被計(jì)算成(1+2)+5;而右結(jié)合是按照從右向左的順序完成計(jì)算,如賦值運(yùn)算符,即x=y=z被處理為x=(y=z)。前面所介紹的各運(yùn)算符的優(yōu)先級(jí)如表2-9所示。優(yōu)先級(jí)值越小,表示優(yōu)先級(jí)越高。表1-8身份運(yùn)算符運(yùn)算符示例功能描述isxisy如果x和y對(duì)應(yīng)同樣的存儲(chǔ)單元,則返回True;否則,返回Falseisnotxisnoty如果x和y不對(duì)應(yīng)同樣的存儲(chǔ)單元,則返回True;否則,返回False43
表1-9運(yùn)算符優(yōu)先級(jí)優(yōu)先級(jí)運(yùn)算符描述1**乘方2~、+、-按位取反、正號(hào)、負(fù)號(hào)3*、/、//、%乘、除、整除、模4+、-加、減5>>、<<右位移、左位移6&按位與7^按位異或8|按位或9>、<、>=、<=、==、!=、is、isnot、in、notin比較運(yùn)算符、身份運(yùn)算符、成員運(yùn)算符10=、+=、-=、*=、/=、//=、%=、**=賦值運(yùn)算符11not邏輯非12and邏輯與13or邏輯或前面所介紹的各運(yùn)算符的優(yōu)先級(jí)如表2-9所示。優(yōu)先級(jí)值越小,表示優(yōu)先級(jí)越高。程序結(jié)構(gòu)本節(jié)主要介紹Python的順序結(jié)構(gòu)、分支結(jié)構(gòu)以及循環(huán)結(jié)構(gòu)1.345
1.3.1順序結(jié)構(gòu)順序結(jié)構(gòu)是程序設(shè)計(jì)中一種最簡(jiǎn)單的基本結(jié)構(gòu),它只需按照問題的處理順序,依次寫出相應(yīng)的語句,按照語句出現(xiàn)的位置先后次序執(zhí)行。順序結(jié)構(gòu)示意圖如圖1-1所示,依次順序執(zhí)行語句塊1、語句塊2、……、語句塊n等不同的程序塊。其中各語句塊分別代表某些操作。
語句塊1語句塊2……語句塊n圖1-1順序結(jié)構(gòu)示意圖46
1.3.1順序結(jié)構(gòu)
賦值語句賦值語句是任何程序設(shè)計(jì)語言中最基本的語句。賦值語句的作用就是將值賦給變量,或者說將值傳送到變量所對(duì)應(yīng)的存儲(chǔ)單元中。Python中的賦值與一般程序設(shè)計(jì)語言的賦值含義不太一樣,并不是將數(shù)據(jù)賦值給變量,而是變量指向某個(gè)數(shù)據(jù)值對(duì)象。一個(gè)變量通過賦值可以指向不同類型的對(duì)象。在Python中,通常將“=”稱為賦值號(hào)。賦值語句的一般格式為:變量=表達(dá)式賦值號(hào)左邊必須是變量,右邊是表達(dá)式。賦值的意義是先計(jì)算右邊表達(dá)式的值,然后使該變量指向該數(shù)據(jù)對(duì)象。例如:>>>a=2 #變量a賦值為2,即變量a指向數(shù)據(jù)對(duì)象2>>>b=5 #變量b賦值為5,即變量b指向數(shù)據(jù)對(duì)象5>>>a=b #變量a賦值為b的值(5),即變量a也同時(shí)指向數(shù)據(jù)對(duì)象547
Python是一種動(dòng)態(tài)語言,不需要預(yù)先定義變量類型,變量類型在賦值時(shí)被初始化。例如:>>>a=3 #變量a賦值為整數(shù)3,同時(shí)指明變量a為整型變量>>>a='HELLO' #變量a賦值為字符串'HELLO',同時(shí)指明變量a為字符型變量Python中的賦值不是直接將值賦給變量,而是將數(shù)據(jù)對(duì)象的地址賦值給變量,并且賦值語句不存在返回值,“b=(a=6)+1”是錯(cuò)誤的寫法,應(yīng)該寫成>>>a=6>>>b=a+1鏈?zhǔn)劫x值語句鏈?zhǔn)劫x值語句的一般表達(dá)形式為:變量1=變量2=......=變量n=表達(dá)式等價(jià)于:變量n=表達(dá)式......變量1=變量248
例如:>>>a=b=c=d=8 #鏈?zhǔn)劫x值>>>a,b,c,d #顯示a,b,c,d的值(8,8,8,8) #a,b,c,d的值均為8同步賦值語句同步賦值語句的一般表達(dá)形式為:變量1,變量2,......,變量n=表達(dá)式1,表達(dá)式2,......,表達(dá)式n其中,賦值號(hào)左邊變量的個(gè)數(shù)與右邊表達(dá)式的個(gè)數(shù)要一致。先計(jì)算右邊表達(dá)式的值,然后將各表達(dá)式的值賦值按位置給左邊的變量。例如:>>>a,b=2,3 #變量a,b分別指向數(shù)據(jù)2,3>>>a,b #顯示a,b的值(2,3)>>>a,a=2,3 #變量a先指向數(shù)據(jù)2,其后變量a又指向了數(shù)據(jù)3>>>a #顯示a的值49
賦值表達(dá)式Python3.8中在賦值中引入了一個(gè)新的概念——賦值表達(dá)式,采用符號(hào)“:=”(稱為海象運(yùn)算符)進(jìn)行賦值。賦值表達(dá)式可以在統(tǒng)一表達(dá)式中賦值并返回值,可以簡(jiǎn)化和優(yōu)化程序代碼。例如:>>>print(a:=2) #對(duì)變量a賦值2,同時(shí)輸出2。功能等價(jià)于a=2,print(a)兩條語句21.3.1順序結(jié)構(gòu)50
1.3.1順序結(jié)構(gòu)
程序可以通過鍵盤讀取數(shù)據(jù),也可以通過文件讀取數(shù)據(jù);程序的結(jié)果可以輸出在屏幕上,也可以保存在文件中。而標(biāo)準(zhǔn)的輸入是指通過鍵盤讀取數(shù)據(jù),標(biāo)準(zhǔn)的輸出是指將結(jié)果顯示在屏幕上。標(biāo)準(zhǔn)輸入輸出51
標(biāo)準(zhǔn)輸入
Python的標(biāo)準(zhǔn)輸入函數(shù)是input()函數(shù),用于讀取用戶在鍵盤上輸入的數(shù)據(jù),并返回一個(gè)字符串。其調(diào)用格式為:input([字符串])其中,括號(hào)里面的“字符串”是可選項(xiàng),等待用戶輸入數(shù)據(jù)時(shí)原樣顯示在屏幕上,一般用于提示用戶輸入數(shù)據(jù),否則屏幕無任何提示信息顯示,只等待用戶輸入數(shù)據(jù)。例如:
>>>a=input('請(qǐng)輸入數(shù)據(jù):')請(qǐng)輸入數(shù)據(jù):31 #屏幕提示:“請(qǐng)輸入數(shù)據(jù):”,并等待用戶輸入數(shù)據(jù)31
>>>a'31'#用戶輸入的數(shù)據(jù)自動(dòng)默認(rèn)為字符串input()函數(shù)會(huì)自動(dòng)將輸入的數(shù)據(jù)視為字符串,如果想要輸入數(shù)值數(shù)據(jù),則需使用類型轉(zhuǎn)換函數(shù)將字符串轉(zhuǎn)換為數(shù)值。例如:>>>b=int(input()) #將輸入的用戶數(shù)據(jù)轉(zhuǎn)換為整型66>>>b6652
標(biāo)準(zhǔn)輸出
Python語言的輸出方式有兩種,一種是直接使用表達(dá)式輸出該表達(dá)式的值,另一種是使用表達(dá)式語句輸出。直接使用表達(dá)式輸出表達(dá)式的值。例如:>>>a,b=1,2>>>a+36 #輸出表達(dá)式a+36的值37>>>b+1 #輸出表達(dá)式b+1的值3a,b分別賦值為1,2,直接輸出表達(dá)式“a+36”的結(jié)果為37,表達(dá)式“b+1”的結(jié)果為3。使用表達(dá)式語句輸出。使用表達(dá)式語句輸出,常用的輸出方法是用print()函數(shù),其調(diào)用格式為:print([輸出項(xiàng)1,輸出項(xiàng)2,......,輸出項(xiàng)n][,sep=分隔符][,end=結(jié)束符])其中,輸出項(xiàng)之間以逗號(hào)分隔,沒有輸出項(xiàng)時(shí)輸出一個(gè)空行。sep表示輸出時(shí)每個(gè)輸出項(xiàng)之間的分隔符(默認(rèn)空格),end表示結(jié)束符(默認(rèn)回車換行結(jié)束)。print()函數(shù)從左到右求的每一個(gè)輸出項(xiàng)的值,都依次顯示在同一行。>>>print(1,2)12>>>print(1,2,sep='、')1、2>>>print(1,2,sep='、',end=';')1、2;53
在第三次調(diào)用print()函數(shù)時(shí)不換行,以“;”作為結(jié)束符。例如:print(1,2,end=';')print(2)運(yùn)行結(jié)果如下:12;2標(biāo)準(zhǔn)輸出54
Python程序不需要變量定義,可以直接描述程序的功能。程序的功能一般包括以下3個(gè)方面。輸入原始數(shù)據(jù)。根據(jù)問題要求對(duì)原始數(shù)據(jù)進(jìn)行相應(yīng)處理。輸出處理結(jié)果。其中,第二步對(duì)數(shù)據(jù)的處理是關(guān)鍵。對(duì)順序結(jié)構(gòu)程序而言,程序的執(zhí)行是根據(jù)語句出現(xiàn)的順序依次執(zhí)行的。順序結(jié)構(gòu)舉例55
順序結(jié)構(gòu)舉例56
1.3.2
分支結(jié)構(gòu)單分支if語句if語句由4部分組成:關(guān)鍵字if、條件表達(dá)式、冒號(hào)、表達(dá)式結(jié)果為真(非零、非空)時(shí)要執(zhí)行的語句體。if語句的語法格式如下:if條件表達(dá)式:語句塊單分支if語句的流程圖如圖1-2所示。單分支if語句先判斷條件表達(dá)式的值是真還是假。如果判斷的結(jié)果為真(非零、非空),則執(zhí)行語句體中的操作;如果條件表達(dá)式的值為假(零、空),則不執(zhí)行語句體中的操作。語句體既可以包含多條語句,也可以只由一條語句組成。圖1-2單分支if語句流程圖語句塊TrueFalse條件表達(dá)式57
雙分支if-else語句
雙分支if-else語句的語法格式如下:if條件表達(dá)式:語句塊1else:語句塊2雙分支if-else語句的流程圖如圖2-3所示。雙分支if-else語句先判斷條件表達(dá)式值的真假。如果條件表達(dá)式的結(jié)果為真,則執(zhí)行語句體1中的操作;如果條件表達(dá)式為假,則執(zhí)行語句體2中的操作。語句體1和語句體2既可以包含多條語句,也可以只由一條語句組成。圖1-3雙分支if-else語句流程圖語句塊1TrueFalse語句塊2條件表達(dá)式58
多分支if-elif-else語句多分支if-elif-else語句的語法格式如圖1-4所示:if條件表達(dá)式1:語句塊1elif條件表達(dá)式2:語句塊2......elif條件表達(dá)式n:語句塊nelse:語句塊n+1條件表達(dá)式1條件表達(dá)式2條件表達(dá)式nTrueFalse語句塊nTrueFalse……語句塊n+1語句塊1語句塊2……FalseTrue圖1-4多分支if-elif-else語句流程圖【例1-6】編寫程序,實(shí)現(xiàn)從鍵盤輸入兩個(gè)整數(shù)a和b,按從大到小順序輸出?!窘狻糠治觯狠斎隺,b,如果a<b,則交換a和b,否則不交換,最后輸出a和b。參考程序如下:a,b=eval(input('請(qǐng)輸入a,b:'))ifa<b:a,b=b,a#a和b交換print('{0},{1}'.format(a,b))程序運(yùn)行結(jié)果如下:請(qǐng)輸入a,b:123,456456,12359
1.3.1順序結(jié)構(gòu)分支結(jié)構(gòu)程序舉例【例1-7】編寫程序,實(shí)現(xiàn)從鍵盤輸入年份year,判斷該年份是否為閏年,若是閏年,則輸出“year年是閏年”,否則輸出“year年不是閏年”,其中,year用輸入的年份代替。判斷閏年的方法:如果年份year能被400整除,或者能被4整除但不能被100整除,則該年份為閏年
【解】分析:根據(jù)閏年判斷條件,若滿足:year%400==0或者year%4==0andyear%100!=0則為閏年,否則不是閏年。參考程序如下:importmathyear=input('請(qǐng)輸入年份:')year=int(year)ifyear%400==0or(year%4==0andyear%100!=0):print(year,'年是閏年')else:print(year,'年不是閏年')60
1.3.1順序結(jié)構(gòu)分支結(jié)構(gòu)程序舉例【例1-8】編寫程序,從鍵盤輸入學(xué)生成績(jī)score,按輸入成績(jī)輸出其對(duì)應(yīng)的等級(jí):score≥90為優(yōu),80≤score<90為良,70≤score<80為中等,60≤score<70為及格,score<60為不及格。參考程序如下:score=int(input('請(qǐng)輸入成績(jī)'))#int()轉(zhuǎn)換字符串為整型ifscore>=90:print('優(yōu)')elifscore>=80:print('良')elifscore>=70:print('中')elifscore>=60:print('及格')else:print('不及格')61
1.3.1順序結(jié)構(gòu)分支結(jié)構(gòu)程序舉例運(yùn)行3次程序,分別輸入年份2000、2013和2020,程序運(yùn)行結(jié)果如下。程序第一次運(yùn)行結(jié)果:請(qǐng)輸入年份:20002000年是閏年程序第二次運(yùn)行結(jié)果:請(qǐng)輸入年份:20132013年不是閏年程序第三次運(yùn)行結(jié)果:請(qǐng)輸入年份:20202020年是閏年62
1.3.1順序結(jié)構(gòu)分支結(jié)構(gòu)程序舉例63
1.3.3循環(huán)結(jié)構(gòu)可迭代對(duì)象(iterable)是指執(zhí)行一次可返回一個(gè)元素的對(duì)象,它適用于循環(huán)。Python中包含的可迭代對(duì)象主要有:序列對(duì)象(sequence),例如字符串(str)、列表(list)、元組(tuple),字典(dict),文件對(duì)象(file),迭代器對(duì)象(iterator),生成器函數(shù)(generator)等。迭代器是一個(gè)對(duì)象,表示可迭代的數(shù)據(jù)集合,包括方法__iter__()和__next__(),可以實(shí)現(xiàn)迭代功能。生成器是一個(gè)函數(shù),使用yield語句,每次產(chǎn)生一個(gè)值,也可以用于循環(huán)迭代。Python3.7中的內(nèi)置對(duì)象range是一個(gè)迭代器對(duì)象,在迭代時(shí)產(chǎn)生指定范圍的數(shù)字序列。range的格式如下:range(start,stop[,step])range對(duì)象返回的數(shù)字序列范圍是[start,stop),從start開始,stop結(jié)束(不包含stop),默認(rèn)每次迭代步長值為1,如果指定了可選的步長值step,則序列按步長step值增長。例如:foriinrange(1,10):print(i,end='')#range(1,10)產(chǎn)生數(shù)字序列1~9,輸出123456789foriinrange(1,10,3):print(i,end='')#range(1,10,3)產(chǎn)生數(shù)字序列1,4,7,輸出147運(yùn)行結(jié)果如下:123456789147可迭代對(duì)象64
>>>print(1,2)12>>>print(1,2,sep='、')1、2>>>print(1,2,sep='、',end=';')1、2;在第三次調(diào)用print()函數(shù)時(shí)不換行,以“;”作為結(jié)束符。例如:print(1,2,end=';')print(2)運(yùn)行結(jié)果如下:12;2又例如:print(1,2)print(1)運(yùn)行結(jié)果如下:12165
循環(huán)語句while循環(huán)語句while語句用于循環(huán)執(zhí)行某段程序,即在某條件成立(為真)下,循環(huán)執(zhí)行某段程序,以重復(fù)處理相同的任務(wù)。while循環(huán)語句的語法格式如下:while判斷條件:循環(huán)體或:while(判斷條件):循環(huán)體while循環(huán)語句的執(zhí)行過程如下。①執(zhí)行到while語句,計(jì)算其后跟著的判斷條件;②如果判斷條件結(jié)果為True,則進(jìn)入循環(huán)體執(zhí)行,當(dāng)執(zhí)行到循環(huán)體語句序列結(jié)束點(diǎn)時(shí)返回①繼續(xù)執(zhí)行;③如果判斷條件結(jié)果為False,則結(jié)束while循環(huán)的執(zhí)行,轉(zhuǎn)到while語句的后繼語句執(zhí)行。圖1-5while語句的流程圖循環(huán)體TrueFalsewhile語句的后繼語句條件表達(dá)式66
循環(huán)語句
for語句for語句用于遍歷可迭代對(duì)象集合中的元素,并對(duì)集合中的每個(gè)元素執(zhí)行一次相關(guān)的操作。當(dāng)集合中的所有元素完成迭代后,for循環(huán)將程序控制傳遞給for循環(huán)之后的下一條語句。for循環(huán)語句的語法格式如下:for變量in序列或可迭代對(duì)象循環(huán)體for循環(huán)語句的流程圖如圖1-6所示。for循環(huán)語句的執(zhí)行過程如下。①執(zhí)行到for語句,判斷循環(huán)索引值是否在序列中;②如果該值在序列中,則取出該值,進(jìn)入循環(huán)體執(zhí)行,循環(huán)體執(zhí)行結(jié)束時(shí)返回①繼續(xù)執(zhí)行;③如果該值不在序列中,則結(jié)束for循環(huán)的執(zhí)行,轉(zhuǎn)到for循環(huán)后面的語句執(zhí)行。圖1-6for循環(huán)語句的流程圖循環(huán)體TrueFalsefor語句的后繼語句序列(可迭代對(duì)象)中還有未訪問元素?【例1-9】編寫程序,利用while循環(huán)求1~100的和、1~100中所有奇數(shù)的和、1~100中所有的偶數(shù)和,并輸出?!窘狻繀⒖汲绦蛉缦拢簊um_all=0 #存放1~100的和sum_odd=0 #存放1~100的奇數(shù)和sum_even=0 #存放1~100的偶數(shù)和i=1whilei<=100:sum_all=sum_all+i #計(jì)算所有數(shù)的和if(i%2==0):sum_even+=i #計(jì)算1~100的偶數(shù)和else:sum_odd+=i #計(jì)算1~100的奇數(shù)和i=i+1print('1~100的和=%d奇數(shù)和=%d偶數(shù)和=%d'%(sum_all,sum_odd,sum_even))程序運(yùn)行結(jié)果如下:1~100的和=5050奇數(shù)和=2500偶數(shù)和=255067
1.3.3循環(huán)結(jié)構(gòu)循環(huán)語句【例1-10】編寫程序,利用for循環(huán)求1~100的和、1~100中所有奇數(shù)的和、1~100中所有偶數(shù)的和,并輸出?!窘狻繀⒖汲绦蛉缦拢簊um_all=0sum_odd=0sum_even=0foriinrange(1,101):sum_all=sum_all+iif(i%2==0):sum_even+=ielse:sum_odd+=iprint('1~100所有數(shù)之和=%d',sum_all)print('1~100的奇數(shù)之和=%d',sum_odd)print('1~100的偶數(shù)之和=%d',sum_even)程序運(yùn)行結(jié)果如下:1~100所有數(shù)之和50501~100的奇數(shù)之和25001~100的偶數(shù)之和255068
1.3.3循環(huán)結(jié)構(gòu)循環(huán)語句69
1.4.3循環(huán)控制語句循環(huán)控制語句可以改變語句執(zhí)行的順序。Python支持break和continue循環(huán)控制語句。break語句break語句的格式如下:breakbreak語句可以用在while和for循環(huán)中,用于提前結(jié)束break語句所在的循環(huán),即退出所在循環(huán)的執(zhí)行。例如,在執(zhí)行循環(huán)的過程中,如果某個(gè)條件得到了滿足,則可以通過break語句立即終止所在循環(huán)的執(zhí)行。當(dāng)多個(gè)for或while循環(huán)彼此嵌套時(shí),break語句只結(jié)束所在層次的循環(huán),例如,如果break在兩層循環(huán)嵌套的內(nèi)層循環(huán)中,則只終止內(nèi)層循環(huán),進(jìn)入到外層循環(huán)的下一條語句繼續(xù)執(zhí)行。continue語句continue語句的格式如下:continuecontinue語句與break語句類似,也用于while和for循環(huán)中。在循環(huán)執(zhí)行體執(zhí)行過程中,如果遇到continue語句,則程序結(jié)束本次循環(huán),即程序會(huì)跳出本次循環(huán)的循環(huán)體剩余語句,回到循環(huán)開始的地方重新判斷是否進(jìn)入下一次循環(huán)?!纠?-11】編寫程序,利用break語句實(shí)現(xiàn)從鍵盤輸入若干整數(shù),輸入0結(jié)束,統(tǒng)計(jì)其中正數(shù)、負(fù)數(shù)的個(gè)數(shù),并輸出?!窘狻繀⒖汲绦蛉缦拢篶ount_pos=0count_neg=0print('請(qǐng)輸入整數(shù)(輸入0結(jié)束):')whileTrue:n=int(input())ifn==0:breakifn>0:count_pos+=1else:count_neg+=1print('正數(shù)的個(gè)數(shù):',count_pos)print('負(fù)數(shù)的個(gè)數(shù):',count_neg)程序運(yùn)行結(jié)果如下:請(qǐng)輸入整數(shù)(輸入0結(jié)束):1-434正數(shù)的個(gè)數(shù):2負(fù)數(shù)的個(gè)數(shù):170
1.3.3循環(huán)結(jié)構(gòu)循環(huán)控制語句【例1-12】編寫程序,利用continue語句實(shí)現(xiàn)輸出1~100之間所有不能被3整除的數(shù),每行輸出10個(gè)?!窘狻繀⒖汲绦蛉缦拢簄=0print('1~100之間不能被3整除的數(shù)為:')foriinrange(1,101):ifi%3==0:continue #不能被3整除的數(shù)跳過print(str.format("{0:<5}",i),end='') #輸出時(shí)每個(gè)數(shù)占5個(gè)位置,左對(duì)齊n=n+1if(n%10==0):print() #輸出10個(gè)數(shù)后換行程序運(yùn)行結(jié)果如下(只展示前3行):1~100之間不能被3整除的數(shù)為:12457810111314161719202223252628293132343537384041434471
1.3.3循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)程序舉例案例——人機(jī)對(duì)話猜數(shù)字本節(jié)介紹Python的案例——人機(jī)對(duì)話猜數(shù)字1.473
人機(jī)對(duì)話猜數(shù)字游戲,該游戲主要實(shí)現(xiàn)以下功能:1)由程序隨機(jī)取數(shù)。2)用戶輸入數(shù)字猜數(shù)。3)程序根據(jù)輸入判斷大小,給出相應(yīng)提示。4)用戶不斷嘗試,直到猜中或者猜錯(cuò)的次數(shù)大于預(yù)設(shè)值的次數(shù)。5)如果猜中,玩家獲勝;如果猜錯(cuò),則重來,最多只能猜7次。分析:該題主要是將隨機(jī)數(shù)產(chǎn)生、if條件語句、循環(huán)語句等綜合應(yīng)用。參考程序如下:importrandomsecret=random.randint(1,100)time=6 #猜數(shù)字的次數(shù)guess=0 #輸入的數(shù)字minNum=0 #最小隨機(jī)數(shù)maxNum=100 #最大隨機(jī)數(shù)74
print('******歡迎來到猜數(shù)字游戲,請(qǐng)開始******')print('數(shù)字區(qū)間是',minNum,'-',maxNum)whileguess!=secretandtime>=0:guess=int(input('請(qǐng)輸入你猜的數(shù)字:'))print('你輸入的數(shù)字是:',guess)ifguess==secret:print('猜對(duì)了!真厲害')else: #若未猜對(duì)時(shí),需提示用戶數(shù)據(jù)所在的區(qū)間print('很遺憾,你猜錯(cuò)了,你還有',time,'次機(jī)會(huì)')ifguess<secret:minNum=guessprint('你猜的數(shù)字小于正確答案')print('現(xiàn)在的數(shù)字區(qū)間是:',minNum,'-',maxNum)
else:maxNum=guess
75
print('你猜的數(shù)字大于正確答案')print('現(xiàn)在的數(shù)字區(qū)間是:',minNum,'-',maxNum)time-=1print('游戲結(jié)束')程序運(yùn)行結(jié)果如下:******歡迎來到猜數(shù)字游戲,請(qǐng)開始******數(shù)字區(qū)間是0-100請(qǐng)輸入你猜的數(shù)字:50你輸入的數(shù)字是:50很遺憾,你猜錯(cuò)了,你還有6次機(jī)會(huì)你猜的數(shù)字大于正確答案現(xiàn)在的數(shù)字區(qū)間是:13-25請(qǐng)輸入你猜的數(shù)字:19你輸入的數(shù)字是:19猜對(duì)了!真厲害游戲結(jié)束延伸閱讀-開源編程1.5開源編程語言是指其設(shè)計(jì)、實(shí)現(xiàn)和分發(fā)遵循開放源代碼協(xié)議的語言。這意味著任何人可以自由地訪問該語言的源代碼,學(xué)習(xí)其內(nèi)部工作原理,對(duì)其進(jìn)行修改以適應(yīng)特定需求,并且可以在遵守相應(yīng)許可條款的前提下分發(fā)修改后的版本。開源不僅僅是一種軟件分發(fā)模式,它更代表了一種社區(qū)驅(qū)動(dòng)的開發(fā)哲學(xué),強(qiáng)調(diào)透明度、協(xié)作和共享。開源編程語言降低了學(xué)習(xí)和使用的門檻,使得更多的學(xué)生、教師和自學(xué)者能夠接觸并掌握最新的技術(shù)。豐富的在線資源、教程和支持社區(qū)為新手提供了成長的空間。通過全球開發(fā)者社區(qū)的協(xié)作,開源項(xiàng)目能夠快速迭代更新,解決發(fā)現(xiàn)的問題,引入新功能。這種集體智慧的匯聚推動(dòng)了技術(shù)的進(jìn)步,促進(jìn)了跨學(xué)科的合作與創(chuàng)新。Python作為一種廣受歡迎的開源編程語言,其廣泛應(yīng)用覆蓋了Web開發(fā)、數(shù)據(jù)分析、人工智能、自動(dòng)化腳本等多個(gè)領(lǐng)域,極大地促進(jìn)了各行業(yè)的數(shù)字化轉(zhuǎn)型。77
1.5延伸閱讀Machine
Learning
with
Python2.1目錄2.22.42.3列表元組字典案例——約瑟夫環(huán)2.5延伸閱讀列表本節(jié)介紹列表的基本操作、列表的相關(guān)函數(shù)和列表選取2.181
2.1.1
列表基本操作創(chuàng)建列表用一對(duì)方括號(hào)將列表中包含的元素括起來就構(gòu)成一個(gè)列表對(duì)象,并可以使用“=”將該列表對(duì)象賦值給變量。例如:ls1=[1,'one','一'] #創(chuàng)建一個(gè)包含3個(gè)元素的列表對(duì)象并將其賦給變量ls1ls2=[] #創(chuàng)建一個(gè)不包含任何元素的列表對(duì)象(稱為空列表)并將其賦給變量ls2ls3=[[1,2],[3,4,5]] #創(chuàng)建一個(gè)二維(多維)列表ls3print('ls1的值為',ls1) #輸出列表ls1的所有元素print('ls2的值為',ls2) #輸出列表ls2的所有元素(空列表)print('ls3的值為',ls3) #輸出列表ls3的所有元素運(yùn)行結(jié)果如下:ls1的值為[1,'one','一']ls2的值為[]ls3的值為[[1,2],[3,4,5]]82
2.1.1
列表基本操作增加列表元素在列表中增加元素可以使用以下4種方法1)使用del語句刪除列表中某個(gè)特定位置的元素。例如: ls1=[1] #創(chuàng)建列表ls1 ls1=ls1+['a',2] #將列表對(duì)象['a',2]添
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 黑龍江公安警官職業(yè)學(xué)院《混凝土結(jié)構(gòu)設(shè)計(jì)原理》2025 學(xué)年第二學(xué)期期末試卷
- 金融數(shù)據(jù)分析與建?!狙菔疚臋n課件】
- 國家事業(yè)單位招聘2024自然資源部第二海洋研究所招聘應(yīng)屆畢業(yè)生6人筆試歷年參考題庫典型考點(diǎn)附帶答案詳解(3卷合一)
- 備戰(zhàn)2025年國家公務(wù)員考試《行測(cè)》練習(xí)題庫有完整答案
- 常州市公安局鐘樓分局公開招聘警務(wù)輔助人員20人考試參考題庫附答案
- 榆林市國藥控股陜西有限公司招聘榆林醫(yī)藥代表參考題庫附答案
- 2026年綿陽職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能考試題庫附答案
- 深圳市特發(fā)集團(tuán)有限公司2026屆秋季校園招聘193人考試題庫附答案
- 2026河北省定向中國科學(xué)院大學(xué)選調(diào)生招錄參考題庫及答案1套
- 北京大興區(qū)理想城幼兒園招聘?jìng)淇碱}庫必考題
- 2025-2026學(xué)年湘美版小學(xué)美術(shù)四年級(jí)(上冊(cè))期末測(cè)試卷附答案(4套)
- 2025年新材料科技創(chuàng)新平臺(tái)建設(shè)可行性研究報(bào)告
- 2025年1月黑龍江省普通高中學(xué)業(yè)水平合格性考試物理試卷(含答案)
- 知識(shí)點(diǎn)及2025秋期末測(cè)試卷(附答案)-蘇教版(新教材)小學(xué)科學(xué)小學(xué)科學(xué)二年級(jí)上冊(cè)
- 《城市軌道交通車站機(jī)電設(shè)備運(yùn)用》課件 項(xiàng)目三:站臺(tái)門系統(tǒng)
- 企業(yè)稅務(wù)規(guī)劃合規(guī)審查手冊(cè)
- 附件扭轉(zhuǎn)診治中國專家共識(shí)(2024年版)解讀
- 全員品質(zhì)意識(shí)培訓(xùn)
- 貨物代理報(bào)關(guān)合同范本
- 2025甘肅酒泉市公安局招聘留置看護(hù)崗位警務(wù)輔助人員30人(第三批)考試筆試備考題庫及答案解析
- 2025高中歷史時(shí)間軸與大事年表
評(píng)論
0/150
提交評(píng)論