版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第一章Python語言及其編程環(huán)境Python程序設(shè)計基礎(chǔ)【ch01】Python語言及其編程環(huán)境.pptx【ch02】Python的基本語法.pptx【ch03】Python程序的基本流程控制.pptx【ch04】Python的組合數(shù)據(jù)類型.pptx【ch05】文件與基于文本文件的數(shù)據(jù)分析.pptx【ch06】函數(shù).pptx【ch07】面向?qū)ο蟮某绦蛟O(shè)計與Python生態(tài)(1).pptx【ch08】圖形化界面設(shè)計.pptx【ch09】圖形繪制與數(shù)據(jù)可視化.pptx【ch10】正則表達(dá)式與簡單爬蟲.pptx【ch11】數(shù)據(jù)庫操作.pptx【ch12】基于第三方庫的應(yīng)用舉例.pptx全套可編輯PPT課件
了解Python語言的特點。學(xué)會Pythori編程環(huán)境的安裝。逐步熟悉使用一種第三方Python編輯器。本章教學(xué)目標(biāo)yclblak200801Python語言概述PARTONE1.1Python語言概述Python是一種解釋運(yùn)行、面向?qū)ο蟮某绦蛟O(shè)計語言,由GuidovanRossum于1989年發(fā)明,并于1991年公開了第一個發(fā)行版本。由于Python語言簡潔、優(yōu)雅,開發(fā)效率高,使用Python語言既能快速地生成程序的原型,又能方便地封裝成可調(diào)用的擴(kuò)展類庫,程序無須修改就能在Windows、Linux、UNIX和macOS等操作系統(tǒng)上跨平臺使用,因此Python語言常被用于網(wǎng)站開發(fā)、網(wǎng)絡(luò)編程、圖形處理、黑客攻防等,已迅速上升為第一大廣泛應(yīng)用的編程語言。圖1-1為2023年4月TIOBE編程語言排行榜部分語言排名。Python語言具有豐富和強(qiáng)大的類庫,能夠把用其他語言(如C/C++)編寫的各種模塊很輕松地聯(lián)結(jié)在一起,因此被昵稱為膠水語言。Python開發(fā)環(huán)境是純粹的自由軟件,源代碼和解釋器CPython均遵循GPL(GeneralPublicLicense)協(xié)議。Python語言崇尚優(yōu)雅、明確、簡單。在其命令行運(yùn)行環(huán)境中輸入“importthis”,就會呈現(xiàn)出TimPeters編寫的、被業(yè)界稱為“Python之禪”的編程格言,如圖1-2所示。這些格言逐漸成為Python程序開發(fā)者追求"MorePythonic(更具有Python風(fēng)格)”的指導(dǎo)思想。1.1Python語言概述02Python的安裝PARTTWO1.2Python的安裝?Pythoii的版本。Python2.x至2.7版后不再升級,3.x版與2.x版不完全兼容,大批用2.x版編寫的庫函數(shù)無法在3.x版下直接使用。2015年以后,絕大多數(shù)用Python編寫的庫函數(shù)都可以穩(wěn)定、高效地在3.x版下運(yùn)行。因此,除需要繼承2.x版才能穩(wěn)定運(yùn)行的特殊應(yīng)用外,均應(yīng)使用3.x版。Python開發(fā)環(huán)境是完全免費的自由軟件,下載前應(yīng)考慮如下問題:支持的操作系統(tǒng)。Python支持Windows.Linux、UNIX和macOS等不同的操作系統(tǒng),應(yīng)選擇對應(yīng)的安裝程序。?操作系統(tǒng)的字長。應(yīng)根據(jù)操作系統(tǒng)的字長(32位或64位)選擇對應(yīng)的安裝程序,以獲得最佳的運(yùn)行環(huán)境。目前,可通過其官網(wǎng)下載并安裝Python,也可以直接安裝Anaconda集成環(huán)境。1.2.1Python的官網(wǎng)下載和安裝最新版本的安裝程序可從Python官網(wǎng)免費下載,如圖1-3所示。圖1-3官網(wǎng)下載頁面在官網(wǎng)下載頁面中可選擇操作系統(tǒng)類型和字長,以及安裝包的形式。這里以Windows操作系統(tǒng)可執(zhí)行程序安裝為例:雙擊下載的python-3.x.x.exe文件(版本不同,文件名會有所不同),即可按向?qū)崾具M(jìn)行安裝。例如,Python3.7.3(64位)安裝向?qū)鐖D1-4所示。圖1-5向操作系統(tǒng)環(huán)境變量中添加Python安裝路徑1.2.1Python的官網(wǎng)下載和安裝添加Python安裝路徑也可通過設(shè)置操作系統(tǒng)環(huán)境變量實現(xiàn),步驟如下:打開控制面板主頁,單擊“高級系統(tǒng)設(shè)置”項,在“系統(tǒng)屬性"對話框中,單擊“高級”選項卡中的“環(huán)境變量”按鈕,在“環(huán)境變量”對話框的“系統(tǒng)變量”列表框中,選擇“Path”項,單擊“編輯”按鈕,在打開的對話框中添加安裝路徑(如圖1-5向操作系統(tǒng)環(huán)境變量中添加Python安裝路徑“C:\Python37”)和腳本工具安裝路徑(如“C:\Python37\Scripts”),如圖1-5所示。為使以后操作系統(tǒng)中任意路徑上的Python程序都能正確找到安裝路徑,可在安裝時勾選“AddPython3.7toPATH”前的復(fù)選框(見圖1_4的下部)。為方便今后對安裝路徑的操作,建議選擇“Customizeinstallation",將安裝路徑(Customizeinstalllocation)設(shè)置為"C:\Pyth(m37"。圖1-5向操作系統(tǒng)環(huán)境變量中添加Python安裝路徑X
以Pytho pts'i球阿
C:\Python37\
聲EJ:1.2.1Python的官網(wǎng)下載和安裝
Anaconda是一個Python科學(xué)計算集成開發(fā)環(huán)境的開源發(fā)行版本,可從其官網(wǎng)(見圖1-6)或其國內(nèi)鏡像網(wǎng)站免費下載安裝。
Anaconda在Windows操作系統(tǒng)中安裝成功后,可見圖>7所示的程序組。其中包括常用的第三方包管理工具AnacondaNavigator-,命令行窗口AnacondaPrompt、交互筆記JupyterNotebook,編程環(huán)境Spyder等。1.2.2Anaconda集成開發(fā)環(huán)境Datasciencetechnologyforabetterworld.Anacondaofferstheeasiestwaytoperrc^TnPythonjRdstssdericeandmachinelearningonasi.n^iemachine.Startworking供iinthousanGsofopen-sourcepackagesandlibrariestoday.
圖1~6Anaconda官網(wǎng)1.2.2Anaconda集成開發(fā)環(huán)境Anaconda不僅集成了Python開發(fā)環(huán)境,還包含mimpy、pandas、scipy、matplotlib、PIL>NLTK等200余個科學(xué)計算常用第三方包。1.2.2Anaconda集成開發(fā)環(huán)境03Python程序設(shè)計步驟PARTTHREE1.3Python程序設(shè)計步驟Python自帶的集成開發(fā)環(huán)境IDLE(IntegratedDevelopmentandLearningEnvironment)如圖1-8(a)所示,命令行運(yùn)行環(huán)境如圖1-8(b)所示。在IDLE中,使用“File”一"NewFile”菜單命令,可打開程序編輯器,該編輯器除文本編輯功能外,還包含關(guān)鍵字顏色區(qū)分、簡單的智能提示、自動縮進(jìn)等輔助編輯功能(見圖1-9)。1.3Python程序設(shè)計步驟Python(源)程序以.py為擴(kuò)展名。當(dāng)運(yùn)行.py程序時,系統(tǒng)會自動生成一個對應(yīng)的.pyc字節(jié)編譯文件,用于跨平臺運(yùn)行和提高運(yùn)行速度。另外,還有一種擴(kuò)展名為.pyo的文件,是編譯優(yōu)化后的字節(jié)編譯文件。Python使用縮進(jìn)來表示代碼塊層次,習(xí)慣上一層縮進(jìn)4個半角空格,同一個代碼塊中的語句必須包含相同的縮進(jìn)空格數(shù),不建議隨意變化縮進(jìn)空格數(shù)或使用Tab鍵。Python通常是一行寫完一條語句,但如果語句很長,可以使用反斜杠“\”來實現(xiàn)語句轉(zhuǎn)行。Python可以在同一行中放置多條語句,語句之間使用分號“;”分隔,但為易讀起見,不建議在同一行中放置多條語句。Python中單行注釋以開頭。在調(diào)試程序時,如果臨時需要不執(zhí)彳亍某些行,建議在不執(zhí)行的行前加%",可避免大量刪改操作。01020304051.3Python程序設(shè)計步驟04常用的Python第三方編輯器PARTFOUR1.4常用的Python第三方編輯器
Python程序與其他高級語言一樣,是純文本文件,可以用操作系統(tǒng)自帶的記事本打開和編輯(見圖1-10)。1記事本值得注意的是,記事本默認(rèn)保存為ANSI編碼的.txt文件(關(guān)于編碼,詳見第5章),可使用“另存為”命令,在彈出的“另存為”對話框中選擇保存類型為“所有文件(*.*)”,并手工添加文件擴(kuò)展名.py。在Python程序中,若包含中文等非英文字符,可選擇UTF-8編碼保存(見圖1-11)。1記事本1.4常用的Python第三方編輯器如果以ANSI編碼保存的Python程序中含有中文等非英文字符,在用IDLE打開時可能出現(xiàn)如圖卜12所示的編碼選擇對話框,讓用戶確認(rèn)以何種編碼讀取。可使用與ISO-8859-1完全兼容、幾乎可以表示世界上所有字符的字符編碼UTF-8,也可使用操作系統(tǒng)默認(rèn)的中文簡體擴(kuò)展字符集編碼cp936(GBK)。預(yù)先在Python程序最前面添加編碼注釋“#coding:GBK”、"#coding:UTF-8”或"_*_coding『it£8_*_”(表示編碼的字符串用大小寫字母均可)等,可以避免在運(yùn)行程序前彈出編碼選擇對話框。1.4常用的Python第三方編輯器Python程序員通常會選用第三方集成開發(fā)環(huán)境(IntegratedDevelopmentEnvironment,IDE)進(jìn)行程序設(shè)計。常用的集成開發(fā)環(huán)境有PyCharm、VSCode、Thonny、PyScripter^EclipsewithPyDev、Komodo>WingIDE等,它們通常具有一些自動代碼完成、參數(shù)提示、代碼錯誤檢査等功能。1.4常用的Python第三方編輯器如圖1-13所示的PyCharm是JetBrains公司出品的集成開發(fā)環(huán)境,分為專業(yè)版(Professional)和社區(qū)版(Community),可從其官網(wǎng)下載。專業(yè)版試用期內(nèi)免費,社區(qū)版完全免費并開源。2PyCharm1.4常用的Python第三方編輯器PyCharm是一套Python程序開發(fā)的高效率工具,除具有調(diào)試、語法高亮顯示、Project(項目)管理、代碼跳轉(zhuǎn)、代碼智能提示、代碼自動完成、單元測試、版本控制等一般功能外,還提供了支持Django等框架的專業(yè)Web開發(fā)等高級功能。尤其是快捷鍵映射設(shè)置,可兼容常見集成開發(fā)環(huán)境(如Eclipse、VisualStudioIntelliJIDEA等)的使用習(xí)慣(見圖1-14),讓使用其他語言的程序員盡快適應(yīng)其編程環(huán)境。1.4常用的Python第三方編輯器VSCode(VisualStudioCode)是微軟公司出品的輕量級代碼編輯器(見圖1-15),支持Windows、macOS和Linux操作系統(tǒng)。它有豐富的插件生態(tài)系統(tǒng),支持C卄、C#、Java、PHP、Python、VisualBasic>XML、R、Objective-C^JavaScript^JSON、HTML、CSS等語言和語法結(jié)構(gòu)。3VSCode編輯器界面沿用了微軟經(jīng)典的vs風(fēng)格,支持語法高亮顯示、代碼格式化、代碼智能提示、括號匹配等編輯功能,并可直接訪問Git托管平臺。通常建議在VSCode中用以文件夾方式打開和編輯項目,也可以編輯單個文件。1.4常用的Python第三方編輯器Thonny為面向初學(xué)者的免費Python集成開發(fā)環(huán)境,如圖1-16所示。它支持多種語言并適應(yīng)多種編碼,提供語法高亮顯示、代碼提示等功能。由于軟件容量很小,因此適用于樹莓派等物聯(lián)網(wǎng)軟件開發(fā)。4Thonny1.4常用的Python第三方編輯器如圖1-17所示為開源的Python集成開發(fā)環(huán)境PyScripter,可從GitHub網(wǎng)站免費下載。其具有語法高亮顯示、語法自動補(bǔ)全、語法檢查、斷點調(diào)試等功能,還可以編輯JavaScript、PHP、HTML、XML等類型的文件。5PyScripter1.4常用的Python第三方編輯器謝謝觀看第二章Python的基本語法Python程序設(shè)計基礎(chǔ)
熟悉Python的基本語法。理解數(shù)值類型的特點及其操作方法。初步掌握字符串?dāng)?shù)據(jù)類型。本章教學(xué)目標(biāo)逐步熟悉Python的基本運(yùn)算、表達(dá)式和優(yōu)先級。01Python程序的書寫格式與基本規(guī)則PARTONE2.1.1基本詞法單位標(biāo)識符用于標(biāo)識不同的詞法單位,通俗地講,就是變量、函數(shù)等對象的名稱。合法的標(biāo)識符必須遵守以下的構(gòu)成規(guī)則?!裼梢淮址M成,字符可以是任意字母、數(shù)字、下畫線、漢字,但這串字符的第一個字符不能是數(shù)字。●不能與關(guān)鍵字同名。關(guān)鍵字也稱為“保留字”,是被語言保留起來的、具有特殊含義的詞,不能再用于定義名稱。程序設(shè)計的基本詞法單位通常包括常量、變量、關(guān)鍵字、運(yùn)算符、表達(dá)式、函數(shù)、語句、類等。Python是面向?qū)ο蟮某绦蛟O(shè)計語言。對象就是把靜態(tài)特征(屬性)和動態(tài)行為(方法)封裝在一個結(jié)構(gòu)里的事物,Python中一切皆為對象?!纠?-1】查看Python的所有關(guān)鍵字。>>>importkeyword>>>keyword.kwlist['False','None','True','and','as','assert','break','class','continue','def','del','elif','else','except','finally','for','from','global','if','import','in','is','lambda','nonlocal','not','or','pass','raise','return','try','while','with','yield']標(biāo)識符中唯一能使用的標(biāo)點符號只有下畫線,不能含有其他標(biāo)點符號(包括空格、括號、引號、逗號、斜線、反斜線、冒號、句號、問號等)。例如,“x”“var1”“FirstName”“stu_score”“平均分2”等,都是合法的標(biāo)識符;但是,“stu-score”“FirstName”“2班平均分”都是不合法的標(biāo)識符。2.1.1基本詞法單位
Anaconda是一個Python科學(xué)計算集成開發(fā)環(huán)境的開源發(fā)行版本,可從其官網(wǎng)(見圖1-6)或其國內(nèi)鏡像網(wǎng)站免費下載安裝。
Anaconda在Windows操作系統(tǒng)中安裝成功后,可見圖>7所示的程序組。其中包括常用的第三方包管理工具AnacondaNavigator-,命令行窗口AnacondaPrompt、交互筆記JupyterNotebook,編程環(huán)境Spyder等。2.1.1基本詞法單位
Anaconda是一個Python科學(xué)計算集成開發(fā)環(huán)境的開源發(fā)行版本,可從其官網(wǎng)(見圖1-6)或其國內(nèi)鏡像網(wǎng)站免費下載安裝。
Anaconda在Windows操作系統(tǒng)中安裝成功后,可見圖7所示的程序組。其中包括常用的第三方包管理工具AnacondaNavigator-,命令行窗口AnacondaPrompt、交互筆記JupyterNotebook,編程環(huán)境Spyder等。2.1.1基本詞法單位
變量是指在運(yùn)行過程中值可以被修改的對象。變量的名稱除必須符合標(biāo)識符的構(gòu)成規(guī)則外,還要盡量遵循一些約定俗成的規(guī)范。2.1.1基本詞法單位除循環(huán)控制變量可以使用i或者x這樣的簡單名稱外,其他變量最好使用有意義的名稱,以提高程序的可讀性。例如,表示平均分的變量應(yīng)使用average_score或者vg_score,而不建議使用as或者pjf。直接用漢字命名變量也是可以的,例如:>>>甲=2.3>>>乙=3.2>>>甲+乙5.5但由于運(yùn)算表達(dá)式中的符號都必須是英文半角符號,要考慮輸入和切換的煩瑣,以及編程環(huán)境對漢字的兼容等因素,習(xí)慣上很少使用漢字命名。2.1.1基本詞法單位用英文名稱時,多個單詞之間為表示區(qū)隔可用下畫線連接。Python標(biāo)識符是嚴(yán)格區(qū)分大小字母的。也就是說,Score和score會被認(rèn)為是兩個不同的對象名稱。因此,變量名可使用大小寫字母混合的方式,多個單詞之間為表示區(qū)隔也可把每個單詞的首字母大寫。用于表示固定不變值的對象(常量)名稱一般用全大寫英文字母,例如,PI、MAX_SIZE。常量通常被賦予固定值和專用對象名稱。例如,PI=3.14可表示圓周率π。在一些庫中定義了專門表示固定值的對象,例如,math.pi表示數(shù)學(xué)庫中的圓周率,tkinter.END表示圖形界面庫中的文本末尾。因為以下畫線開頭的變量在Python中有特殊含義,所以,自定義名稱時,一般不用下畫線作為開頭字符。2.1.1基本詞法單位運(yùn)算符用于指定變量/常量之間進(jìn)行何種運(yùn)算,例如,賦值、算術(shù)、比較、邏輯等。表達(dá)式由變量/常量和運(yùn)算符構(gòu)成。一個表達(dá)式中可能包含多次多種運(yùn)算,與數(shù)學(xué)表達(dá)式在形式上很接近。例如,1+2,2*(x+y),O<=a<=10等。函數(shù)是相對獨立的功能單位,可以執(zhí)行一定的任務(wù)。其形式上類似于數(shù)學(xué)函數(shù),例如,math.sin(math.pi/2)??梢允褂肞ython內(nèi)核提供的各種內(nèi)置(built-in)函數(shù),也可以使用標(biāo)準(zhǔn)模塊(如數(shù)學(xué)庫math)中的函數(shù),以及自定義函數(shù)。2.1.1基本詞法單位語句由表達(dá)式、函數(shù)調(diào)用組成。例如,x=1,c=math.sqr(a*a+b*b),print('Helloworld")等。另外,各種控制結(jié)構(gòu)也屬于語句,例如,if語句、for語句。類是相似事物的抽象。例如,張三、李四等這幾個學(xué)生都有學(xué)號、姓名、專業(yè)等屬性,也都有選課、借閱圖書等方法,可以抽象出Student類,而這些學(xué)生個體都是Student類的對象。2.1.1基本詞法單位2.1.2程序的書寫格式與基本規(guī)則在《Google開源項目風(fēng)格指南》中,還列出了一些常見的書寫格式建議。雖然并不影響程序執(zhí)行結(jié)果,但良好的編程風(fēng)格會顯著提升程序的可讀性。Python程序的書寫格式有嚴(yán)格的要求,不按照格式書寫有可能導(dǎo)致程序不能正確運(yùn)行,例如,代碼縮進(jìn)必須按照代碼塊層次(級別)要求。
Python使用縮進(jìn)來區(qū)分代碼塊的級別。Python中沒有采用花括號或begin-end等來分隔代碼塊,而是使用冒號和代碼縮進(jìn)區(qū)分代碼塊的級別。代碼縮進(jìn)是Python重要的語法規(guī)則,錯誤的縮進(jìn)可能導(dǎo)致代碼的含義完全不同。例如:1縮進(jìn)2.1.2程序的書寫格式與基本規(guī)則執(zhí)行結(jié)果沒有任何輸出。因為print(x)位于if代碼塊內(nèi),和x=x+1是同一個級別的,所以都沒有被執(zhí)行。而下面這段的代碼,最后一行的縮進(jìn)不同:執(zhí)行結(jié)果會輸出0。因為print(x)位于if代碼塊外,和if語句是一個級別的,會被執(zhí)行。建議在代碼前輸入4個半角空格來表示代碼縮進(jìn),不推薦其他數(shù)量的空格或使用Tab鍵。部分Python編輯器(如IDLE、VSCode、PyScripter、PyCharm等)能根據(jù)所輸入的代碼層次關(guān)系自動縮進(jìn)代碼,提高編碼效率。2.1.2程序的書寫格式與基本規(guī)則
Python語言允許在行尾加分號,或用分號將兩條語句放在同一行中。
但編程風(fēng)格規(guī)范既不建議加分號,也不建議將多條語句放在同一行中。2分號2.1.2程序的書寫格式與基本規(guī)則對超長語句,允許但不提倡使用反斜杠連接行,建議在需要的地方使用圓括號來實現(xiàn)行連接。例如:3長語句行2.1.2程序的書寫格式與基本規(guī)則對超長語句,允許但不提倡使用反斜杠連接行,建議在需要的地方使用圓括號來實現(xiàn)行連接。例如:2.1.2程序的書寫格式與基本規(guī)則
不建議使用不必要的圓括號。除非用于實現(xiàn)行連接,否則不要在返回語句或條件語句中使用圓括號。例如:4圓括號2.1.2程序的書寫格式與基本規(guī)則頂級定義之間空兩行。變量定義、類定義及函數(shù)定義之間,可以空兩行。類內(nèi)部的方法定義之間,類定義與第一個方法之間,建議空一行。函數(shù)或方法中,如果有必要,可以空一行。5空行2.1.2程序的書寫格式與基本規(guī)則
頂級定義之間空兩行。變量定義、類定義及函數(shù)定義之間,可以空兩行。
類內(nèi)部的方法定義之間,類定義與第一個方法之間,建議空一行。
函數(shù)或方法中,如果有必要,可以空一行。6空格2.1.2程序的書寫格式與基本規(guī)則不建議在逗號、分號、冒號前面加空格,但建議在它們后面加空格(除了行尾)。例如:2.1.2程序的書寫格式與基本規(guī)則不建議在逗號、分號、冒號前面加空格,但建議在它們后面加空格(除了行尾)。例如:參數(shù)列表、索引或切片的左括號前不要加空格。例如:2.1.2程序的書寫格式與基本規(guī)則當(dāng)?shù)忍栍糜谥甘娟P(guān)鍵字參數(shù)或默認(rèn)參數(shù)值時,不建議在其兩邊加空格。例如::當(dāng)?shù)忍栍糜谥甘娟P(guān)鍵字參數(shù)或默認(rèn)參數(shù)值時,不建議在其兩邊加空格。例如:2.1.2程序的書寫格式與基本規(guī)則不建議用空格來垂直對齊多行間的標(biāo)記,因為這會成為維護(hù)的負(fù)擔(dān)(適用于“:”“#”“=”等)。例如:注:本書中為方便閱讀,注釋一般采用對齊方式,實際中不建議這樣做。2.1.2程序的書寫格式與基本規(guī)則7注釋注釋通常以“#”開始直到行尾結(jié)束。注釋通常以“#”開始直到行尾結(jié)束。行內(nèi)注釋是指和語句在同一行中的注釋。行內(nèi)注釋應(yīng)該以“#”和單個空格開始,并且應(yīng)該至少用兩個空格和前面的語句分開。行內(nèi)注釋是指和語句在同一行中的注釋。行內(nèi)注釋應(yīng)該以“#”和單個空格開始,并且應(yīng)該至少用兩個空格和前面的語句分開。2.1.2程序的書寫格式與基本規(guī)則8文檔字符串文檔字符串是Python獨特的注釋方式。文檔字符串是包、模塊、類或函數(shù)中的第一條語句。文檔字符串可以通過對象的__doc__成員被自動提取。在書寫文檔字符串時,應(yīng)在其前、后均使用三重雙引號"""或三重單引號""。一個規(guī)范的文檔字符串應(yīng)該首先是一行概述,接著是一行空行,最后是文檔字符串剩下的部分,并且應(yīng)該與文檔字符串第一行的第一個引號對齊。2.1.2程序的書寫格式與基本規(guī)則2.1.2程序的書寫格式與基本規(guī)則文檔字符串可以通過__doc__成員查看,也可以出現(xiàn)在help()函數(shù)的結(jié)果里:2.1.2程序的書寫格式與基本規(guī)則2.1.2程序的書寫格式與基本規(guī)則02Python的基本數(shù)據(jù)類型PARTTWO2.2Python的基本數(shù)據(jù)類型其中組合數(shù)據(jù)類型(字符串、列表、元組、字典等)詳見第4章。本節(jié)主要介紹數(shù)值類型,并初步介紹組合數(shù)據(jù)類型中的字符串類型。Python的數(shù)據(jù)類型包括數(shù)值類型和組合數(shù)據(jù)類型。2.2.1數(shù)值類型Python有4種數(shù)值類型:整數(shù)(int)、浮點數(shù)(float)、布爾值(bool)、復(fù)數(shù)(complex)類型。使用內(nèi)置函數(shù)type(object)可以返回objcct的數(shù)據(jù)類型。內(nèi)置函數(shù)isinstance(obj,class)可以用來測試對象obj是否為指定類型class的實例。例如:也可以使用函數(shù)isinstance()來判斷某個對象是否屬于某個類型。例如:2.2.1數(shù)值類型1整數(shù)整數(shù)類型也稱整型或int型。整數(shù)是不帶小數(shù)部分的數(shù)字,如100、0和-273。和其他大多數(shù)編程語言不同,Python中整數(shù)沒有長度限制,甚至可以書寫和計算有幾百位數(shù)字的大整數(shù)。例如:2.2.1數(shù)值類型Python中整數(shù)的書寫支持4種數(shù)制:十進(jìn)制、二進(jìn)制、八進(jìn)制和十六進(jìn)制。十進(jìn)制數(shù)直接用默認(rèn)方式書寫,而后三種則需要特殊的前綴,分別是0b、0o和0x,其中的字母也可以用大寫字母。在十六進(jìn)制數(shù)中,使用A~F這6個字母來代表十進(jìn)制數(shù)10~15,也可以用小寫字母a~f。例如:2.2.1數(shù)值類型2浮點數(shù)浮點數(shù)類型也稱浮點型或float型。浮點數(shù)是帶小數(shù)的數(shù)字,如4.、.5和-2.7315e2。其中4.相當(dāng)于4.0,.5相當(dāng)于0.5,-2.7315e2是科學(xué)記數(shù)法,相當(dāng)于-2.7315×102,即-273.15?!案↑c”(floating-point)是相對于“定點”(fixed-point)而言的,即小數(shù)點不再固定于某個位置,而是可以浮動的。在數(shù)據(jù)存儲長度有限的情況下,采用浮點表示方法,在數(shù)值變動范圍很大或者數(shù)值很接近0時,仍能保證一定長度的有效數(shù)字。與整數(shù)不同,浮點數(shù)存在上限和下限。計算結(jié)果超出其上限和下限的范圍會導(dǎo)致溢出錯誤。例如:2.2.1數(shù)值類型注意,浮點數(shù)只能以十進(jìn)制數(shù)形式書寫。需要說明的是,計算機(jī)不一定能夠精確表示程序中書寫或計算的實數(shù)。有兩個原因:因為存儲空間有限,計算機(jī)不能精確顯示無限小數(shù),會產(chǎn)生誤差。計算機(jī)內(nèi)部采用二進(jìn)制數(shù)表示,但是,不是所有的十進(jìn)制實數(shù)都可以用二進(jìn)制數(shù)精確表示。由于機(jī)內(nèi)表示浮點數(shù)的二進(jìn)制位數(shù)有限,計算結(jié)果最后多出的二進(jìn)制位會被截斷,產(chǎn)生的精度誤差稱為截斷誤差。2.2.1數(shù)值類型3布爾值布爾值就是邏輯值,只有兩種:True和False,分別代表“真”和“假”。Python3x中將True和False定義為關(guān)鍵字,但實質(zhì)上它們的值仍是1和0,并且可以與數(shù)值類型的值進(jìn)行算術(shù)運(yùn)算。布爾值類型也稱布爾型或bool型所有非0數(shù)字或非空對象的值均為True。例如:2.2.1數(shù)值類型數(shù)字0和所有空對象,即"、[]、()、set()、{}和None等均為False。例如:下面兩條語句比較左右兩個值是否相等:2.2.1數(shù)值類型4復(fù)數(shù)復(fù)數(shù)類型也稱complex型,是Python內(nèi)置的數(shù)據(jù)類型,使用1j表示-1的平方根。復(fù)數(shù)對象有兩個屬性,用于查看其實部(real)和虛部(imag)。例如:2.2.1數(shù)值類型2.2.2字符串類型字符串(string)類型屬于序列型組合數(shù)據(jù)類型。字符串是由字符組成的序列,例如,'Pythoniswonderful!'、'16300240001'、'張三'和"等,其中,"表示空字符串。字符串和數(shù)字一樣,都是不可變對象。所謂不可變,是指不能原地修改對象的內(nèi)容。例如:1字符串界定符點雙引號,如"","中國","It'smybook."。當(dāng)字符串中含有單引號時,最好使用雙引號作為界定符。
單引號,如",'1+1=2',Hesaid"howareyou?"'。當(dāng)字符串中含有雙引號時,最好使用單引號作為界定符。
三引號,可以是連續(xù)三個單引號,也可以是連續(xù)三個雙引號,如"'Hello"',"""您好"""。其常用于多行字符串,例如,之前介紹的文檔字符串。編程時三引號也可用于注釋多行語句。字符串界定符用來區(qū)分字符串和其他詞法單位,有以下三種形式。1232.2.2字符串類型2轉(zhuǎn)義符和原始字符串轉(zhuǎn)義符是一些特殊的字符。Python用反斜杠(\)來轉(zhuǎn)義字符,以便表示那些特殊字符,見表2-1。2.2.2字符串類型字符串(string)類型屬于序列型組合數(shù)據(jù)類型。字符串是由字符組成的序列,例如,'Pythoniswonderful!'、'16300240001'、'張三'和"等,其中,"表示空字符串。字符串和數(shù)字一樣,都是不可變對象。所謂不可變,是指不能原地修改對象的內(nèi)容。例如:2.2.2字符串類型以下是使用轉(zhuǎn)義符的幾個例子:若需要顯示包含轉(zhuǎn)義符的原始字符串,不讓轉(zhuǎn)義符生效,這就要用r或R來定義原始字符串。例如:在上例中,如果不使用原始字符串,就得多次使用轉(zhuǎn)義符W:2.2.2字符串類型3對字符串中字符的操作字符串中的字符是不能用賦值操作進(jìn)行改變的。Python中內(nèi)置了一些對字符串中字符進(jìn)行操作的方法,見表2-2。2.2.2字符串類型值得注意的是,執(zhí)行表2-2中的操作后,原字符串s并不發(fā)生變化。例如:2.2.2字符串類型4對字符串中字符的操作使用len()函數(shù)可以確定字符串中包含多少個字符,即字符串的長度。例如:2.2.2字符串類型5字符串連接
利用加法運(yùn)算符“+”可以讓兩個字符串首尾相連。例如:從第2條語句的輸出可以看出,IDLE的輸出自動加了一個“\”,以免引起歧義。第3條語句的輸出說明,“\”實際并不包含在連接結(jié)果里。用字符串對象的ajoin(b)方法可將字符串b中的字符用指定字符串a(chǎn)連接起來(在b的每個字符間插入a)。例如:2.2.2字符串類型6字符串重復(fù)利用乘法運(yùn)算符“*”可以讓一個字符串自身多次重復(fù)并拼接在一起。例如:2.2.2字符串類型7字符大小寫轉(zhuǎn)換利用乘法運(yùn)算符“*”可以讓一個字符串自身多次重復(fù)并拼接在一起。例如:2.2.2字符串類型03Python的基本運(yùn)算和表達(dá)式PARTTHREE2.3.1變量的操作1變量的賦值和存儲變量定義是通過對變量的第一次賦值來實現(xiàn)的,在Python中不需要變量定義語句。(1)變量定義變量必須定義之后才能訪問。Python中的變量比較靈活,同一個變量名稱可以先后被賦予不同類型的值,定義為不同的變量對象參與計算。在上面的例子中,x一開始是整型變量,之后又變成了浮點型變量。2.3.1變量的操作(2)變量刪除使用del命令可以刪除一個對象(包括變量、函數(shù)等),刪除之后就不能再訪問這個對象了,因為它已經(jīng)不存在了。當(dāng)然,也可以通過再次賦值重新定義該變量。變量是否存在取決于變量是否占據(jù)一定的內(nèi)存空間。當(dāng)定義變量時,操作系統(tǒng)將內(nèi)存空間分配給變量,該變量就存在了。當(dāng)使用del命令刪除變量后,操作系統(tǒng)釋放了變量的內(nèi)存空間,該變量也就不存在了。2.3.1變量的操作Python具有垃圾回收機(jī)制,當(dāng)一個對象的內(nèi)存空間不再使用(引用計數(shù)為0)后,這個內(nèi)存空間就會被自動釋放。所以Python不會像C語言那樣發(fā)生內(nèi)存泄漏,進(jìn)而導(dǎo)致內(nèi)存空間不足,甚至系統(tǒng)死機(jī)。Python的垃圾空間回收是由操作系統(tǒng)自動完成的,而del命令相當(dāng)于程序主動地進(jìn)行空間釋放,將其歸還給操作系統(tǒng)。Python中的變量實質(zhì)是引用,其邏輯如圖2-1所示。(3)變量引用2.3.1變量的操作(4)變量修改賦值Python中的變量可以通過賦值來修改變量的“值”,但并不是原地址修改。例如,變量x先被賦值為1,然后又被賦值為1.5,其邏輯如圖2-2所示。2.3.1變量的操作由圖2-2可見,并不是變量x的值由1變成了1.5,而是另外開辟了一個地址空間存儲1.5,并讓x指向它。變量的值并不是直接存儲在變量里,而是以“值”對象的形式存儲在內(nèi)存某地址中。我們可以說,變量指向那個“值”對象。因此,Python變量里存放的實際是“值”對象的位置信息(內(nèi)存地址)。這種通過地址間接訪問對象數(shù)據(jù)的方式,稱為引用。2.3.1變量的操作使用id()函數(shù)可以確切地知道變量引用的內(nèi)存地址,使用運(yùn)算符is可以判斷兩個變量是否引用同一個對象。例如:2.3.1變量的操作顯然,x和y都被賦值為相同的小整數(shù)或者短字符串時,兩個變量所引用的是同一個對象,這也被稱為“駐留機(jī)制”。這是Python為提高效率所做的優(yōu)化,節(jié)省了頻繁創(chuàng)建和銷毀對象的時間,也節(jié)省了存儲空間。但是,當(dāng)兩個變量賦值為相同的大整數(shù)或者長字符串時,默認(rèn)引用的是兩個不同的對象。例如:2.3.1變量的操作我們可以利用變量之間的賦值,來讓兩個變量引用相同的對象。例如:2.3.1變量的操作2變量類型的轉(zhuǎn)換Python是動態(tài)強(qiáng)類型語言。雖然書寫表達(dá)式時無須為對象聲明類型,但當(dāng)一個變量對象被賦值時,這個對象的類型就固定了,不能隱式轉(zhuǎn)換成另一種類型。當(dāng)運(yùn)算需要時,必須進(jìn)行顯式的變量類型轉(zhuǎn)換。例如,input()函數(shù)所獲得的輸入值總是字符串,但有時需要將其轉(zhuǎn)換為數(shù)值類型,方能進(jìn)行算術(shù)運(yùn)算。對于較為復(fù)雜的表達(dá)式,如果難以確定變量類型,可以用type()函數(shù)進(jìn)行測試。例如:2.3.1變量的操作變量的類型轉(zhuǎn)換并不是對變量原地進(jìn)行修改,而是產(chǎn)生一個新的預(yù)期類型的對象。通常轉(zhuǎn)換目標(biāo)類型的名稱就是類型轉(zhuǎn)換的內(nèi)置函數(shù)名稱。將其他類型數(shù)據(jù)轉(zhuǎn)換為浮點數(shù)。例如:(1)float()函數(shù)2.3.1變量的操作將其他類型數(shù)據(jù)轉(zhuǎn)換為字符串。例如:(2)str()函數(shù)從上述最后兩個例子我們可以看出,Python會盡可能轉(zhuǎn)換成字符串長度較短的形式,以節(jié)省空間。2.3.1變量的操作將其他類型數(shù)據(jù)轉(zhuǎn)換為整數(shù)。例如:(3)int()函數(shù)2.3.1變量的操作將浮點數(shù)圓整為整數(shù)。例如:(4)round()函數(shù)圓整計算總是“四舍”,但并不一定總是“五入”。因為總是逢五向上圓整會帶來計算概率的偏差,所以,Python采用的是“銀行家圓整”:將小數(shù)部分為.5的數(shù)字圓整為最接近的偶數(shù),即“四舍六入五留雙”。2.3.1變量的操作將其他類型數(shù)據(jù)轉(zhuǎn)換為布爾值。例如:(5)bool()函數(shù)可見,數(shù)值0和空字符串被轉(zhuǎn)換為布爾值False,非0值和非空字符串被轉(zhuǎn)換為布爾值True。2.3.1變量的操作進(jìn)行整數(shù)和字符之間的相互轉(zhuǎn)換:chr()將整數(shù)按ASCII碼轉(zhuǎn)換為對應(yīng)的字符;ord()是chr()的逆運(yùn)算,將字符轉(zhuǎn)換為對應(yīng)的ASCⅡ碼或Unicode值。例如:(6)chr()和ord()函數(shù)將字符串類型的算術(shù)表達(dá)式轉(zhuǎn)換為其執(zhí)行結(jié)果,返回表達(dá)式的值。例如:(7)eval()函數(shù)2.3.1變量的操作2.3.2
運(yùn)算符Python支持算術(shù)運(yùn)算符、賦值運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符等基本運(yùn)算符。按照運(yùn)算所需要的操作數(shù)數(shù)目,可以分為單目、雙目、三目運(yùn)算符。單目運(yùn)算符只需要一個操作數(shù)。例如,單目減(-)、邏輯非(not)。雙目運(yùn)算符需要兩個操作數(shù)。Python中的大多數(shù)運(yùn)算符是雙目運(yùn)算符。三目運(yùn)算符需要三個操作數(shù)。條件運(yùn)算是三目運(yùn)算符,例如,bifaelsec。運(yùn)算符具有不同的優(yōu)先級。我們熟知的“先乘除后加減”就是優(yōu)先級的體現(xiàn)。只不過,Python運(yùn)算符種類很多,優(yōu)先級也分成了高低不同的很多層次。當(dāng)一個表達(dá)式中有多個運(yùn)算符時,將按優(yōu)先級從高到低依次運(yùn)算。運(yùn)算符還具有不同的結(jié)合性:左結(jié)合或右結(jié)合。當(dāng)一個表達(dá)式中有多個運(yùn)算符,且優(yōu)先級都相同時,將根據(jù)結(jié)合性來判斷運(yùn)算的先后順序。左結(jié)合就是自左至右依次運(yùn)算。Python運(yùn)算符大多是左結(jié)合的。右結(jié)合就是自右至左依次運(yùn)算。所有的單目運(yùn)算符和圓括號()都是右結(jié)合的。實際上,圓括號是自右向左依次運(yùn)算的,即內(nèi)層的圓括號更優(yōu)先,從內(nèi)向外運(yùn)算。以上所說的通過優(yōu)先級、結(jié)合性來決定運(yùn)算順序,只在沒有圓括號的情況下成立。使用圓括號可以改變運(yùn)算符的運(yùn)算順序。2.3.1變量的操作2.3.3算術(shù)運(yùn)算Python的算術(shù)運(yùn)算符見表2-3。算術(shù)運(yùn)算符的優(yōu)先級,按照從低到高的順序(同一行的優(yōu)先級相同)排列如下:再看幾個例子:2.3.3算術(shù)運(yùn)算以上的例子都是相同類型數(shù)據(jù)之間的運(yùn)算。如果是不同類型數(shù)據(jù)之間的運(yùn)算,會發(fā)生隱式類型轉(zhuǎn)換。轉(zhuǎn)換規(guī)則是:低類型向高類型轉(zhuǎn)換。可以進(jìn)行算術(shù)運(yùn)算的各種數(shù)據(jù)類型,從低到高排列為:bool型<int型<float型<complex型。例如:2.3.3算術(shù)運(yùn)算常用的Python數(shù)學(xué)運(yùn)算類的內(nèi)置函數(shù)見表2-4。2.3.3算術(shù)運(yùn)算math模塊中的函數(shù)見表2-5。2.3.3算術(shù)運(yùn)算math模塊中還包含了兩個數(shù)學(xué)運(yùn)算中的常量。math.pi:數(shù)學(xué)常量π,math.pi=3.141592653589793。math.e:數(shù)學(xué)常量e,math.e=2.718281828459045。使用math模塊前要先導(dǎo)入,使用函數(shù)時要在函數(shù)名前面加上“math.”。例如:2.3.3算術(shù)運(yùn)算如果要頻繁使用某單一模塊中的函數(shù),為避免每次寫模塊名的麻煩,也可以按下面的方式導(dǎo)入:這樣,就可以像內(nèi)置函數(shù)那樣來使用模塊函數(shù)了。但是多個模塊中可能有同名函數(shù),如果都按這種方式導(dǎo)入,則會產(chǎn)生名字沖突的問題。2.3.3算術(shù)運(yùn)算2.3.4輸入與輸出語句Python程序一般并不會被編譯成二進(jìn)制可執(zhí)行程序脫離Python環(huán)境獨立運(yùn)行,而是以解釋方式運(yùn)行。通常Python程序以純文本形式保存為帶.py擴(kuò)展名的程序文件,每次運(yùn)行程序時都需要由Python解釋器對程序文件進(jìn)行解釋并執(zhí)行。計算機(jī)程序通常通過輸入語句、輸出語句作為程序的入口和出口。1輸入語句輸入語句用于在程序運(yùn)行時從輸入設(shè)備獲得數(shù)據(jù)。標(biāo)準(zhǔn)輸入設(shè)備就是鍵盤。通過input()函數(shù)可以獲取鍵盤輸入數(shù)據(jù)。一般格式如下:input()函數(shù)首先輸出提示字符串,然后等待用戶鍵盤輸入,直到用戶按回車鍵結(jié)束,函數(shù)最后返回用戶輸入的字符串(不包括最后的回車符),系統(tǒng)繼續(xù)執(zhí)行input()函數(shù)后面的語句。例如:2.3.4輸入與輸出語句系統(tǒng)會彈出字符串“請輸入您的專業(yè):”,等待用戶輸入,用戶輸入內(nèi)容并按回車鍵后,相應(yīng)的輸入內(nèi)容將被保存到變量name中。如果需要將輸入的字符串轉(zhuǎn)換為其他類型(如整型、浮點型等),調(diào)用對應(yīng)的轉(zhuǎn)換函數(shù)即可。2.3.4輸入與輸出語句2輸出語句輸出語句用于將程序的運(yùn)行結(jié)果顯示在輸出設(shè)備上,供用戶查看。標(biāo)準(zhǔn)輸出設(shè)備就是顯示器屏幕。一般格式如下:通過print()函數(shù)可以將多個輸出值轉(zhuǎn)換為字符串并且輸出,這些值之間以sep分隔,最后以end結(jié)束。sep默認(rèn)值為空格符,end默認(rèn)值為換行符。2.3.4輸入與輸出語句【例2-4】輸出語句示例。上述兩行輸出是兩個print()函數(shù)執(zhí)行的結(jié)果。本例代碼第3條語句中的x并沒有任何輸出。這說明,只有在命令提示符>>>后面檢查某個變量或表達(dá)式的值時,才能看到輸出顯示。而如果在.py程序運(yùn)行的模式下,必須使用print()函數(shù)才會有輸出顯示。2.3.4輸入與輸出語句第1行輸出結(jié)果'abc123',是由本例代碼第1條語句print(abc',123)輸出的??梢钥闯?,兩個輸出項之間自動添加了空格,這是因為print()函數(shù)的參數(shù)sep默認(rèn)值為空格符。如果希望輸出項之間是逗號,則可以把本例代碼第1條語句改為:2.3.4輸入與輸出語句本例代碼第4條語句print(x)的輸出結(jié)果是另起一行輸出1.5。這是因為print()函數(shù)的參數(shù)end默認(rèn)值為換行符('n'),所以在第1行輸出之后自動添加了一個換行符。如果不需要換行,可以將下一個print()函數(shù)的輸出字符串直接連在其后,也可使用end-"。如果希望不換行而是加一個逗號,則可以把第1條語句改為:修改程序后的輸出結(jié)果如下:2.3.4輸入與輸出語句2.3.5賦值、關(guān)系和邏輯運(yùn)算1賦值運(yùn)算符賦值運(yùn)算符用“=”表示,一般形式如下:其左邊只能是變量,而不能是常量或表達(dá)式。例如,5=x或5=2+3都是錯誤的。注意,Python中的賦值運(yùn)算是沒有返回值的。也就是說,賦值操作不顯示運(yùn)算結(jié)果,只有效果——變量的值被改變了。例如:注意,程序中的y=x不是數(shù)學(xué)中的等式,不代表y恒等于x,不符合數(shù)學(xué)的交換律。賦值只是一個瞬間動作。除基本賦值外,賦值還包括序列賦值、多目標(biāo)賦值和復(fù)合賦值等(詳見2.3.7節(jié))。2.3.5賦值、關(guān)系和邏輯運(yùn)算2關(guān)系運(yùn)算符關(guān)系運(yùn)算符也稱為比較運(yùn)算符,可以對數(shù)值類型或字符串類型的數(shù)據(jù)進(jìn)行大小比較,返回一個布爾值(True或False),見表2-6。所有關(guān)系運(yùn)算符的優(yōu)先級相同。2.3.5賦值、關(guān)系和邏輯運(yùn)算特別要注意的是,關(guān)系運(yùn)算符中“等于”使用的是雙等號“=-”,而不是“=”,這是初學(xué)者常犯的錯誤。在比較過程中,應(yīng)遵循以下規(guī)則。①若兩個操作數(shù)是數(shù)值類型的,則按大小進(jìn)行比較。2.3.5賦值、關(guān)系和邏輯運(yùn)算②若兩個操作數(shù)是字符串類型的,則按“字典順序”進(jìn)行比較:首先取兩個字符串的第1個字符進(jìn)行比較,較大的字符所在的字符串更大;如果相同,則再取兩個字符串的第2個字符進(jìn)行比較,其余類推。結(jié)果有三種情況:第一種,某次比較分出勝負(fù),較大的字符所在字符串更大;第二種,始終不分勝負(fù),并且兩個字符串同時取完所有字符,那么這兩個字符串相等;第三種,在分出勝負(fù)前,一個字符串已經(jīng)取完所有字符,那么這個較短的字符串較小。第三種情況也可以認(rèn)為是空字符和其他字符的比較,空字符總是最小的。2.3.5賦值、關(guān)系和邏輯運(yùn)算常用字符的大小關(guān)系為:空字符<空格符<0~9'<'A'~Z<'a'~z'<漢字。比較浮點數(shù)是否相等時要注意的是,因為有精度誤差,可能產(chǎn)生本應(yīng)相等但比較結(jié)果卻不相等的情況。例如:我們可以用兩個浮點數(shù)的差距小于一個極小值來判定是否“應(yīng)該相等”,這個“極小值”可以根據(jù)需要自行指定。例如:2.3.5賦值、關(guān)系和邏輯運(yùn)算3邏輯運(yùn)算符邏輯運(yùn)算符的優(yōu)先級按照從低到高的順序排列為:or<and<not。2.3.5賦值、關(guān)系和邏輯運(yùn)算復(fù)數(shù)不能比較大小,只能比較是否相等。Python允許x<y<z這樣的鏈?zhǔn)奖容^,它相當(dāng)于x<yandy<z。甚至可以用x<y>z(此式并非鏈?zhǔn)奖容^,但允許),相當(dāng)于x<yandy>z。例如:2.3.5賦值、關(guān)系和邏輯運(yùn)算or是一個短路運(yùn)算符,如果左操作數(shù)為True,則跳過右操作數(shù)的計算,直接得出結(jié)果為True。只有在左操作數(shù)為False時,才會計算右操作數(shù)的值。and也是一個短路運(yùn)算符,如果左操作數(shù)為False,則跳過右操作數(shù)的計算,直接得出結(jié)果為False。只有在左操作數(shù)為True時,才會計算右操作數(shù)的值。短路運(yùn)算可以節(jié)省不必要的計算時間,而且Python會按照“最貪婪”的方式進(jìn)行短路,以至于看上去跨越了優(yōu)先級次序。例如:2.3.5賦值、關(guān)系和邏輯運(yùn)算在這個例子中,b==2andc==3全部被短路了,并不會因為優(yōu)先級高而先計算and。證明方法是,把上面的例子改寫成下面的形式:equal()函數(shù)并沒有被執(zhí)行,說明equal(b,2)andequal(c,3)全都被短路了。2.3.5賦值、關(guān)系和邏輯運(yùn)算2.3.6表達(dá)式表達(dá)式由運(yùn)算符和參與運(yùn)算的數(shù)(操作數(shù))組成。操作數(shù)可以是常量、變量,也可以是函數(shù)的返回值。按照運(yùn)算符的種類,表達(dá)式可以分成算術(shù)表達(dá)式、關(guān)系表達(dá)式、邏輯表達(dá)式、測試表達(dá)式等。多種運(yùn)算符混合運(yùn)算形成復(fù)合表達(dá)式,按照運(yùn)算符的優(yōu)先級和結(jié)合性依次進(jìn)行運(yùn)算。當(dāng)存在圓括號時,運(yùn)算順序會發(fā)生變化。很多運(yùn)算對操作數(shù)的類型有要求,例如,加法(+)要求兩個操作數(shù)類型一致,當(dāng)操作數(shù)類型不一致時,可能發(fā)生隱式類型轉(zhuǎn)換。例如:差別較大的數(shù)據(jù)類型之間可能不會發(fā)生隱式類型轉(zhuǎn)換,需要進(jìn)行顯式類型轉(zhuǎn)換。例如:2.3.6表達(dá)式常見運(yùn)算符的優(yōu)先級,按照從低到高的順序排列(同一行優(yōu)先級相同)如下:2.3.6表達(dá)式
關(guān)系、邏輯和測試運(yùn)算的結(jié)果一定是邏輯值。整型操作數(shù)進(jìn)行算術(shù)運(yùn)算的結(jié)果大多還是整型的。浮點除法(/)的結(jié)果是浮點型的。冪運(yùn)算的結(jié)果可能是整型的也可能是浮點型的,例如,5**-2返回0.04。
字符串進(jìn)行連接(+)和重復(fù)(*)的結(jié)果還是字符串。
浮點型操作數(shù)進(jìn)行算術(shù)運(yùn)算的結(jié)果還是浮點型的。表達(dá)式結(jié)果類型由操作數(shù)和運(yùn)算符共同決定。2.3.6表達(dá)式1單變量賦值使用賦值號(=)將右邊的值(表達(dá)式)賦給左邊變量的語句稱為賦值語句。例如:上述4條賦值語句分別實現(xiàn):為變量name賦值一個字符串,為變量age賦值一個整數(shù),為變量score賦值一個浮點數(shù),為變量value賦值一個復(fù)數(shù)。2.3.6表達(dá)式2序列賦值序列賦值可以為多個變量分別賦予不同的值,變量之間用英文逗號隔開。實際上,這是利用元組和序列解包(sequenceunpacking)實現(xiàn)的。2.3.6表達(dá)式上述語句的功能是將5個字符依次賦值給5個變量,first的值為"h",second的值為"e",其余類推。上述語句的功能是分別將右側(cè)的4個值賦值給左邊的4個變量,name的值為"李四",age的值為20,其余類推。Python可以通過序列賦值語句實現(xiàn)兩個變量值的交換。例如:執(zhí)行以上兩條語句之后,math與english的值發(fā)生了互換,math的值為75,english的值為80。2.3.6表達(dá)式3多目標(biāo)賦值多目標(biāo)賦值就是將同一個值賦值給多個變量。例如:執(zhí)行以后,first、second、third三個變量的值均為"welcome"。多目標(biāo)賦值通常只用于賦予數(shù)值或字符串這種不可變類型,如果欲賦予可變類型(如列表類型,見第4章),則可能會出現(xiàn)問題。2.3.6表達(dá)式4復(fù)合賦值復(fù)合賦值是運(yùn)算操作與賦值操作的組合。復(fù)合賦值語句是用復(fù)合運(yùn)算符(包括算術(shù)復(fù)合運(yùn)算符和位復(fù)合運(yùn)算符)的賦值語句。復(fù)合賦值運(yùn)算符的優(yōu)先級與賦值運(yùn)算符的一樣。其中,+=(加等于),-=(減等于),*=(乘等于),/=(除等于),%=(取余等于),**=(冪等于),//=(整除等于)為算術(shù)復(fù)合賦值運(yùn)算符(見表2-8)。例如:2.3.6表達(dá)式而<<=(左移等于),>>=(右移等于),&=(與等于),=(或等于),^=(異或等于)等運(yùn)算符為位復(fù)合賦值運(yùn)算符。例如:2.3.6表達(dá)式謝謝觀看第三章Python程序的基本流程控制Python程序設(shè)計基礎(chǔ)了解計算思維和程序設(shè)計基本方法。理解并掌握程序設(shè)計的三種基本結(jié)構(gòu)。熟練運(yùn)用三種基本結(jié)構(gòu)解決各種順序、選擇及重復(fù)執(zhí)行的問題。本章教學(xué)目標(biāo)初步掌握程序的調(diào)試方法。第三章
Python程序的基本流程控制第2章介紹了Python的基本語法,本章將學(xué)習(xí)程序設(shè)計的三種基本結(jié)構(gòu):順序結(jié)構(gòu)、分支結(jié)構(gòu)及循環(huán)結(jié)構(gòu),并嘗試采用這三種基本結(jié)構(gòu)來設(shè)計程序以解決問題。01計算思維和程序設(shè)計基本方法PARTONE3.1.1計算思維計算思維主要通過抽象、轉(zhuǎn)化、仿真、迭代等方法,把一個復(fù)雜困難的現(xiàn)實問題轉(zhuǎn)化為一個人類知道的、可以利用計算機(jī)自動解決的問題。與具備傳統(tǒng)的“閱讀、寫作、算術(shù)”能力一樣,計算思維能力是信息時代每個人應(yīng)該擁有的基本思維能力。計算思維(ComputationalThinking,CT)的概念由美國科學(xué)家周以真(JeannetteM.Wing)教授于2006年在計算機(jī)權(quán)威期刊CommunicationsoftheACM中提出:計算思維是運(yùn)用計算機(jī)科學(xué)的基礎(chǔ)概念進(jìn)行問題求解、系統(tǒng)設(shè)計,以及人類行為理解等涵蓋計算機(jī)科學(xué)之廣度的一系列思維活動。人類的科學(xué)思維主要包括實證思維、邏輯思維和計算思維。其中,實證思維以觀察和歸納為特征,以物理學(xué)科為代表;邏輯思維以推演和演繹為特征,以數(shù)學(xué)學(xué)科為代表;計算思維以有限性、確定性和機(jī)械性為特征,以計算學(xué)科為代表。值得注意的是,計算思維是人的思想和方法,而不是計算機(jī)的思維方式。計算思維與邏輯思維的區(qū)別在于,計算思維的語義必須是確定性的,不能出現(xiàn)二義性;計算思維的結(jié)論必須是有限的,在計算機(jī)中不允許出現(xiàn)數(shù)學(xué)中趨于無窮性的解;計算思維的執(zhí)行方式必須是機(jī)械的,可以通過具體步驟來實現(xiàn)。3.1.1計算思維計算思維的影響已經(jīng)滲透到物理學(xué)、化學(xué)、生物學(xué)、醫(yī)學(xué)等各類不同學(xué)科,其中Python以其語法簡潔、類庫豐富等優(yōu)點,成為計算思維在各學(xué)科中應(yīng)用的一種有效工具。計算思維的本質(zhì)是抽象和自動化,即在充分理解計算過程能力和限制的基礎(chǔ)上,將生活和工作中的復(fù)雜問題選擇合適的方式進(jìn)行分解和化簡(抽象),轉(zhuǎn)化為計算機(jī)所能處理的簡單問題,并通過編寫或調(diào)用程序自動解決該問題(自動化)。邏輯思維注重演繹,往往可以從原理上推演結(jié)果;而計算思維則更注重自動化實現(xiàn),往往基于機(jī)械累加等簡單重復(fù)步驟實現(xiàn)復(fù)雜的計算(可從例3-15中體會到)。3.1.1計算思維3.1.2程序設(shè)計基本方法眾所周知,現(xiàn)代計算機(jī)的基本結(jié)構(gòu)為馮·諾依曼結(jié)構(gòu),它包括五大部分:輸入設(shè)備、運(yùn)算器、控制器、存儲器及輸出設(shè)備。程序設(shè)計遵循的基本模式為IPO(Input,Process,Output),即程序通過輸入設(shè)備輸入計算機(jī)中,經(jīng)過運(yùn)算器、控制器及存儲器的相互合作完成各類算法處理工作,最后通過輸出設(shè)備輸出運(yùn)算結(jié)果。其中,輸入方式包括交互界面輸入、文件輸入、網(wǎng)絡(luò)輸入等,輸出方式包括屏幕輸出、文件輸出、網(wǎng)絡(luò)輸出等。程序設(shè)計方法主要包括面向過程的結(jié)構(gòu)化設(shè)計方法、面向?qū)ο蟮某绦蛟O(shè)計方法等。其中,結(jié)構(gòu)化設(shè)計方法是程序設(shè)計的基本方法,它包含三種基本結(jié)構(gòu):順序結(jié)構(gòu)、分支結(jié)構(gòu)及循環(huán)結(jié)構(gòu)。順序結(jié)構(gòu)指程序按照語句順序逐條執(zhí)行,分支結(jié)構(gòu)指程序根據(jù)不同的條件執(zhí)行不同的分支語句,循環(huán)結(jié)構(gòu)指程序根據(jù)特定的條件重復(fù)執(zhí)行部分語句。這三種結(jié)構(gòu)都具備只有一個入口和一個出口的共同特點,從而使得程序結(jié)構(gòu)層次清晰、簡單易懂。3.1.2程序設(shè)計基本方法在設(shè)計一個程序解決較為復(fù)雜的問題時,通常采取自上而下的設(shè)計方法,先做頂層設(shè)計,然后將復(fù)雜問題進(jìn)行分解,轉(zhuǎn)化為若干個可獨立解決的簡單的子問題,“分而治之”。每個子問題均可使用順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)或它們的組合進(jìn)行描述,即基于三種基本結(jié)構(gòu)、借助于某種編程語言實現(xiàn)簡單問題的代碼編寫和自動執(zhí)行,從而得到簡單子問題的解。采用自上而下的程序設(shè)計過程,可以暫不關(guān)心過程實現(xiàn)的細(xì)節(jié),可以看作對功能算法的抽象。3.1.2程序設(shè)計基本方法而在程序編寫完成后,執(zhí)行程序所關(guān)心的是過程自動化實現(xiàn)的細(xì)節(jié)。對程序的測試通常采用自下而上的執(zhí)行方法,從測試運(yùn)行每個包含基本結(jié)構(gòu)的細(xì)節(jié)實現(xiàn)模塊開始,逐步上升到執(zhí)行整個程序。3.1.2程序設(shè)計基本方法02順序結(jié)構(gòu)PARTTWO3.2順序結(jié)構(gòu)程序工作的一般流程:數(shù)據(jù)輸入、運(yùn)算處理、結(jié)果輸出。順序結(jié)構(gòu)是指為了解決某些實際問題,自上而下地依次執(zhí)行各條語句,其流程圖如圖3-1所示。下面通過幾個例子學(xué)習(xí)如何使用順序結(jié)構(gòu)解決各種常見問題?!纠?-1】編寫程序,從鍵盤輸入語文、數(shù)學(xué)、英語三門功課的成績,計算并輸出平均成績,要求平均成績保留1位小數(shù)。程序的執(zhí)行流程:輸入三門功課的成績,計算平均成績,輸出平均成績。輸入時,使用轉(zhuǎn)換函數(shù)將字符串轉(zhuǎn)換為浮點數(shù);輸出時,采用格式輸出方式控制小數(shù)點的位數(shù)。代碼如下:3.2順序結(jié)構(gòu)【例3-2】編寫程序,從鍵盤輸入圓的半徑,計算并輸出圓的周長和面積。在計算圓的周長和面積時需要使用π的值,Python的math模塊中包含常量pi,通過導(dǎo)入math模塊可以直接使用該值,然后使用周長和面積公式進(jìn)行計算即可。代碼如下:3.2順序結(jié)構(gòu)3.2順序結(jié)構(gòu)【例3-3】編寫程序,從鍵盤輸入年份,輸出當(dāng)年的年歷。Python的內(nèi)置日歷模塊calendar有下列常用函數(shù)。●calendar.weekday(year,month,day):獲取指定日期為星期代碼整數(shù),0為星期一,1為星期二,其余類推?!馽alendar.monthcalendar(year,month):返回year年month月中以日期為一維元素列表,以每周日期列表為元素的二維列表。●calendar.month(year,month):以多行文本字符串格式返回year年month月的日歷?!馽alendar.calendar(year):以多行字符串形式返回year年的日歷。導(dǎo)入calendar模塊,然后調(diào)用該模塊中的函數(shù)calendar(year)即可得到該年的日歷。代碼如下:3.2順序結(jié)構(gòu)03分支結(jié)構(gòu)PARTTHREE3.3分支結(jié)構(gòu)分支結(jié)構(gòu)可以分為單分支結(jié)構(gòu)和多分支結(jié)構(gòu),用于解決生活中形形色色的選擇問題。在Python中,這兩種結(jié)構(gòu)分別用if語句和if-elif-else語句描述。3.3.1分支結(jié)構(gòu)if語句為單分支結(jié)構(gòu),僅處理條件成立的情況,其流程圖如圖3-2所示。從圖中可以看出,當(dāng)表達(dá)式的值為真時,執(zhí)行相應(yīng)的語句塊(一條或多條語句);當(dāng)表達(dá)式的值為假時,直接跳出if語句,執(zhí)行其后面的語句。書寫格式:關(guān)鍵字if與表達(dá)式之間用空格隔開,表達(dá)式后接英文冒號;語句塊中的全部語句均縮進(jìn)4個空格,如圖3-3所示。3.3.2if-elif-else語句if-elif-else語句為多分支結(jié)構(gòu),主要用于處理有多個條件的情況,從而解決現(xiàn)實生活中復(fù)雜的多重選擇問題,其流程圖如圖3-4所示。如果表達(dá)式1的值為真,則執(zhí)行相應(yīng)的語句塊A;如果表達(dá)式1的值為假,則繼續(xù)判斷表達(dá)式2的值,如果表達(dá)式2的值為真,則執(zhí)行語句塊B;如果表達(dá)式2的值也為假,則繼續(xù)判斷表達(dá)式3的值,其余類推,直到所有的表達(dá)式都不滿足(表達(dá)式的個數(shù)為1個或多個)為止,然后執(zhí)行else后面的語句塊。書寫格式:關(guān)鍵字if與表達(dá)式1之間用空格隔開,表達(dá)式1后接英文冒號;所有關(guān)鍵字elif均與關(guān)鍵字if左對齊,elif與其后的表達(dá)式之間用空格隔開,表達(dá)式后接英文冒號;關(guān)鍵字else與關(guān)鍵字if左對齊,后接英文冒號;所有語句塊左對齊,即所有語句塊中的全部語句均縮進(jìn)4個空格,如圖3-5所示。3.3.2if-elif-else語句如果只考慮一種表達(dá)式成立或不成立的結(jié)果(沒有elif分支),則多分支的if結(jié)構(gòu)轉(zhuǎn)化為雙分支的if結(jié)構(gòu)。3.3.2if-elif-else語句在使用分支結(jié)構(gòu)時,需要注意以下事項:①
表達(dá)式可以是任意類型,如5>3、x==y、xandy>z、3、0等。其中,3表示恒真(True),而0表示恒假(False)。②
可以僅有if子句,構(gòu)成單分支結(jié)構(gòu),但是else子句必須與if子句配對,不能出現(xiàn)僅有else子句沒有if子句的情況。③
各語句塊可以包含一條或多條語句。如果是多條語句,則所有語句必須左對齊。3.3.2if-elif-else語句【例3-4】編寫程序,從鍵盤輸入一個整數(shù),判斷該數(shù)是否為偶數(shù)判斷一個整數(shù)是否為偶數(shù)的方法是用該數(shù)對2取余數(shù)。如果結(jié)果等于0,則該數(shù)為偶數(shù)。代碼如下:3.3.2if-elif-else語句【例3-5】編寫程序,從鍵盤輸入三條邊,判斷是否能夠構(gòu)成一個三角形。如果能,則提示可以構(gòu)成三角形;如果不能,則提示不能構(gòu)成三角形。組成三角形的條件是任意兩邊之和大于第三邊。如果條件成立,則能構(gòu)成三角形。當(dāng)表達(dá)式中的多個條件必須全部成立時,條件之間使用and運(yùn)算符連接起來。代碼如下:3.3.2if-elif-else語句【例3-6】編寫程序,調(diào)用隨機(jī)函數(shù)生成一個1~100之間的隨機(jī)整數(shù),從鍵盤輸入數(shù)字進(jìn)行猜謎,給出猜測結(jié)果(太大、太小、成功)的提示。Python的內(nèi)置隨機(jī)數(shù)模塊random有下列常用函數(shù)。random.random():生成一個半開區(qū)間(0.0,1.0)內(nèi)的浮點數(shù)。random.randint(start,stop):生成一個閉區(qū)間[start,stop]內(nèi)的整數(shù)。3.3.2if-elif-else語句random.randrange(start,stop[,step]):隨機(jī)返回range(start,stop[stepl)中的整數(shù)。random.choice(seq):隨機(jī)從序列seq(字符串、元組、列表)中挑選并返回一個元素。random,shuffle(lst):將列表lst中的序列隨機(jī)重排(不能作用于字符串和元組)。3.3.2if-elif-else語句此例中引入random模塊,調(diào)用其中的函數(shù)randint(a,b)產(chǎn)生介于a和b之間的隨機(jī)整數(shù)(產(chǎn)生的隨機(jī)數(shù)大于或等于a且小于或等于b),然后從鍵盤輸入一個數(shù)與該隨機(jī)數(shù)進(jìn)行比較,并輸出判斷結(jié)果。代碼如下:3.3.2if-elif-else語句3.3.3分支語句嵌套當(dāng)有多個條件需要滿足并且條件之間有遞進(jìn)關(guān)系時,可以使用嵌套的分支語句。其中,if語句、elif語句以及else語句中都可以嵌套if語句或者if-elif-else語句。書寫格式:嵌套的if語句要求以鋸齒形縮進(jìn)格式書寫,從而分清層次關(guān)系。例如,婚姻法規(guī)定,男性22歲為合法結(jié)婚年齡,女性20歲為合法結(jié)婚年齡。因此如果要判斷一個人是否到了合法結(jié)婚年齡,首先需要使用雙分支結(jié)構(gòu)判斷性別,再用遞進(jìn)的雙分支結(jié)構(gòu)判斷年齡,并輸出判斷結(jié)果。代碼如下:3.3.3分支語句嵌套【例3-7】編寫程序,從鍵盤輸入用戶名和密碼,要求先判斷用戶名再判斷密碼。如果用戶名不正確,則直接提示用戶名有誤;如果用戶名正確,則進(jìn)一步判斷密碼,并給出判斷結(jié)果的提示。因為要求先判斷用戶名再判斷密碼,所以本程序的一種做法是使用嵌套的if語句:外層if語句用于判斷用戶名,如果用戶名正確則進(jìn)入內(nèi)層if語句,判斷密碼并給出判斷結(jié)果;如果用戶名不正確,則直接給出錯誤提示。代碼如下:3.3.3分支語句嵌套【例3-8】編寫程序,開發(fā)一個小型計算器,從鍵盤輸入兩個數(shù)字和一個運(yùn)算符,根據(jù)運(yùn)算符(+、一、*和/)進(jìn)行相應(yīng)的數(shù)學(xué)運(yùn)算。如果不是這4種運(yùn)算符,則給出錯誤提示。因為需要根據(jù)4種運(yùn)算符的類別執(zhí)行相應(yīng)的運(yùn)算,所以使用多分支if-elif-else語句;對于除法運(yùn)算,由于除數(shù)不能為0,因此需要使用嵌套的if語句來判斷除數(shù)是否為0,并執(zhí)行3.3.3分支語句嵌套04循環(huán)結(jié)構(gòu)PARTFOUR3.4循環(huán)結(jié)構(gòu)為了逼近所需目標(biāo)或結(jié)果重復(fù)反饋的過程稱為迭代。一次對過程的重復(fù)稱為一次迭代,而每次迭代得到的結(jié)果會作為下一次迭代的初始值,重復(fù)執(zhí)行一系列相同的運(yùn)算步驟,從前面的量依次求出后面的量。在人類實踐活動中,源自計算機(jī)程序設(shè)計的迭代思想已經(jīng)由一種算法逐步升級發(fā)展為一種方法、理念和思維模式——計算思維。迭代過程是一個創(chuàng)新的過程,充滿著量變到質(zhì)變的飛躍。例如,在產(chǎn)品設(shè)計中,在原有產(chǎn)品基礎(chǔ)上迭代構(gòu)建新產(chǎn)品,從而不斷逼近用戶需求,就體現(xiàn)了計算思維遞增式、演進(jìn)式的迭代策略應(yīng)用。循環(huán)結(jié)構(gòu)是迭代思想在程序設(shè)計中的具體體現(xiàn)。循環(huán)在日常生活中隨處可見,例如,登錄郵箱時,如果輸入的用戶名或密碼不正確,系統(tǒng)將提示重新輸入,直到輸入正確或超過次數(shù)限制為止。3.4.1while語句while語句用于描述循環(huán)結(jié)構(gòu),在滿足循環(huán)條件時重復(fù)執(zhí)行某件事情,其流程圖如圖3-6所示。從圖中可以看出,當(dāng)表達(dá)式的值為真時,執(zhí)行相應(yīng)的語句塊(循環(huán)體),然后再判斷表達(dá)式的值,如果為真,則繼續(xù)執(zhí)行語句塊……當(dāng)表達(dá)式的值為假時,檢查其后面是否有else子句(因為可選,所以流程圖中未畫出),如果有,則執(zhí)行else子句;如果沒有,則直接跳出while語句,執(zhí)行其下面的語句。書寫格式:關(guān)鍵字while與表達(dá)式之間用空格隔開,表達(dá)式后接英文冒號,關(guān)鍵字else與關(guān)鍵字while左對齊,后接英文冒號;所有語句塊左對齊,即語句塊中的全部語句均縮進(jìn)4個空格,如圖3-7所示。3.4.1while語句本例中計次數(shù)time的初始值為8,循環(huán)條件為計次數(shù)小于12,循環(huán)體為輸出“有效次數(shù)內(nèi)”并使計次數(shù)加1。每輪循環(huán)均需判斷計次數(shù),直到計次數(shù)等于12時,輸出“計次已滿”并結(jié)束循環(huán)。3.4.1while語句在使用while語句時,需要注意以下事項:①與if語句類似,while語句中的表達(dá)式可以是任意類型,如x!=y、x>3orx<5、-5等。②循環(huán)體中的語句塊有可能一次也不執(zhí)行。上例中,若初始值time=13,則語句塊不會執(zhí)行。③語句塊可以包含一條或多條語句。上例中,while子句的語句塊中為兩條語句,else子句的語句塊中為一條語句。④while語句中的else子句可以省略。上例中,若沒有else子句,則當(dāng)計次數(shù)等于12時,while語句結(jié)束,程序繼續(xù)執(zhí)行while語句后面的語句。⑤程序中需要包含使循環(huán)結(jié)束的語句。上例中,若缺少語句time=time+1,則程序無法終止。3.4.1while語句死循環(huán)(endlessloop):又稱無限循環(huán)(infinitloop),是指無法靠自身的控制條件終止的循環(huán)。在while循環(huán)結(jié)構(gòu)中,如果表達(dá)式的值恒為真,循環(huán)將一直執(zhí)行下去,無法靠自身終止,從而產(chǎn)生死循環(huán)。通常,程序中要盡量避免出現(xiàn)死循環(huán),但死循環(huán)并非一無是處,在某些特定場合,添加了終止控制條件的死循環(huán)可以發(fā)揮重要的作用。3.4.1while語句【例3-9】編寫程序,統(tǒng)計并輸出1~1000中所有能夠同時被3和7整除的數(shù)字個數(shù)。循環(huán)變量的初始值為1,如果循環(huán)變量的值小于或等于1000(滿足循環(huán)進(jìn)行的條件),則進(jìn)入循環(huán)體使用if語句進(jìn)行判斷,然后循環(huán)變量自增1并進(jìn)入下一輪循環(huán),循環(huán)結(jié)束后輸出統(tǒng)計結(jié)果。代碼如下:3.4.1while語句
3.4.1while語句3.4.2for語句和內(nèi)置函數(shù)range()除while語句外,Python還提供了另外一種功能強(qiáng)大的描述循環(huán)結(jié)構(gòu)的語句——for語句。從可迭代對象(字符串、列表、元組、字典、迭代器等)的頭部開始,依次選擇每個元素并對其進(jìn)行一些操作直到結(jié)束,這種處理模式稱為遍歷(traversal)。for語句用于遍歷可迭代對象中的所有元素,遍歷結(jié)束后可執(zhí)行else子句(與while語句中的else子句類似,for語句中的else子句也是可選的)。書寫格式:關(guān)鍵字for+空格+循環(huán)變量+空格+關(guān)鍵字in+空格+對象(“+”的意思是后接),后接英文冒號,關(guān)鍵字else與關(guān)鍵字for左對齊,后接英文冒號;所有語句塊左對齊,即語句塊中的全部語句均縮進(jìn)4個空格,如圖3-8所示。3.4.2for語句和內(nèi)置函數(shù)range()程序運(yùn)行結(jié)果為“Hello”,即依次輸出字符串"Hello"中的每個字母并以空格隔開。程序運(yùn)行結(jié)果為“25hello12.8A”,即依次輸出列表中的每個元素并以空格隔開。3.4.2for語句和內(nèi)置函數(shù)range()程序運(yùn)行結(jié)果為“4”,即以遍歷方式計算出“山”在字符串中出現(xiàn)的次數(shù)。for語句經(jīng)常與內(nèi)置函數(shù)range()配合使用。range()用于生成整數(shù)序列,通常的寫法是:range(start,end,step)。其中,start決定序列的起始值(起始值可以省略,省略時該值為0),end代表序列的終值(索引范圍是半開區(qū)間,不包括end的值),step代表序列的步長(可以省略,默認(rèn)值是1)。3.4.2for語句和內(nèi)置函數(shù)range()程序運(yùn)行結(jié)果為“468”,因為索引范圍是半開區(qū)間,所以不包括數(shù)字10。例如:程序運(yùn)行結(jié)果為“10864”,因為步長為-2,所以輸出結(jié)果依次遞減。例如:程序運(yùn)行結(jié)果為“01234”,起始值省略,從0開始;步長省略,步長為1。3.4.2for語句和內(nèi)置函數(shù)range()【例3-11】編寫程序,使用for語句計算1~10000范圍內(nèi)的自然數(shù)之和。首先初始化總和的值為0,然后使用for語句將range()函數(shù)中的元素依次添加到總和中。因為range()的索引范圍為開區(qū)間,所以終值設(shè)為10001。代碼如下:3.4.2for語句和內(nèi)置函數(shù)range()【例3-12】編寫程序,解決以下問題。4個人中有一個人做了好事,已知有三個人說了真話,根據(jù)下面的對話判斷是誰做的好事。A說:不是我。B說:是C。C說:是D。D說:C說得不對。做好事的人是4個人之一,因此可以將4個人的編號存入列表中,然后使用for語句依次進(jìn)行判斷;有三個人說了真話,將編號依次代入,使用if語句判斷是否滿足“有三個人說了真話”(三個邏輯表達(dá)式的值為真)的條件,如果滿足,則輸出結(jié)果。代碼如下:3.4.2for語句和內(nèi)置函數(shù)range()3.4.3循環(huán)語句嵌套為了解決復(fù)雜的問題,可以使用嵌套的循環(huán)語句,嵌套層數(shù)不限,但是循環(huán)的內(nèi)外層之間不能交叉。其中,雙層循環(huán)是一種常用的循環(huán)嵌套,循環(huán)的總次數(shù)等于內(nèi)外層數(shù)之積。當(dāng)外層循環(huán)變量i的值為1時,內(nèi)層循環(huán)變量j的值從1開始,輸出i*j的值并依次遞增,因此輸出“12
3”,內(nèi)層循環(huán)執(zhí)行結(jié)束;然后回到外層循環(huán),i的值遞增為2,而j的值重新從1開始,輸出itj的值,并依次遞增,輸出“2
4
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度高標(biāo)準(zhǔn)溫室大棚施工合作協(xié)議范本2篇
- 建設(shè)合同范本(2篇)
- 二零二五版白酒品牌代理商白酒回購合作協(xié)議3篇
- 二零二五年度城市棚戶區(qū)改造民房征收補(bǔ)償合同4篇
- 二零二五年度新型節(jié)能門窗研發(fā)生產(chǎn)合同4篇
- 部編版八年級語文上冊《白楊禮贊》教學(xué)設(shè)計(共2課時)
- 銀行課程設(shè)計報告范文
- pvc管道施工方案
- 2024年學(xué)校防溺水教案
- 2025年度個人公共安全設(shè)施承包合同模板4篇
- 春節(jié)聯(lián)歡晚會節(jié)目單課件模板
- 糖尿病眼病患者血糖管理
- 抖音音樂推廣代運(yùn)營合同樣本
- 教育促進(jìn)會會長總結(jié)發(fā)言稿
- 心理調(diào)適教案調(diào)整心態(tài)積極應(yīng)對挑戰(zhàn)
- 噴漆外包服務(wù)合同范本
- 2024年電信綜合部辦公室主任年度述職報告(四篇合集)
- 微機(jī)原理與接口技術(shù)考試試題及答案(綜合-必看)
- 濕瘡的中醫(yī)護(hù)理常規(guī)課件
- NUDD新獨難異 失效模式預(yù)防檢查表
- 內(nèi)蒙古匯能煤電集團(tuán)有限公司長灘露天煤礦礦山地質(zhì)環(huán)境保護(hù)與土地復(fù)墾方案
評論
0/150
提交評論