版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 Python程序設(shè)計(jì) 2021年1月 第1章 概述雖然已出現(xiàn)近600多種高級(jí)編程語(yǔ)言,但目前流行的僅有20余種,其中Python語(yǔ)言、C語(yǔ)言、C+語(yǔ)言和Java語(yǔ)言是目前最為流行的四種高級(jí)程序設(shè)計(jì)語(yǔ)言。1.1Python語(yǔ)言的特點(diǎn)與應(yīng)用Python是一個(gè)結(jié)合了解釋性、編譯性、互動(dòng)性和面向?qū)ο蟮某绦蛘Z(yǔ)言。Python的設(shè)計(jì)具有很強(qiáng)的可讀性,語(yǔ)法結(jié)構(gòu)更具有特色。Python語(yǔ)言是解釋型語(yǔ)言,與PHP和Perl語(yǔ)言類似,在開發(fā)過程中無編譯環(huán)節(jié)。Python是交互式語(yǔ)言,可以在一個(gè)Python提示符,直接交互式執(zhí)行程序。Python是面向?qū)ο笳Z(yǔ)言支持面向?qū)ο蟮娘L(fēng)格或代碼封裝于對(duì)象的編程技術(shù)。Pyth
2、on解決問題快速,提供了豐富的內(nèi)置對(duì)象、運(yùn)算符和標(biāo)準(zhǔn)庫(kù),極大地開拓了Python的應(yīng)用領(lǐng)域,幾乎滲透到所有的學(xué)科領(lǐng)域。1.1.1 Python語(yǔ)言的特點(diǎn)1.易于學(xué)習(xí)Python有較少的關(guān)鍵字、結(jié)構(gòu)簡(jiǎn)單、語(yǔ)法簡(jiǎn)捷。2.易于閱讀Python程序定義清晰,便于閱讀。Python與其他語(yǔ)言顯著的差異是它沒有其他語(yǔ)言通常用來訪問變量、定義代碼塊和進(jìn)行模式匹配的命令式符號(hào),這就使得Python代碼變得更加定義清晰和易于閱讀。3.易于維護(hù)Python程序的源代碼容易維護(hù)。源代碼維護(hù)是軟件開發(fā)生命周期的組成部分。Python的成功很大程度上要?dú)w功于其源代碼的易于維護(hù),當(dāng)代碼長(zhǎng)和復(fù)雜度高時(shí)更突出了易于維護(hù)的作用
3、。4.一個(gè)廣泛的標(biāo)準(zhǔn)庫(kù)Python的最大的優(yōu)勢(shì)之一是具有豐富的庫(kù),跨平臺(tái)的,提供了非常完善的基礎(chǔ)代碼庫(kù),便于應(yīng)用。5.互動(dòng)模式借助互動(dòng)模式的支持,可以從終端輸入執(zhí)行代碼并獲得結(jié)果,互動(dòng)的測(cè)試和調(diào)試代碼片斷。6.可移植基于其開放源代碼的特性,Python可以移植到多種平臺(tái)上。因?yàn)镻ython是用C書寫,又由于C具有可移植性,使得Python可以運(yùn)行在任何帶有ANSIC編譯器的平臺(tái)上。盡管有一些針對(duì)不同平臺(tái)開發(fā)的特有模塊,但是在任何一個(gè)平臺(tái)上用Python開發(fā)的通用軟件都可以稍加修改或者原封不動(dòng)的在其他平臺(tái)上運(yùn)行。這種可移植性既適用于不同的架構(gòu),也適用于不同的操作系統(tǒng)。7.可擴(kuò)展當(dāng)需要一段關(guān)鍵代碼
4、運(yùn)行速度更快時(shí),就可以使用 C/C+ 語(yǔ)言實(shí)現(xiàn),然后在 Python 中調(diào)用它們。8.數(shù)據(jù)庫(kù)Python提供所有主要的商業(yè)數(shù)據(jù)庫(kù)的接口。9.GUI編程Python支持GUI可以創(chuàng)建和移植到許多系統(tǒng)調(diào)用。10.可嵌入可以將Python嵌入到C/C+程序,使程序的用戶獲得腳本化的能力。1.2.2 Python語(yǔ)言主要版本Python語(yǔ)言的重要版本如下。Python2.0版本2000年10月16日發(fā)布,支持Unicode和垃圾回收機(jī)制。Python2.7版本2010年發(fā)布7月3日。Python3.0版本2008年12月3日發(fā)布,此版不完全兼容之前的Python源代碼。Python3.5版本2015年
5、發(fā)布9月3日發(fā)布。2.自動(dòng)化Python是運(yùn)維工程師首選的編程語(yǔ)言,Python在自動(dòng)化運(yùn)維方面應(yīng)用廣泛, Saltstack和Ansible都是著名的自動(dòng)化平臺(tái)。3.常規(guī)軟件開發(fā)Python支持函數(shù)式編程和OOP面向?qū)ο缶幊?,能夠承?dān)任何種類軟件的開發(fā)工作,因此常規(guī)的軟件開發(fā)、腳本編寫、網(wǎng)絡(luò)編程等都屬于標(biāo)配能力。5.WEB開發(fā)基于Python的Web開發(fā)框架應(yīng)用范圍非常廣,開發(fā)速度非???,能夠幫助開發(fā)者快速的搭建起可用的WEB服務(wù)。Python是Web開發(fā)的主流語(yǔ)言, Python也具有獨(dú)特的優(yōu)勢(shì)。對(duì)于同一個(gè)開發(fā)需求能夠提供多種方案。庫(kù)的內(nèi)容豐富,使用方便。Python在Web方面也有自己的
6、框架,如django和flask等??梢哉f用Python開發(fā)的Web項(xiàng)目小而精,支持最新的XML技術(shù),而且數(shù)據(jù)處理的功能較為強(qiáng)大。7.數(shù)據(jù)分析Python是數(shù)據(jù)分析的主流語(yǔ)言之一。Python用來做數(shù)據(jù)分析,通常用C設(shè)計(jì)一些底層的算法進(jìn)行封裝,然后用Python進(jìn)行調(diào)用。因?yàn)樗惴K較為固定,所以用Python直接進(jìn)行調(diào)用,方便且靈活??梢愿鶕?jù)數(shù)據(jù)分析與統(tǒng)計(jì)的需要靈活使用。Python是一個(gè)比較完善的數(shù)據(jù)分析生態(tài)系統(tǒng),其中matplotlib經(jīng)常被用來繪制數(shù)據(jù)圖表,有著良好的跨平臺(tái)交互特性。網(wǎng)絡(luò)爬蟲又稱網(wǎng)絡(luò)蜘蛛,是從互聯(lián)網(wǎng)獲取大數(shù)據(jù)的核心工具。Python是主流語(yǔ)言之一, Scrapy爬蟲框架
7、應(yīng)用廣泛。Pandas也是在做數(shù)據(jù)分析時(shí)常用的數(shù)據(jù)分析包,也是很好用的開源工具??蓪?duì)較為復(fù)雜的二維或三維數(shù)組進(jìn)行計(jì)算,同時(shí)還可以處理關(guān)系型數(shù)據(jù)庫(kù)中的數(shù)據(jù), Python的數(shù)據(jù)分析功能要強(qiáng)于R。在大量數(shù)據(jù)的基礎(chǔ)上,結(jié)合科學(xué)計(jì)算、機(jī)器學(xué)習(xí)等技術(shù),對(duì)數(shù)據(jù)進(jìn)行清洗、去重、規(guī)格化和針對(duì)性的分析是大數(shù)據(jù)行業(yè)的基石。8.人工智能Python在人工智能大范疇領(lǐng)域內(nèi)的機(jī)器學(xué)習(xí)、神經(jīng)網(wǎng)絡(luò)、深度學(xué)習(xí)等方面都是主流的編程語(yǔ)言,得到廣泛的支持和應(yīng)用。在人工智能的應(yīng)用方面, Python強(qiáng)大而豐富的標(biāo)準(zhǔn)庫(kù)和擴(kuò)展庫(kù)以及數(shù)據(jù)分析能力。在神經(jīng)網(wǎng)絡(luò)、深度學(xué)習(xí)方面,Python都能夠找到比較成熟的包來加以調(diào)用。而且Python是面
8、向?qū)ο蟮膭?dòng)態(tài)語(yǔ)言,且適用于科學(xué)計(jì)算,這就使得Python在人工智能方面?zhèn)涫芮嗖A。雖然人工智能程序不限于Python,但依舊為Python提供了大量的API,這也正是因?yàn)镻ython當(dāng)中包含著較多的適用于人工智能的模塊。調(diào)用方便,Python在AI領(lǐng)域具有最強(qiáng)大的競(jìng)爭(zhēng)力。1.2程序的設(shè)計(jì)與運(yùn)行一般來說,程序的設(shè)計(jì)主要分為自頂向下與自底向上兩種設(shè)計(jì)方法。在程序設(shè)計(jì)的過程中,如果能夠?qū)栴}分解成多個(gè)模塊,可再將這些模塊分別分解成更小的模塊,以此類推,直到分解成最容易編寫的最小模塊為止,這種程序設(shè)計(jì)的方式即稱為自頂向下法,顯然,這是一種還原論的方法。利用自頂向下的方式所編寫的程序,其結(jié)構(gòu)有層次,容易理
9、解和維護(hù),同時(shí)可以降低開發(fā)的成本,但是在程序分解成模塊的過程中,可能因此占用較多的內(nèi)存空間,造成執(zhí)行時(shí)間過長(zhǎng)。如果在程序設(shè)計(jì)時(shí),先將整個(gè)問題里最簡(jiǎn)單的部分編寫出來,再一一結(jié)合各個(gè)部分以完成整個(gè)程序,這種設(shè)計(jì)的方式就稱為自底向上法。利用自底向上的方式所編寫的程序,不太容易看懂和維護(hù),造成程序設(shè)計(jì)者的負(fù)擔(dān),反而容易增加開發(fā)的成本。因此在編寫程序前的設(shè)計(jì)就顯得相當(dāng)重要,如果程序的內(nèi)容很簡(jiǎn)單,當(dāng)然可以馬上把程序?qū)懗鰜?;但是?dāng)程序愈大或是愈復(fù)雜時(shí),設(shè)計(jì)的工作就很重要,它可以讓程序設(shè)計(jì)有明確的方向,避免程序的邏輯混亂。有了事前的設(shè)計(jì)流程,就可以根據(jù)這個(gè)流程來一步一步設(shè)計(jì)出所需的程序。通常設(shè)計(jì)程序分為六步驟
10、,如下所述。1.2.1規(guī)劃程序首先,必須明確編寫某個(gè)程序的目的、程序的用戶對(duì)象以及需求度,如計(jì)算員工每個(gè)月的工資、繪制圖表、數(shù)據(jù)排序等,再根據(jù)這些數(shù)據(jù)及程序語(yǔ)言的特性,選擇一個(gè)合適的程序語(yǔ)言,來達(dá)到設(shè)計(jì)程序的目的??梢栽诩埳舷壤L制出簡(jiǎn)單的流程圖,將程序的起始到結(jié)束的過程寫出,一方面,便于理清程序的思路;另一方面,可以根據(jù)這個(gè)流程圖進(jìn)行編寫程序的工作。圖1-2是繪制流程圖時(shí)常用的流程圖符號(hào)介紹。圖1-2常用的流程圖符號(hào)1.2.2編寫程序代碼及注釋程序經(jīng)過先前的規(guī)劃之后,便可以根據(jù)所繪制的流程圖來編寫程序內(nèi)容。通過比較發(fā)現(xiàn),這種方式會(huì)比邊寫邊想下一步該怎么做要快得多。如果事先沒有規(guī)劃程序,在邊寫邊
11、想時(shí),往往會(huì)寫了又改,改了又寫,卻一直都達(dá)不到滿意效果。當(dāng)很久沒有修改這個(gè)程序,或是別人必須維護(hù)程序時(shí),如果在程序中加上了注釋,可以增加這個(gè)程序的可閱讀性,相對(duì)地也增加程序維護(hù)的容易程度,可節(jié)省日后程序維護(hù)所需的時(shí)間。1.2.3編譯程序代碼程序設(shè)計(jì)完成之后,需要將程序代碼轉(zhuǎn)換成計(jì)算機(jī)能夠理解的語(yǔ)言。編譯器(或編譯程序)來完成轉(zhuǎn)換,通過編譯程序的轉(zhuǎn)換后,只有在沒有錯(cuò)誤的時(shí)候,源程序才會(huì)變成可以執(zhí)行的程序。如果是編譯器在轉(zhuǎn)換的過程中,碰到不認(rèn)識(shí)的語(yǔ)法、未定義的變量等時(shí),必須先把這些錯(cuò)誤糾正過來,再重新編譯完成,沒有錯(cuò)誤后,才可以執(zhí)行所設(shè)計(jì)的程序。1.2.4執(zhí)行程序通常編譯完程序,沒有錯(cuò)誤后,編譯程
12、序會(huì)幫我們制作一個(gè)可執(zhí)行文件,在DOS或UNIX的環(huán)境下,只要輸入文件名即可執(zhí)行程序。而在Turbo C、Visual C+或Dev C+的環(huán)境中,通常只要按下某些快捷鍵或者選擇某個(gè)菜單即可執(zhí)行程序。所編寫的程序經(jīng)過編譯與鏈接,將成為可以執(zhí)行的程序,執(zhí)行后,就可以獲得程序運(yùn)行的結(jié)果。1.2.5排錯(cuò)與測(cè)試如果所編寫的程序能一次就順利地達(dá)到目標(biāo),但是有的時(shí)候,會(huì)發(fā)現(xiàn)雖然程序可以執(zhí)行,但執(zhí)行后卻不是期望的結(jié)果。此時(shí)可能犯了語(yǔ)義錯(cuò)誤,也就是說,程序本身的語(yǔ)法沒有問題,但在邏輯上可能有些錯(cuò)誤,所以會(huì)造成非預(yù)期性的結(jié)果。所以必須逐一確定每一行程序的邏輯是否有誤,再將錯(cuò)誤改正。如果程序的錯(cuò)誤是一般的語(yǔ)法錯(cuò)誤
13、,就顯得簡(jiǎn)單得多,只要把編譯程序所指出的錯(cuò)誤糾正后,再重新編譯,即可將源程序變成可執(zhí)行的程序。除了排錯(cuò)之外,也必須給予這個(gè)程序不同的數(shù)據(jù),以測(cè)試它是否正確,這也可以幫助找出程序規(guī)劃的合理性。1.2.6程序代碼的整理與保存 當(dāng)程序的執(zhí)行結(jié)果都沒有問題時(shí),可以再把源程序修改得更容易閱讀(例如將變量命名為有意義的名稱、把程序核心部分的邏輯重新簡(jiǎn)化等),以做到簡(jiǎn)單、易讀。此外,需要將程序保存下來。在圖1-3中,將程序設(shè)計(jì)的6大步驟繪制成流程圖的方式,可以參考上述的步驟來查看程序設(shè)計(jì)的過程。圖1-3 程序設(shè)計(jì)的基本流程源程序編譯及鏈接的過程如圖1-4所示。1.3 Python開發(fā)環(huán)境部署IDLE和Ana
14、conda3是常用的Python開發(fā)環(huán)境。IDLE環(huán)境簡(jiǎn)單實(shí)用,而Anaconda 3環(huán)境對(duì)代碼編寫和項(xiàng)目管理更為方便。在本書中,所有交互模式運(yùn)行的代碼都以IDLE的交互開發(fā)環(huán)境提示符“”提示符開頭,但在直接運(yùn)行程序時(shí),需要將運(yùn)行的程序?qū)懭胍粋€(gè)程序文件保存后,再運(yùn)行。1.3.1IDLEIDLE是Python官方安裝包自帶的開發(fā)環(huán)境。IDLE是開發(fā) python 程序的集成開發(fā)環(huán)境,是學(xué)習(xí)Python程序設(shè)計(jì)的合理選擇。當(dāng)安裝好python以后,IDLE也就隨之自動(dòng)安裝,不需要另外去查找與操作。同時(shí),使用Eclipse這個(gè)強(qiáng)大的框架時(shí)IDLE也可以非常方便的調(diào)試Python程序。IDLE的基本功
15、能是:語(yǔ)法加亮;段落縮進(jìn);基本文本編輯;TABLE鍵控制;調(diào)試程序。在Python官方網(wǎng)站https/可下載Python3.6x安裝包或Python3.7x,根據(jù)自己的操作系統(tǒng)選擇32位或64位進(jìn)行安裝。建議選擇CPython3.6或C Python3.7。安裝完成后,出現(xiàn)如圖1-5所示的開始菜單。在開始菜單中,選擇IDLE(Python 3.7 64-bit),然后可以看到如圖1-6所示的交互模式界面??梢栽诖蜷_的界面里面輸出一條python字符串語(yǔ)句,還有計(jì)算2個(gè)變量相加的值,輸出在屏幕上面。1.交互模式在交互模式中每次只能執(zhí)行一條語(yǔ)句,當(dāng)提示符再次出現(xiàn)時(shí)才可輸入下一句。普通語(yǔ)句可以按一次
16、Enter鍵運(yùn)行并輸出結(jié)果,而選擇結(jié)果、循環(huán)結(jié)構(gòu)、函數(shù)定義、類定義with塊等復(fù)合語(yǔ)句,需要按兩次Enter鍵后才可以運(yùn)行。2. 直接運(yùn)行.py文件直接運(yùn)行.py文件相當(dāng)于啟動(dòng)了Python解釋器,然后一次性執(zhí)行.py文件的源代,沒有機(jī)會(huì)以交互的方式輸入源代碼。Python的交互模式和直接運(yùn)行.py文件的區(qū)別是:直接輸入python進(jìn)入交互模式,相當(dāng)于啟動(dòng)了Python解釋器,等待一行一行地輸入源代碼,每輸入一行就執(zhí)行一行。用Python開發(fā)程序,完全可以一邊在文本編輯器中寫代碼,一邊開一個(gè)交互式命令窗口,在寫代碼的過程中,把部分代碼粘貼到命令行去驗(yàn)證。如果需要運(yùn)行大段程序,其過程如下:IDL
17、E 新建 Python 文件打開IDLE后,點(diǎn)擊左上角File,然后點(diǎn)擊第一項(xiàng)New File,即可創(chuàng)建python文件?;蛘咧苯邮褂每旖萱ICtrl + N快速創(chuàng)建。在創(chuàng)建的文件中寫 Python 代碼。保存文件。直接使用快捷鍵Ctrl + S,可快速保存。也可以點(diǎn)擊窗口左上角File,然后點(diǎn)擊Save,取個(gè)文件名(擴(kuò)張名為.py或.pyw),完成保存。運(yùn)行保存好的 Python 文件直接在IDLE中運(yùn)行Python程序。點(diǎn)擊窗口上方Run,然后點(diǎn)擊RunModule,可運(yùn)行程序。也可以通過快捷鍵F5,快速運(yùn)行。1.3.2 Anaconda3Anaconda3開發(fā)環(huán)境包集成大量常用的擴(kuò)展庫(kù),并
18、提供Jupyter Notebook 和Spyder兩個(gè)開發(fā)環(huán)境。從官方網(wǎng)站https/downloag/下載合適版本并安裝,然后啟動(dòng)Jupyter Notebook或Spyder。Jupyter Notebook尤其適用于事機(jī)器學(xué)習(xí)和數(shù)據(jù)科學(xué)。1. Jupyter NotebookJupyter Notebook尤其適用機(jī)器學(xué)習(xí)和數(shù)據(jù)科學(xué),Jupyter Notebook的主要特點(diǎn)如下。編程時(shí)具有語(yǔ)法高亮、縮進(jìn)、tab補(bǔ)全的功能??芍苯油ㄟ^瀏覽器運(yùn)行代碼,同時(shí)在代碼塊下方展示運(yùn)行結(jié)果。以富媒體格式展示計(jì)算結(jié)果。富媒體格式包括:HTML,LaTeX,PNG,SVG等。對(duì)代碼編寫說明文檔或語(yǔ)句時(shí)
19、,支持Markdown語(yǔ)法。支持使用LaTeX編寫數(shù)學(xué)性說明。是較流行的Python開發(fā)環(huán)境之一。2.SpyderAnaconda3自帶的集成開發(fā)環(huán)境Spyder可通過交互式開發(fā)界面和程序編程于運(yùn)行界面,以及程序調(diào)試和項(xiàng)目管理功能,使用非常方便。在使用python進(jìn)行交互式或原型化開發(fā)時(shí),Spyder是其中一個(gè)較好的選擇。Spyder的主要特點(diǎn)如下支持交互式python開發(fā),完全繼承了Ipythonshell版本;完善的編輯器:高亮顯示、動(dòng)態(tài)代碼內(nèi)省、代碼瀏覽器和函數(shù),即時(shí)代碼檢查;強(qiáng)大的項(xiàng)目管理:定義管理項(xiàng)目,生成代辦事列表;強(qiáng)大的調(diào)試功能:設(shè)置要與python調(diào)試器pdb一起使用的斷點(diǎn)和條
20、件斷點(diǎn);變量、對(duì)象檢查器:編輯比較變量和數(shù)組;實(shí)時(shí)生成二維圖表;交互式顯示文檔字符串。 1.3.3文本編輯使用交互模式書寫程序的好處是立刻就能得到運(yùn)行結(jié)果,但是不保存結(jié)果,下次需要運(yùn)行結(jié)果時(shí),還得再運(yùn)行一遍。所以在實(shí)際開發(fā)時(shí),總是使用一個(gè)文本編輯器來書寫代碼,寫完之后,用一個(gè)文件保存,就可以反復(fù)運(yùn)行了。在開發(fā)中,經(jīng)常使用Sublime Text文本編輯器和Notepad+文本編輯器。1. SublimeText文本編輯器Sublime Text 還是一款免費(fèi)的、跨 OS X、Linux 和 Windows 三大平臺(tái)的文字/代碼編輯器。具有高效、無干擾的界面。Sublime Text的主要功能包
21、括:拼寫檢查,書簽,完整的 Python API ,Goto 功能,即時(shí)項(xiàng)目切換,多選擇,多窗口等。在編輯方面的多選、宏、代碼片段等功能,以及很有特色的Minimap。Sublime Text界面設(shè)置非常人性化,左邊是代碼縮略圖,右邊是代碼區(qū)域,可以在左邊的代碼縮略圖區(qū)域輕松定位程序代碼的位置,高亮色彩功能非常方便編程工作。如圖1-7所示。2. Notepad+文本編輯器Notepad+文本編輯器也可以免費(fèi)使用,中文界面如圖1-8所示。Notepad+是Windows平臺(tái)上一款免費(fèi)且開源的文本編輯器,其功能比Windows系統(tǒng)自帶的Notepad(記事本)強(qiáng)大。Notepad+除了可以用于一般
22、的純文本記錄,還可以用于編寫小型的計(jì)算機(jī)程序,因?yàn)镹otepad+不僅支持多種編程語(yǔ)言的語(yǔ)法高亮顯示,還有代碼折疊功能,并且Notepad+還支持很多具有特色功能的插件,給日常應(yīng)用帶來很多的便利。不能使用Word和Windows記事本。其原因是Word保存的不是純文本文件。 例如,當(dāng)Notepad+文本編輯器安裝完成之后,輸入以下代碼:print(hello,world)print前面不要有空格。然后,選擇一個(gè)目錄,例如C:Workspace,將其保存到文件名為hello.py的文件中,在此之后,打開命令行窗口,將當(dāng)前目錄切換到hello.py文件所在目錄,可以運(yùn)行這個(gè)程序:C:Workspa
23、cepython hello.pyhello,world也可以保存為其它的名字,例如abc.py,但是必須要以.py結(jié)尾。此外,文件名只能是英文字母、數(shù)字和下劃線的組合。如果當(dāng)前目錄下沒有hello.py這個(gè)文件,運(yùn)行python hello.py將給出如下錯(cuò)誤提示:python hello.pypython:can t open file hello.py:Errno2No such file or directory錯(cuò)誤提示說明:因?yàn)槲募淮嬖冢瑹o法打開hello.py這個(gè)文件。這時(shí)需要檢查當(dāng)前目錄下是否有這個(gè)文件。1.4 Python基礎(chǔ)語(yǔ)法對(duì)于計(jì)算機(jī)語(yǔ)言程序,計(jì)算機(jī)需要根據(jù)程序執(zhí)行任務(wù)
24、,因此,就必須保證利用程序語(yǔ)言寫出的程序不能出現(xiàn)歧義。由于任何一種程序語(yǔ)言都有自己的語(yǔ)法規(guī)范,編譯程序或者解釋程序負(fù)責(zé)將符合語(yǔ)法規(guī)范的源程序轉(zhuǎn)換成計(jì)算機(jī)能夠理解與直接執(zhí)行的機(jī)器語(yǔ)言程序。下面從Python基礎(chǔ)語(yǔ)法開始,逐步深入介紹Python語(yǔ)言。1.4.1一個(gè)簡(jiǎn)單的Python程序首先以一個(gè)簡(jiǎn)單的Python程序?yàn)槔瑏碚f明Python程序的基本結(jié)構(gòu)。例1.1,一個(gè)簡(jiǎn)單的Python程序#一個(gè)簡(jiǎn)單的Python程序print(enter Python world!)a=100if a=0:print(a)else:print(-a)上述的Python程序解說如下。1.以#開頭的語(yǔ)句是注釋語(yǔ)句
25、,注釋可以是任意內(nèi)容,解釋器忽略掉注釋。在這里的注釋是“一個(gè)簡(jiǎn)單的Python 程序”。2.print(enter Python world!)語(yǔ)句是一個(gè)輸出函數(shù)語(yǔ)句,輸出enter Python world!。3.每一行都是一個(gè)語(yǔ)句,當(dāng)語(yǔ)句以冒號(hào)“:”結(jié)尾時(shí),被縮進(jìn)的語(yǔ)句可以看作語(yǔ)句塊(語(yǔ)句集),在本例中,語(yǔ)句塊僅有一條語(yǔ)句print(a)。4.執(zhí)行過程是首先為變量a賦值100,然后通過條件語(yǔ)句判斷a是否大于或等于0,如果大于或等于0,則輸出a的值,否則輸出-a的值。5.縮進(jìn)的好處是強(qiáng)迫編程者寫出格式化的代碼,按照約定,應(yīng)該始終堅(jiān)持使用4個(gè)空格的縮進(jìn)(使用Tab鍵)??s進(jìn)的另一個(gè)好處是通過較
26、少的縮進(jìn)代碼,就可以將一段很長(zhǎng)的代碼拆分成若干函數(shù)??s進(jìn)的不足之處是,當(dāng)重構(gòu)代碼時(shí),粘貼過去的代碼必須重新檢查縮進(jìn)是否正確。6.print()是一條輸出函數(shù)語(yǔ)句,print(a)是指輸出變量a的內(nèi)容,print(-a)是指輸出-a的內(nèi)容。7.在書寫Python程序中,要注意區(qū)分大小寫,Python與python是兩個(gè)不同的單詞。如果寫錯(cuò)了大小寫,程序?qū)?bào)錯(cuò)。上述這個(gè)簡(jiǎn)單程序的運(yùn)行結(jié)果是:enter Python world! 1001.4.2 Python程序的基本結(jié)構(gòu) Python程序由模塊構(gòu)成、模塊包含語(yǔ)句、語(yǔ)句包含表達(dá)式、表達(dá)式由運(yùn)算符、變量、常量等對(duì)象組成。1.Python程序由模塊組
27、成,模塊對(duì)應(yīng)后綴為.py的源文件,一個(gè)Python程序可以由一個(gè)或多個(gè)模塊組成。2.運(yùn)行Python程序時(shí),需要按照程序中的語(yǔ)句順序依次執(zhí)行。3.語(yǔ)句包含表達(dá)式,主要用于創(chuàng)建對(duì)象、變量賦值、調(diào)用函數(shù)、控制分支、創(chuàng)建循環(huán)等。1.4.3基本語(yǔ)法規(guī)則1.標(biāo)識(shí)符在程序設(shè)計(jì)語(yǔ)言中,將變量、常量、函數(shù)和語(yǔ)句塊的名字統(tǒng)稱之為標(biāo)識(shí)符。標(biāo)識(shí)符可以是字、編號(hào)、字母、符號(hào),也可以是上述元素的集合。Python的標(biāo)識(shí)符命名規(guī)則如下:首字符必須是字母、漢字或下劃線;中間可以是字母、下劃線、數(shù)字或漢字,但不能有空格;區(qū)分大小寫字母,例如Python和python代表不同的兩個(gè)變量;不能使用下述的關(guān)鍵字。例如,下面是正確的
28、標(biāo)識(shí)符:Abc、b23、Abc。例如,下述的聲明都屬于語(yǔ)法錯(cuò)誤:2x=222x的第一個(gè)字母是數(shù)字2。if=32使用關(guān)鍵字if作為標(biāo)識(shí)符名稱。2.關(guān)鍵字關(guān)鍵字又稱保留字,是Python系統(tǒng)內(nèi)部定義和使用的特定標(biāo)識(shí)符。關(guān)鍵字不能用作常數(shù)或變量,或任何其他標(biāo)識(shí)符名稱,所有Python的關(guān)鍵字只由小寫字母組成。Python 3.x的關(guān)鍵字如下:False None True and as assert async await breakclass continue def del elif else except finally for fromglobal if import in is lambd
29、a nonlocal not or passraise return try while with yield 如果編寫的程序使用了關(guān)鍵字作為標(biāo)識(shí)符,那么Python解釋器就會(huì)發(fā)出語(yǔ)法錯(cuò)誤(SyntaxError:invalid syntax)的警告提示信息。3.注釋注釋用于說明和備注程序中的語(yǔ)句和運(yùn)算,適當(dāng)?shù)貢鴮懽⑨屨Z(yǔ)句可以很好地增加程序的可讀性和可維護(hù)性,方便對(duì)代碼的調(diào)試和糾錯(cuò)。在Python語(yǔ)言中,使用 “#”符號(hào)單行注釋,使用三個(gè)單引號(hào)注釋多行。注釋語(yǔ)句僅為說明性的文字,不作為代碼運(yùn)行。例如:?jiǎn)涡凶⑨專?一個(gè)簡(jiǎn)單的Python程序多行注釋:一個(gè)簡(jiǎn)單的Python程序 4.縮進(jìn)規(guī)則在Py
30、thon中不使用大括號(hào),而使用縮進(jìn)表示代碼塊,這是Python的重要特色之一??s進(jìn)的空格數(shù)可變,但是,需要同一代碼塊的語(yǔ)句必須包含相同的縮進(jìn)空格數(shù)。在Python中,為了明顯表現(xiàn)程序的層次,應(yīng)用了縮進(jìn)代碼風(fēng)格。一般為4個(gè)空格。例如:if分支語(yǔ)句:If a=0: x=10 Print(x)Else: x=-10 print(x0)5.語(yǔ)句塊語(yǔ)句是通過縮進(jìn)形成的語(yǔ)句集合。例如,由于下述程序第2行語(yǔ)句的縮進(jìn)空格數(shù)不對(duì),將導(dǎo)致程序的運(yùn)行錯(cuò)誤。If True:print(answer:) print(True) else: print(answer:) print(False) 6.一條語(yǔ)句可跨越多行終
31、止行終止行就是終止語(yǔ)句,例如:x=1;在Python中,一般原則是,一行的結(jié)束會(huì)自動(dòng)終止出現(xiàn)該行的語(yǔ)句,也就是說可以省略分號(hào)。例如:x=1一行的結(jié)束就是終止該行語(yǔ)句(可以沒有分號(hào));嵌套語(yǔ)句是代碼塊并且與實(shí)際的縮進(jìn)相關(guān)。語(yǔ)句界定符在Python中使用分號(hào)“;”作為語(yǔ)句界定符。雖然語(yǔ)句一般都是一行一條語(yǔ)句,但在Python中也有可能出現(xiàn)某一行包括多條語(yǔ)句情況,這時(shí)可使用語(yǔ)句界定符分號(hào)“;”分隔開。例如,a=1;b=2;print(a+b)一行包括a=1、b=2和print(a+b)三條語(yǔ)句。為了能夠?qū)崿F(xiàn)一條語(yǔ)句橫跨多行,只需要將語(yǔ)句使用圓括號(hào)“()”、方括號(hào)“”、或者大括號(hào)“”括起來。任何括在這
32、些符號(hào)中的程序代碼都可跨行。在括號(hào)內(nèi)的語(yǔ)句將一直運(yùn)行,直到遇到包含閉合括號(hào)的哪一行為止。例如:mylist=000,111,.222,.333,.444一條語(yǔ)句橫跨四行。括號(hào)內(nèi)可以包含任何表達(dá)式,例如:x=(a+b+c+d)在上述語(yǔ)句中。表達(dá)式橫跨兩行。當(dāng)上一行以反斜線結(jié)束時(shí),可以在下一行繼續(xù),例如:total=x1+x2+x3等價(jià)于total=x1+x2+x3反斜杠“斜杠用于代碼跨越多行的情況。如果一條語(yǔ)句過長(zhǎng),在一行內(nèi)寫不完,可使用反斜杠來完成多行書寫。對(duì)于由三引號(hào)定義的字符串()、元組()列表()和字典()可以放在多行,而不必使用續(xù)行符,這是由于他們可以準(zhǔn)確地表示定義的開始與結(jié)束。在、(
33、)中的多行語(yǔ)句,不需要使用反斜杠。例如:total=x1,x2,x3,x4,x5,x6,x7,x87.同一行內(nèi)可以使用多條語(yǔ)句一般情況下,一行書寫多條語(yǔ)句,在一行書寫多條語(yǔ)句時(shí),各個(gè)語(yǔ)句之間可以使用分號(hào)“;”相隔,當(dāng)換行時(shí),使用換行符分隔。例如:a=1;b=2;c=3s=abc;print(s)從第一行開始,前面不能有任何空格,否則將出現(xiàn)錯(cuò)誤。注釋語(yǔ)句可以在任何位置開始。復(fù)合語(yǔ)句構(gòu)造體必須縮進(jìn)表示層次關(guān)系。例如,循環(huán)語(yǔ)句:for i in range(5);printa(i)循環(huán)體語(yǔ)句printa(i)向右縮進(jìn)4格。1.5標(biāo)準(zhǔn)庫(kù)與擴(kuò)展庫(kù)庫(kù)是具有相關(guān)功能模塊的集合,這也是Python的特色之一,
34、即具有強(qiáng)大的標(biāo)準(zhǔn)庫(kù)、第三方擴(kuò)展庫(kù)。1.5.1標(biāo)準(zhǔn)庫(kù)在Python中提供了功能強(qiáng)大的標(biāo)準(zhǔn)庫(kù),Python 的標(biāo)準(zhǔn)庫(kù)非常豐富,如下面列出的內(nèi)容所示,其提供了非常多的功能。庫(kù)包含內(nèi)置模塊(用C編寫)提供訪問系統(tǒng)的功能,如文件 I/O,以及在為發(fā)生在日常編程中的許多問題提供標(biāo)準(zhǔn)化的解決方案的 Python 模塊。這些模塊的一些明確旨在鼓勵(lì)和加強(qiáng)的 Python 程序的可移植性的抽象掉平臺(tái)細(xì)節(jié)到非特定于平臺(tái)的 Api。Windows 平臺(tái)的 Python 安裝程序通常包括整個(gè)標(biāo)準(zhǔn)庫(kù),而且還包含許多額外的組件。對(duì)于 unix 操作系統(tǒng) Python 通常提供作為軟件包的集合,因此,它可能需要使用與操作系統(tǒng)
35、提供的包裝工具來獲取某些或所有的可選組件。除了標(biāo)準(zhǔn)庫(kù),還有正在增長(zhǎng)的幾千個(gè)組件,包括從個(gè)別程序和模塊的軟件包到整個(gè)應(yīng)用程序開發(fā)框架,可以從Python軟件包索引選擇下載。常用的標(biāo)準(zhǔn)庫(kù)如表1-1所示。表1-1常用的標(biāo)準(zhǔn)庫(kù)標(biāo)準(zhǔn)庫(kù)是指安裝Python就已經(jīng)安裝好了。標(biāo)準(zhǔn)庫(kù)導(dǎo)入方法如下:1. import整個(gè)標(biāo)準(zhǔn)庫(kù)的導(dǎo)入的格式為:import 標(biāo)準(zhǔn)庫(kù)名例如:import random通過這種導(dǎo)入可以使用這個(gè)庫(kù)中的公共的函數(shù)、類或?qū)傩浴J褂玫男问绞牵簶?biāo)準(zhǔn)庫(kù)名.函數(shù)名import可以同時(shí)在一行語(yǔ)句中導(dǎo)入多個(gè)庫(kù),例如:import modulename1, modulename2, modulename3
36、2. from import導(dǎo)入的格式為:from modulename import funcname (關(guān)鍵字 模塊名 關(guān)鍵字 方法名)標(biāo)準(zhǔn)庫(kù)說明math數(shù)學(xué)模塊random隨機(jī)數(shù)以及隨機(jī)化相關(guān)模塊datetime日期時(shí)間模塊collections包含更多擴(kuò)展性序列的模塊functools與函數(shù)以及函數(shù)式編程有關(guān)的模塊tkinter開發(fā)GUI程序的模塊urllib與網(wǎng)頁(yè)內(nèi)容讀取以及網(wǎng)頁(yè)地址解析有關(guān)的模塊例如:from random import randrange 這種導(dǎo)入就比第一種更加的具體,并不是導(dǎo)入整個(gè)模塊,而是導(dǎo)入模塊中的某個(gè)函數(shù)、類或?qū)傩?。因?yàn)?,funcname被直接導(dǎo)入到本地的
37、名字空間了,這樣具體的導(dǎo)入后就可以在使用的時(shí)候直接使用import的funcname而不需要在funcname前面加上modulename。1.5.2擴(kuò)展庫(kù)擴(kuò)展庫(kù)是程序設(shè)計(jì)者為了實(shí)現(xiàn)某個(gè)功能編寫的模塊,又稱為擴(kuò)展庫(kù)。例如,pandas用于數(shù)據(jù)分析、numpy用于數(shù)組技術(shù)與矩陣計(jì)算,scipy應(yīng)用于科學(xué)計(jì)算等,已經(jīng)涉及了眾多領(lǐng)域。常用擴(kuò)展庫(kù)如表1-2所示。表1-2常用擴(kuò)展庫(kù)擴(kuò)展庫(kù)場(chǎng)景openpyxl讀寫Excel文件python-docx讀寫Word文件numpy數(shù)組計(jì)算和矩陣計(jì)算scipy科學(xué)計(jì)算pandas數(shù)據(jù)分析matplotlib數(shù)據(jù)可視化或科學(xué)計(jì)算可視化scrapy爬蟲框架shutil
38、系統(tǒng)運(yùn)維pyopengl計(jì)算機(jī)圖形學(xué)編程pygame游戲開發(fā)sklearn機(jī)器學(xué)習(xí)tensorflow深度學(xué)習(xí)1. 擴(kuò)展庫(kù)安裝標(biāo)準(zhǔn)庫(kù)是指安裝Python就已經(jīng)安裝,需要先安裝之后,再導(dǎo)入、使用。擴(kuò)展庫(kù)安管理工具pip功能說明如表1-3所示。表1-3 pip功能說明如果計(jì)算上安裝多個(gè)版本的python或希望在虛擬環(huán)境中安裝模塊,最好切換至相應(yīng)環(huán)境的scripts文件夾下再執(zhí)行命令。2.擴(kuò)展庫(kù)導(dǎo)入import擴(kuò)展庫(kù)名 as 別名必須以“擴(kuò)展庫(kù)名.對(duì)象名”或“別名.對(duì)象名”的形式訪問對(duì)象。例如:#計(jì)算最大公約數(shù)。import math math.gcd(2,4)from擴(kuò)展庫(kù)名 import 對(duì)象名
39、as 別名pip命令實(shí)例說明pip freeze列出已安裝模塊及其版本號(hào)pip install package=version在線安裝指定模塊(的指定版本)pip install package.whl離線安裝擴(kuò)展模塊pip install package1 package2依次在線安裝模塊1、模塊2pip install -upgrade package升級(jí)模塊pip uninstall package=version卸載模塊不需要使用擴(kuò)展庫(kù)名作為前綴。from math import gcd()gcd(2,4)一次性導(dǎo)入擴(kuò)展庫(kù)所有對(duì)象,一般不推薦使用。from math import *
40、gcd(2,4)sin(5)1.6字符編碼在默認(rèn)情況下,Python3源碼文件采用UTF-8編碼,所有字符串都是unicode字符串,但也可以是源碼文件所指定的編碼。1.6.1Unicode編碼因?yàn)橛?jì)算機(jī)只能處理數(shù)字,如果需要處理文本,就必須先把文本轉(zhuǎn)換為數(shù)字之后才能處理。早期的計(jì)算機(jī)在設(shè)計(jì)時(shí)采用8個(gè)比特(bit)作為一個(gè)字節(jié)(byte),所以一個(gè)字節(jié)能表示的最大的整數(shù)就是255。如果要表示更大的整數(shù),就必須用更多的字節(jié)。例如兩個(gè)字節(jié)可以表示的最大整數(shù)是65535,四個(gè)字節(jié)可以表示的最大整數(shù)是4294967295。將127個(gè)字母編碼(主要有大小寫英文字母、數(shù)字和一些符號(hào)等)稱之為ASCII編碼
41、,例如大寫字母A的編碼是65,小寫字母z的編碼是122。對(duì)于各種程序語(yǔ)言,各國(guó)有各自的標(biāo)準(zhǔn),出現(xiàn)沖突不可避免,導(dǎo)致在多語(yǔ)言混合的文本中,容易出現(xiàn)亂碼?;谏鲜鰡栴},Unicode編碼應(yīng)運(yùn)而生。最常用的是用兩個(gè)字節(jié)表示一個(gè)字符,對(duì)于非常不常用的字符,可用四個(gè)字節(jié)表示。當(dāng)下的操作系統(tǒng)和大多數(shù)編程語(yǔ)言都支持Unicode編碼。ASCII編碼是1個(gè)字節(jié),而Unicode編碼通常是2個(gè)字節(jié)。漢字已經(jīng)超出了ASCII編碼的范圍??梢钥闯?,如果將ASCII的A字符編碼用Unicode編碼表示,只需要在ASCII的A字符編碼前面補(bǔ)0就可以,因此,A的Unicode編碼是0000000001000001??梢钥?/p>
42、出,如果統(tǒng)一為Unicode編碼,就可以避免亂碼問題。但是,如果文本基本上全部是英文,用Unicode編碼比ASCII編碼需要多一倍的存儲(chǔ)空間,在存儲(chǔ)和傳輸上消耗了更多資源。為此,出現(xiàn)了將Unicode編碼轉(zhuǎn)化為可變長(zhǎng)編碼的UTF-8編碼的方法。UTF-8編碼是將一個(gè)Unicode字符根據(jù)不同的數(shù)字大小編碼成1-6個(gè)字節(jié),常用的英文字母編碼為1個(gè)字節(jié),漢字通常是3個(gè)字節(jié),只有不常用的字符被編碼成4-6個(gè)字節(jié)。如果需要傳輸?shù)奈谋景罅坑⑽淖址褂肬TF-8編碼就可以節(jié)省空間。除此之外,UTF-8編碼還有一個(gè)好處就是可以將ASCII編碼看成是UTF-8編碼的一部分,即ASCII編碼是UTF-8
43、編碼的子集,所以大量只支持ASCII編碼的軟件可以在UTF-8編碼下繼續(xù)工作,進(jìn)而實(shí)現(xiàn)了向下兼容的功能。在計(jì)算機(jī)內(nèi)存中統(tǒng)一使用Unicode編碼,當(dāng)需要保存到硬盤或者需要傳輸時(shí)就轉(zhuǎn)換為UTF-8編碼。在用記事本編輯時(shí),將從文件讀取的UTF-8字符轉(zhuǎn)換為Unicode字符后存到內(nèi)存中,編輯完成后,再將Unicode轉(zhuǎn)換為UTF-8保存到文件中,其過程如圖1-9所示。瀏覽網(wǎng)頁(yè)時(shí),服務(wù)器將動(dòng)態(tài)生成的Unicode內(nèi)容轉(zhuǎn)換為UTF-8,然后再傳輸?shù)綖g覽器。如果在網(wǎng)頁(yè)的源碼中含有類似的信息,則表示該網(wǎng)頁(yè)使用了UTF-8編碼。1.6.2編碼使用說明由于Python源代碼是一個(gè)文本文件,所以當(dāng)源代碼中包含中
44、文時(shí),為了保存源代碼,就需要指定保存為UTF-8編碼。當(dāng)Python讀取源代碼時(shí),為了按UTF-8編碼讀取,通常在文件開頭寫上如下兩行:#!/usr/bin/envpython#-*-coding:utf-8-*-第1行注釋是,這是一個(gè)Python可執(zhí)行程序,Windows系統(tǒng)會(huì)忽略這個(gè)注釋;第2行注釋是,按照UTF-8編碼讀取源代碼,否則,在源代碼中寫的中文輸出可能出現(xiàn)亂碼。如果使用Notepad+進(jìn)行編輯,除了要加上#-*-coding:utf-8-*-外,中文字符串必須是Unicode字符串。如果.py文件本身使用UTF-8編碼,并且也聲明了#-*-coding:utf-8-*-,打開命
45、令提示符測(cè)試就可以正常顯示中文。第2章 數(shù)據(jù)類型與表達(dá)式Python數(shù)據(jù)類型可分為基本數(shù)據(jù)類型和復(fù)合數(shù)據(jù)類型,基本數(shù)據(jù)類型主要有數(shù)值型、字符串型和布爾型,復(fù)合數(shù)據(jù)類型主要有元組、集合、列表和字典等。2.1基本數(shù)據(jù)類型在Python語(yǔ)言中,任何數(shù)據(jù)類型的數(shù)據(jù)都可以看成一個(gè)對(duì)象,可以利用變量指向這些數(shù)據(jù)對(duì)象,也就是說,可以通過對(duì)變量賦值實(shí)現(xiàn)數(shù)據(jù)與變量相關(guān)聯(lián)2.1.1數(shù)值類型數(shù)值類型主要有整型數(shù)、浮點(diǎn)數(shù)和復(fù)數(shù)型數(shù)。1.整型數(shù)整型數(shù)可以表示任意大小的正、負(fù)整數(shù),表示方法與數(shù)學(xué)上的寫法完全相同。字面量是以變量或常量給出的原始數(shù)據(jù),在Python中有各種類型的字面量,例如:b=101是將整數(shù)十進(jìn)制字面量分
46、配到變量b中。數(shù)值的字面量通常以十進(jìn)制表示,可以根據(jù)特定情況,數(shù)值的字面量也可以使用二進(jìn)制、八進(jìn)制或十六進(jìn)制來表示。在Python語(yǔ)言程序中,整型數(shù)的表示方法如下。 十進(jìn)制整數(shù),與數(shù)學(xué)上的寫法完全相同,例如:1,50,100,-8080,-100和0。 二進(jìn)制整數(shù),以0b開頭、后跟二進(jìn)制數(shù)的數(shù)據(jù),例如:0b100。 八進(jìn)制整數(shù),以0o開頭、后跟八進(jìn)制數(shù)的數(shù)據(jù),例如:0o100。 十六進(jìn)制整數(shù),以0 x開頭、后跟十六進(jìn)制數(shù)的數(shù)據(jù),例如:0 x90f。 2.浮點(diǎn)數(shù)浮點(diǎn)數(shù)可以表示實(shí)數(shù)數(shù)據(jù),浮點(diǎn)數(shù)由整數(shù)部分、小數(shù)點(diǎn)和小數(shù)部分組成。浮點(diǎn)數(shù)的表示方法如下。十進(jìn)制小數(shù)表示法使用十進(jìn)制小數(shù)表示法表示浮點(diǎn)數(shù),如
47、3.1415926、12.3和0.0等,這里的0.0并不是0,小數(shù)點(diǎn)左邊的0表示一個(gè)整數(shù),而小數(shù)點(diǎn)右邊的0表明是一個(gè)浮點(diǎn)數(shù)。在Python中,用字母e(或E)來表示以10為底數(shù)的指數(shù),可將1.23109寫成1.23e9或者12.3e8。整數(shù)和浮點(diǎn)數(shù)在計(jì)算機(jī)內(nèi)部存儲(chǔ)的方式不同,其中,整數(shù)運(yùn)算可以永遠(yuǎn)保持精確,而浮點(diǎn)數(shù)運(yùn)算則包含了由于四舍五入引起的運(yùn)算誤差?;谶@一點(diǎn)考慮,應(yīng)該避免在浮點(diǎn)數(shù)之間直接進(jìn)行相等的比較,如果一定需要比較,則可以使用兩個(gè)浮點(diǎn)數(shù)之差的絕對(duì)值是否足夠小來作為判斷兩個(gè)浮點(diǎn)數(shù)數(shù)是否相等的條件。例如:0.5-0.4=0.1Falseabs(0.5-0.4-0.1)import sys
48、 #導(dǎo)入系統(tǒng)模塊sys.float_info.max #當(dāng)前系統(tǒng)下浮點(diǎn)數(shù)所能夠表示的最大數(shù)1.7876931348623157e+308sys.float_info.min #當(dāng)前系統(tǒng)下浮點(diǎn)數(shù)所能夠表示的最小數(shù)2.2250738585072014e-3083.復(fù)數(shù)型數(shù)復(fù)數(shù)型數(shù)表示數(shù)學(xué)中的復(fù)數(shù),復(fù)數(shù)由實(shí)數(shù)部分和虛數(shù)兩部分組成,可以使用re+imj或者re+imJ表示,其中復(fù)數(shù)的實(shí)部re和虛部im都是浮點(diǎn)數(shù)。j(或J)為虛數(shù)單位,j的平方等于-1。復(fù)數(shù)的實(shí)部和虛部的獲取方法可以使用a+bj或complex(a,b)來表示復(fù)數(shù)的實(shí)部和虛部,其語(yǔ)法格式如下:complex(re,im)re為real,
49、表示復(fù)數(shù)的實(shí)部。im為imag,表示復(fù)數(shù)的虛部。復(fù)數(shù)的實(shí)部和虛部都z是浮點(diǎn)型。由于complex本身也是類,因此,屬性re和im可用于獲取復(fù)數(shù)的實(shí)部和虛部,相關(guān)屬性獲取的語(yǔ)法格式如下: 獲取復(fù)數(shù)的實(shí)數(shù)部分:x.real獲取復(fù)數(shù)的虛數(shù)部分:x.imag獲取共軛復(fù)數(shù)的方法獲取共軛復(fù)數(shù)的方法為:z.conjugate()其中z為complex對(duì)象。如果z=1.1+5j,則使用conjugate()方法可以獲取其共軛復(fù)數(shù)為1.1-5j。z=1.1+5j z.conjugate()1.1-5j4.數(shù)值類型的轉(zhuǎn)換可以對(duì)數(shù)值類型進(jìn)行轉(zhuǎn)換,常用下述的四個(gè)函數(shù)來完成數(shù)值類型的轉(zhuǎn)換。int(x)利用int(x)可
50、將x轉(zhuǎn)換為一個(gè)整數(shù),轉(zhuǎn)換原則是對(duì)x的小數(shù)部分四舍五入取整。例如:int(123.4)123float(x)利用float(x)可將x轉(zhuǎn)換為一個(gè)浮點(diǎn)數(shù),轉(zhuǎn)換原則是對(duì)x添加小數(shù)點(diǎn)并在小數(shù)點(diǎn)后面添加一個(gè)0。例如:float(123)123.0例如,對(duì)于付款中的免除找零的問題,可以利用int(x)函數(shù)和float(x)函數(shù)的復(fù)合操作完成。首先使用int(x)函數(shù)將x取整,然后再使用float(x)函數(shù)轉(zhuǎn)換成浮點(diǎn)數(shù)。float(int(123.4)123.0說明對(duì)123.4免除找零,僅找回123.0即可。complex(x)利用complex(x)函數(shù)可以將x轉(zhuǎn)換為一個(gè)復(fù)數(shù),實(shí)數(shù)部分為x,虛數(shù)部分為0。
51、例如:x=2.2complex(x)(2.2+0.0j)complex(x,y)利用complex(x,y)函數(shù)可將x和y轉(zhuǎn)換為一個(gè)復(fù)數(shù),實(shí)數(shù)部分為x,虛數(shù)部分為y,x和y是數(shù)字表達(dá)式。例如:x=2.2y=3.3complex(x,y)(2.2+3.3j)2.1.2字符串型字符串(String)是由數(shù)字、字母、下劃線組成的一串字符。字符串是用單引號(hào)()或者用雙引號(hào)()括起來的單行字符串,用三個(gè)引號(hào)括起來的是多行字符串??捎谩皊tr”來表示其類型,例如,abc,xyz等都是Python語(yǔ)言的字符串。其中單引號(hào)或者雙引號(hào)只是一種標(biāo)注方式,其本身并不是字符串的一部分,因此,字符串a(chǎn)bc只包含a,b,
52、c這3個(gè)字符。如果單引號(hào)本身也是一個(gè)字符,可以使用雙引號(hào)括起來,例如,Im OK包含的字符是I,m,空格,O,K這6個(gè)字符。str1=Big Datastr2=Data Manning用三引號(hào)括起來的內(nèi)容是兩行或兩行以上的多行字符串,例如:下面是兩行字符串。Big DataAnalysis & Manning2.1.3布爾型布爾型數(shù)值與布爾代數(shù)的表示完全一致,一個(gè)布爾值只有True、False兩種值,可以用于表示具有兩個(gè)確定狀態(tài)的量,在計(jì)算機(jī)中可用1和0來表示。在Python中,可以直接使用True、False來表示布爾值,也可以通過布爾運(yùn)算(and、or和not運(yùn)算)計(jì)算而得。TrueTru
53、eFalseFalse32True35False布爾值可以使用and、or和not運(yùn)算。and運(yùn)算and運(yùn)算又稱“與”運(yùn)算,只有所有都為True,and運(yùn)算結(jié)果才是True:True and TrueTrueTrue and FalseFalseFalse and FalseFalseor運(yùn)算 or運(yùn)算又稱為“或”運(yùn)算,只要其中有一個(gè)為True,or運(yùn)算的結(jié)果就是True。True or TrueTrueTrue or FalseTrueFalse or FalseFalsenot運(yùn)算not運(yùn)算又稱“非”運(yùn)算,它是一個(gè)單目運(yùn)算符,其功能使將True變成False,F(xiàn)alse變成True。not
54、 TrueFalsenot FalseTrue布爾型數(shù)值經(jīng)常用在條件判斷中,例如:if age=18:print(adult) else:print(no adult )2.1.4空值空值是Python語(yǔ)言的一個(gè)特殊值,用None表示。不能將空值理解為0,這是因?yàn)?是一個(gè)有意義的數(shù),而None是一個(gè)空值。2.2復(fù)合數(shù)據(jù)類型Python包含的復(fù)合數(shù)據(jù)類型主要有序列類型、映射數(shù)據(jù)類型和集合類型。序列類型是一個(gè)元素向量,元素之間存在先后關(guān)系,通過序號(hào)進(jìn)行訪問,序列類型主要有列表、元組和字符串等。映射數(shù)據(jù)類型是一種鍵值對(duì),一個(gè)鍵只能夠?qū)?yīng)一個(gè)值,但是多個(gè)鍵可以對(duì)應(yīng)相同的值,而且通過鍵可以訪問值。字典是
55、Python中唯一的映射數(shù)據(jù)類型。字典中的元素沒有特定的順序,每個(gè)值都對(duì)應(yīng)一個(gè)唯一的鍵。字典類型的數(shù)據(jù)與序列類型的數(shù)據(jù)的區(qū)別是存儲(chǔ)和訪問方式不同。另外,序列類型僅使用整數(shù)作為序號(hào),而映射類型可以使用整數(shù)、字符串或者其它類型的數(shù)據(jù)作為鍵,而且鍵和值具有一定關(guān)聯(lián)性,即鍵可以映射到數(shù)值。集合類型是通過數(shù)學(xué)中的集合概念而引入,集合是一種無序不重復(fù)集。集合的元素類型只能夠是固定數(shù)據(jù)類型,例如整型、字符串、元組等,而列表、字典等是可變數(shù)據(jù)類型,不能夠作為集合中的數(shù)據(jù)元素,集合可以進(jìn)行交、并、差、補(bǔ)等集合運(yùn)算。2.2.1集合集合是一個(gè)無序的不重復(fù)元素的序列,其基本功能是完成成員關(guān)系測(cè)試和刪除重復(fù)元素。集合的
56、語(yǔ)法格式為:value1,value2,valueivaluen其中,使用大括號(hào)括起來的valuei為集合元素,各個(gè)元素之間使用逗號(hào)隔開。例如number集合為;number=1,2,3,4,5,62.2.2列表在Python語(yǔ)言中,用方括號(hào)表示一個(gè)列表,在方括號(hào)中,可以是整型數(shù)據(jù),也可以是字符串型的數(shù)據(jù),甚至也可以是布爾型數(shù)值。列表的語(yǔ)法格式為:value1,value2,valueivaluen其中,使用方括號(hào)括起來的valuei為列表元素,各個(gè)元素之間使用逗號(hào)隔開。例如,list1、list2和list3是三個(gè)列表,其內(nèi)容如下:lis1=bigdata,proceding,2008,20
57、18lis2=10,20,30,40,50,60,70,80,90lis3=a,B,c,D列表是Python語(yǔ)言中的一種最常用的數(shù)據(jù)類型,列表的各數(shù)據(jù)項(xiàng)不需要具有完全相同的數(shù)據(jù)類型。列表初始化之后,可以對(duì)其元素進(jìn)行修改??捎胊=定義了一個(gè)變量a,表明它是列表類型變量,但其內(nèi)容為空。2.2.3元組Python的元組是另一種有序列表,元組用“()”符號(hào)表示。元組的語(yǔ)法格式為:(value1,value2,valueivaluen)元組與列表相類似,但是,在Python中元組是不可變數(shù)據(jù)類型,元組一旦初始化之后,元組的元素就不能修改。因?yàn)樵M元素不可變,所以其代碼更為安全?;谶@一點(diǎn)考慮,在Pyth
58、on程序中,如果能用元組代替列表就盡量使用元組。例如,tup1、tup2和tup3是三個(gè)元組:tup1=(Bigdata,Datamining,1997,2000)tup2=(1,2,3,4,5)tup3=(a,b,c,d)2.2.4字典 Python字典是另一種可變?nèi)萜髂P停值涫怯涉I值對(duì)組成的集合,字典中的值通過鍵來引用。字典的語(yǔ)法格式如下:k1:v1,k2:v2,kn:vn其中ki為鍵,vi為值。例如:dict=xiaowang:2341, xiaozhang:91021.每個(gè)鍵與值用冒號(hào)隔開,前面為鍵,后面為值。各個(gè)鍵值對(duì)之間用逗號(hào)分割,字典整體放在花括號(hào)中。 2.鍵必須為字符串、獨(dú)一
59、無二,但其值則不必一定為字符串。 3.值可以取任何數(shù)據(jù)類型,但必須不可變,如字符串,數(shù)或元組。2.3變量與常量程序設(shè)計(jì)語(yǔ)言的最強(qiáng)大功能之一是操縱變量。2.3.1變量變量代表某個(gè)數(shù)值的名字,以后再使用這個(gè)數(shù)值時(shí),就可以直接引用名字,不用再重寫具體的值。在Python中,變量的使用無需明顯的變量聲明,而且變量類型也不固定。例如,可以將一個(gè)整型數(shù)賦予變量,但隨后也可以將字符串再賦給這個(gè)變量。變量在程序中用一個(gè)變量名表示,變量名必須遵循變量命名規(guī)則。1.變量命名規(guī)則Python中,當(dāng)為變量名賦值時(shí),變量名就會(huì)存在。變量的命名同樣遵守標(biāo)識(shí)符的命名規(guī)則:標(biāo)識(shí)符可以由字母、數(shù)字、下畫線組成,其中數(shù)字不能打頭
60、。 標(biāo)識(shí)符不能是 Python 關(guān)鍵字,但可以包含關(guān)鍵字。 標(biāo)識(shí)符不能包含空格。 區(qū)分大小寫。 下面變量符合標(biāo)識(shí)符的命名規(guī)則: abc_xyz、 HelloWorld、 abc 下面變量不符合標(biāo)識(shí)符的命名規(guī)則: xyz#abc、1abc常選擇有意義的名字作為變量名,以此標(biāo)記變量的用處,有助于記憶。建議變量名以小寫字母開頭。2.舉例說明下劃線可以出現(xiàn)在變量名中,經(jīng)常可以連接多個(gè)詞組,例如:happy_learninghappy_working如果變量名非法,解釋器將提示語(yǔ)法錯(cuò)誤,例如:5Big_Data=12345678上述例子出現(xiàn)了語(yǔ)法錯(cuò)誤,表明為無效的語(yǔ)法,其原因是變量名以數(shù)字5開頭又例如:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 44883-2024流程生產(chǎn)能效管控系統(tǒng)設(shè)計(jì)要求
- 酒店前廳2月份工作計(jì)劃
- 企業(yè)市場(chǎng)銷售部經(jīng)理201年銷售工作計(jì)劃
- 出納個(gè)人工作總結(jié)與計(jì)劃
- 八年級(jí)上冊(cè)數(shù)學(xué)教學(xué)計(jì)劃例文
- 2025幼兒園寒假工作計(jì)劃
- 文員的月個(gè)人工作總結(jié)與計(jì)劃
- 音樂年度工作計(jì)劃匯編
- 學(xué)校標(biāo)準(zhǔn)化建設(shè)自評(píng)工作計(jì)劃
- 衛(wèi)生院控?zé)?025工作計(jì)劃
- 女生穿搭技巧學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 人教版-數(shù)學(xué)-三年級(jí)上冊(cè)-易錯(cuò)題-專項(xiàng)練習(xí)
- 第三章人類社會(huì)及其發(fā)展規(guī)律
- 網(wǎng)絡(luò)信息安全知識(shí)考試參考題庫(kù)300題(含各題型)
- 《特種設(shè)備安全法》宣講
- 【歷史】人教版八年級(jí)上冊(cè)歷史第8單元第26課教育文化事業(yè)的發(fā)展課件(共26張)
- 2024秋國(guó)家開放大學(xué)《馬克思主義基本原理》專題測(cè)試1-8參考答案
- 新概念英語(yǔ)第二冊(cè)33課市公開課獲獎(jiǎng)?wù)n件省名師示范課獲獎(jiǎng)?wù)n件
- 企業(yè)國(guó)際化經(jīng)營(yíng)戰(zhàn)略規(guī)劃與實(shí)施方案
- 3.3-棧的應(yīng)用-迷宮求解解析
- 慢性腎衰竭血液透析患者的流行病學(xué)調(diào)查分析
評(píng)論
0/150
提交評(píng)論