Python 人工智能應(yīng)用與實(shí)踐 課件全套 第1-10章 人工智能導(dǎo)論-人工神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)_第1頁
Python 人工智能應(yīng)用與實(shí)踐 課件全套 第1-10章 人工智能導(dǎo)論-人工神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)_第2頁
Python 人工智能應(yīng)用與實(shí)踐 課件全套 第1-10章 人工智能導(dǎo)論-人工神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)_第3頁
Python 人工智能應(yīng)用與實(shí)踐 課件全套 第1-10章 人工智能導(dǎo)論-人工神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)_第4頁
Python 人工智能應(yīng)用與實(shí)踐 課件全套 第1-10章 人工智能導(dǎo)論-人工神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)_第5頁
已閱讀5頁,還剩379頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

Python人工智能應(yīng)用與實(shí)踐第1章人工智能導(dǎo)論1.1人工智能技術(shù)及其發(fā)展1.1.1人工智能技術(shù)的發(fā)展歷程1943年麥卡洛克(WarrenMcCulloch)和皮茨(WalterPitts)將神經(jīng)元當(dāng)作一種二值閾值邏輯元件,首先提出了人工神經(jīng)元模型。1950年,被稱為人工智能之父阿蘭·麥席森·圖靈(AlanMathisonTuring)發(fā)表論文“計(jì)算機(jī)器與智能”。1956年8月,在美國達(dá)特茅斯學(xué)院舉行了歷史上第一次人工智能研討會(huì),會(huì)后,“ArtificialIntelligence”(人工智能)這一概念被真正確定下來,1956年也因此而被稱為人工智能元年。進(jìn)入21世紀(jì),包括中國在內(nèi)的世界上許多國家,已經(jīng)把“人工智能”提升到國家科技戰(zhàn)略發(fā)展地位。1.1.2人工智能技術(shù)簡介

1.人工智能的概念人工智能(ArtificialIntelligence,英文縮寫AI)是研究一門以計(jì)算機(jī)來模擬人的某些思維過程和智能行為(如學(xué)習(xí)、推理、思考、規(guī)劃等)的學(xué)科。人工智能技術(shù)涉及計(jì)算機(jī)科學(xué)、心理學(xué)、哲學(xué)和語言學(xué)等多學(xué)科交叉融合,它通過揭示智能的實(shí)質(zhì),以制造出一種新的能以人類智能相似的方式做出反應(yīng)的智能機(jī)器。2.人工智能的主要研究方向人工智能領(lǐng)域的研究前沿正逐漸從搜索、知識(shí)和推理領(lǐng)域聚焦到機(jī)器學(xué)習(xí)、深度學(xué)習(xí)、計(jì)算機(jī)視覺、語音識(shí)別、文本挖掘、機(jī)器翻譯和機(jī)器人等領(lǐng)域。未來自動(dòng)駕駛汽車等人工智能新技術(shù)的進(jìn)一步發(fā)展與應(yīng)用,還將依賴于包括物聯(lián)網(wǎng)、云計(jì)算、邊緣計(jì)算、大數(shù)據(jù)、人工神經(jīng)網(wǎng)絡(luò)等一系列技術(shù)的支撐。3.人工智能、機(jī)器學(xué)習(xí)與深度學(xué)習(xí)間的關(guān)系人工智能是讓機(jī)器模擬人類的思維模式,它是一個(gè)寬泛的概念;機(jī)器學(xué)習(xí)是人工智能核心組成部分,它提供了神經(jīng)網(wǎng)絡(luò)等很多算法模型作為實(shí)現(xiàn)人工智能的途徑;深度學(xué)習(xí)是機(jī)器學(xué)習(xí)的一個(gè)重要的新分支,它專注于擁有眾多層數(shù)(深度)的神經(jīng)網(wǎng)絡(luò)算法,不同于機(jī)器學(xué)習(xí)能夠適應(yīng)各種數(shù)據(jù)量,深度學(xué)習(xí)需要大量數(shù)據(jù),并配備具有強(qiáng)大運(yùn)算能力的硬件才能突出其優(yōu)勢。1.1.3Python語言與人工智能Python已成為人工智能應(yīng)用與研發(fā)的首選編程語言,在人工智能領(lǐng)域被廣泛應(yīng)用的各種庫及相關(guān)聯(lián)的框架大多是以Python為主要語言開發(fā)出來的。Python具有豐富和強(qiáng)大的免費(fèi)安裝的擴(kuò)展庫,包含對應(yīng)人工智能、機(jī)器學(xué)習(xí)的不同功能與算法,還能夠方便地使用C語言、C++等語言編寫擴(kuò)充模塊,無縫地與數(shù)據(jù)結(jié)構(gòu)和常用人工智能算法一起使用。Python還擁有強(qiáng)大而高效的科學(xué)計(jì)算、數(shù)據(jù)可視化和分析庫如Numpy、scipy、Pandas、Matpioylib等。Python還是一種簡單易學(xué)、提供交互式編程環(huán)境的面向?qū)ο蟮某绦蛟O(shè)計(jì)語言。1.2教學(xué)實(shí)驗(yàn)平臺(tái)推薦1.2.1Inforstack大數(shù)據(jù)應(yīng)用平臺(tái)1.2.2語音與視覺智能實(shí)驗(yàn)套件簡介第2章Python程序設(shè)計(jì)基礎(chǔ)2.1基礎(chǔ)語法2.1.1Python語言概述Python語言具有以下主要特點(diǎn):1)是一種面向?qū)ο?、解釋型程序設(shè)計(jì)語言。語法簡潔、清晰,比較容易學(xué)習(xí)和掌握。2)Python作為高級程序設(shè)計(jì)語言隱藏了許多機(jī)器層面上的實(shí)現(xiàn)細(xì)節(jié)。程序員可專注程序的邏輯,而不是具體的機(jī)器實(shí)現(xiàn)細(xì)節(jié)。3)Python語言具有開源、免費(fèi)的特征。用戶可自由下載、發(fā)布軟件拷貝,可自由閱讀、使用和改動(dòng)源代碼。4)Python程序具有良好的跨平臺(tái)、易于移植的特性??蛇\(yùn)行于Windows、Linux、安卓等許多操作系統(tǒng)平臺(tái)。5)擁有豐富和強(qiáng)大的庫,具有良好的可擴(kuò)展性。大量實(shí)用且高質(zhì)量的擴(kuò)展庫可供用戶直接調(diào)用,因此常被稱為膠水語言。2.1.2Python語言安裝與配置IDLE是集成于Python的簡潔開發(fā)環(huán)境,從:https:///downloads/

網(wǎng)站選擇不同操作系統(tǒng)的安裝文件。如選擇64位windows操作系統(tǒng),可下載名為python-3.7.0-amd64.exe的文件。整個(gè)安裝及配置步驟如下:①雙擊安裝程序python-3.7.0-amd64.exe,出現(xiàn)如圖對話框。②勾選“AddPython3.xtoPATH”復(fù)選框,點(diǎn)擊“CustomizeInstallation”。③勾選“pip”復(fù)選框,然后單擊“Next”按鈕。④勾選“AddPythontoenvironmentvariables”選項(xiàng),并選擇Python的安裝路徑,然后單擊“Install”按鈕。⑤等待安裝結(jié)束后,將出現(xiàn)安裝成功提示。⑥單擊“Close”按鈕,安裝結(jié)束。2.1.3Python基礎(chǔ)語法1.運(yùn)行第一個(gè)Python程序(1)交互方式運(yùn)行代碼同時(shí)按下“Win”(Windows標(biāo)志鍵)+“R”鍵可打開命令行控制臺(tái)窗口,輸入“CMD”后回車,出現(xiàn)如圖所示的命令行窗口。在命令行窗口中輸入“python”后按回車鍵,進(jìn)入Python交互式解釋器??稍谔崾痉?gt;>>”后面輸入命令行:print(“HelloWorld!”)加回車,即可輸出字符串“HelloWorld!”。退出Python交互式運(yùn)行方式,可使用quit()命令。選擇開始菜單下的Python子菜單中的“IDLE(Python3.764-bit)”也可進(jìn)入交互式Python解釋器(見圖2-5)。啟動(dòng)IDLE集成開發(fā)環(huán)境后,如需查閱Python技術(shù)幫助文檔可選擇IDLE的Help菜單中的“PythonDocs”項(xiàng)(或直接按<F1>鍵);而要查閱IDLE操作方法,則可選擇Help菜單中的“IDLEHelp”選項(xiàng)。(2)文件方式運(yùn)行代碼【例2-1】使用文件方式運(yùn)行代碼,顯示如圖2-6所示結(jié)果(注:“#”之后的內(nèi)容為本行代碼的注釋)。操作步驟如下:①啟動(dòng)IDLE集成開發(fā)環(huán)境后,選擇File菜單中的“NewFile”命令打開編輯窗口。②在編輯窗口中輸入如下程序代碼:fromtkinterimport*#導(dǎo)入tkinter模塊用于設(shè)計(jì)界面win=Tk() #創(chuàng)建窗體對象 win.geometry("400x300")#創(chuàng)建窗體對象大小:寬x高(中間是字母x)win.title("我的窗口")#設(shè)置窗口標(biāo)題,字符串使用雙引號與單引號都可以#在橫坐標(biāo)x=200,縱坐標(biāo)y=10位置的Label組件中顯示文字(窗口左上角為坐標(biāo)原點(diǎn))lab1=Label(win,text='上海理工大學(xué)中德國際學(xué)院歡迎您').place(x=120,y=10)bm=PhotoImage(file='SHC1.png')#顯示的圖像文件與Python源程序在同一目錄下lab2=Label(win,image=bm)#在創(chuàng)建標(biāo)簽對象lab2中顯示圖像lab2.place(x=20,y=50) #定位lab2標(biāo)簽對象左上角坐標(biāo)點(diǎn)為(20,50)win.mainloop()#程序結(jié)束語句,循環(huán)執(zhí)行并進(jìn)入等待和處理事件狀態(tài)③代碼輸入完成后選擇File菜單中“SaveAs”命令,選擇文件保存盤符、路徑,并輸入文件名(默認(rèn)擴(kuò)展名為.py),再確認(rèn)保存文件代碼。④按“F5”鍵或選擇菜單中的Run菜單中的“RunModule”命令可運(yùn)行程序,并得到如圖執(zhí)行結(jié)果:(3)帶命令行參數(shù)方式交互運(yùn)行代碼①使用IDLE集成開發(fā)環(huán)境創(chuàng)建D:\comm.py源程序文件,實(shí)現(xiàn)求2個(gè)命令行參數(shù)的整數(shù)和功能,文件輸入代碼如下:importsys#導(dǎo)入sys模塊print(int(sys.argv[1])+int(sys.argv[2]))#命令行第1和第2參數(shù)由字符串類型轉(zhuǎn)換為整型數(shù)②在如圖2-4界面中輸入:D:<回車>,然后輸入:D:\>pythoncomm.py10023<回車>sys.argv[0]將接受文件名"comm.py",第1參數(shù)sys.argv[1]和第2參數(shù)sys.argv[2]分別接受字符串"100"和"23",傳入程序的2個(gè)字符串型參數(shù)均被int()函數(shù)轉(zhuǎn)換成整型數(shù),然后相加輸出的和為123。注意如參數(shù)不被轉(zhuǎn)換成整型數(shù)而直接相加,則輸出結(jié)果為"10023"(加引號的字符串相加完成的操作是將2個(gè)字符串進(jìn)行連接)。2.程序的輸入與輸出(1)print輸出函數(shù)print函數(shù)的格式如下:print(*objects,sep='',end='\n',file=sys.stdout)

參數(shù)說明:objects可以是任何類型的對象,符號*表示數(shù)量不確定(允許同時(shí)輸出多個(gè)對象值),多對象間用逗號分隔;sep決定多個(gè)輸出對象值之間的分隔符,默認(rèn)是空格;end指定輸出的結(jié)尾符,默認(rèn)是換行符'\n';file表示輸出的目標(biāo)位置:可將輸出到文件,默認(rèn)值是sys.stdout(標(biāo)準(zhǔn)輸出:顯示屏)?!纠?-2】使用print輸出函數(shù)示例。print('1','+','2','=',3)#一次輸出多個(gè)對象,中間默認(rèn)用空格隔開print('hello','world')#一次輸出多個(gè)對象,中間用指定的“!”隔開print('hello','world',sep='!')print("Mynameis")#默認(rèn)以換行符結(jié)尾print("Mary.")#以空格作為一行結(jié)尾(即:不換行)print("Mynameis",end='')print("Mary.")運(yùn)行輸出:1+2=3helloworldhello!worldMynameisMary.MynameisMary.(2)input()輸入函數(shù)該函數(shù)返回字符串類型,格式如下:變量=input('提示信息')如提示信息缺省,則不顯示提示信息。鍵盤輸入數(shù)據(jù)再按回車鍵后,輸入數(shù)據(jù)將作為一個(gè)字符串返回(忽略換行符),并將返回結(jié)果賦給變量。如需輸入整數(shù)或?qū)崝?shù),則要使用int()或float()函數(shù)進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換,還可用eval()函數(shù)計(jì)算輸入字符串所表示的表達(dá)式的值?!纠?-3】使用input()函數(shù)輸入數(shù)據(jù)示例。'''用連續(xù)三個(gè)單引號或連續(xù)三個(gè)雙引號可包括多行注釋,本行及以下2行均為注釋a=(input("請輸入整數(shù)值:"))的功能是輸入字符串到變量a,提示信息用雙或單引號均可print('a=',a+1):在Python中字符串型數(shù)加整數(shù)值將出錯(cuò)'''#本行注釋結(jié)束運(yùn)行輸出:a=int(input("請輸入一個(gè)整數(shù)到a:"))請輸入一個(gè)整數(shù)到a:12<回車>print('a=',a)a=12b=float(input(“請輸入一個(gè)帶小數(shù)的浮點(diǎn)數(shù)到b:”))請輸入一個(gè)帶小數(shù)的浮點(diǎn)數(shù)到b:print(‘b=’,b)

3.14<回車>b=3.14print(‘a(chǎn)+b=’,a+b)#整數(shù)可與浮點(diǎn)數(shù)相加結(jié)果為浮點(diǎn)數(shù)a+b=15.14c=eval(input("請輸入一個(gè)整數(shù)到c:"))print('c=',c)#type()函數(shù)顯示變量的數(shù)據(jù)類型print('c的數(shù)據(jù)類型:',type(c))d=eval(input("請輸入一個(gè)浮點(diǎn)數(shù)到d:"))print('d=',d)print('d的數(shù)據(jù)類型:',type(d))e=eval(input(“請輸入表達(dá)式值(例如輸入\

10-25):"))print('表達(dá)式值=',e)請輸入一個(gè)整數(shù)到c:34<回車>c=34c的數(shù)據(jù)類型:<class'int'>請輸入一個(gè)浮點(diǎn)數(shù)到d:34.55<回車>d=34.55d的數(shù)據(jù)類型:<class'float'>請輸入表達(dá)式值(例如輸入10-25):10-25<回車>表達(dá)式值=-153.標(biāo)識(shí)符的命名規(guī)則1)文件名、類名、模塊名、變量名及函數(shù)名等標(biāo)識(shí)符的第一個(gè)字符必須是字母或下劃線'_';2)標(biāo)識(shí)符的其他的部分可由字母、數(shù)字和下劃線組成,且區(qū)分大小寫;3)標(biāo)識(shí)符不能使用關(guān)鍵字(構(gòu)成計(jì)算機(jī)語言保留字的專用標(biāo)識(shí)符)。例如:Abc、id_12、_123等都是合法標(biāo)識(shí)符,3abc(數(shù)字開頭)、hello&world(中間用非法字符)、if(關(guān)鍵字)等則均為非法標(biāo)識(shí)符。4.數(shù)值類型Python定義了Number(數(shù)字)、String(字符串)、List(列表)、Tuple(元組)、Sets(集合)、Dictionary(字典)共6種標(biāo)準(zhǔn)數(shù)據(jù)類型。這里先介紹數(shù)字和字符串類型及其運(yùn)算。(1)數(shù)字類型及運(yùn)算整型(int):不帶小數(shù)點(diǎn)的正或負(fù)整數(shù)類型。浮點(diǎn)型(float):帶小數(shù)點(diǎn)的實(shí)數(shù)類型,浮點(diǎn)型也可用科學(xué)計(jì)數(shù)法表示(如1.56e4就是1.56╳104=15600)。復(fù)數(shù)(complex)類型:復(fù)數(shù)由實(shí)數(shù)部分和虛數(shù)部分構(gòu)成,可用a+bj或complex(a,b)表示,虛部以字母j或J結(jié)尾(例如:3+6j)。布爾值(bool)類型:只有兩個(gè)取值“True”和“False”,表示邏輯“真”、“假”的類型(例如:3>5結(jié)果為False,3>=3結(jié)果為True)。當(dāng)布爾值與數(shù)值類型做數(shù)值運(yùn)算時(shí)True表示1、False表示0(例如:True+1的結(jié)果為2)。注意:Python屬動(dòng)態(tài)語言,給變量賦值無須先聲明類型。例如:執(zhí)行x=1后x為整型變量,再執(zhí)行x=1.2后x就變?yōu)楦↑c(diǎn)型變量了。此外,Python3未保留長整型(long)。1)算術(shù)、關(guān)系運(yùn)算符表2-1為常用算術(shù)、關(guān)系運(yùn)算符列表。其中,關(guān)系運(yùn)算的運(yùn)算結(jié)果為布爾值。2)邏輯運(yùn)算符表2-2為常用算術(shù)、關(guān)系運(yùn)算符列表。表中,0為False,非零數(shù)為True。3)位運(yùn)算符位運(yùn)算符是對操作數(shù)按其二進(jìn)制形式逐位進(jìn)行運(yùn)算,表2-3為位運(yùn)算列表。還有位左移a<<n(將a中的二進(jìn)制數(shù)依次左移n位,最低位補(bǔ)0),位右移a>>n(將a中的二進(jìn)制數(shù)依次右移n位,移出位丟失,最高位補(bǔ)符號位)。4)表達(dá)式與運(yùn)算符優(yōu)先級表達(dá)式其實(shí)就是一個(gè)或多個(gè)運(yùn)算的組合,在一個(gè)表達(dá)式中出現(xiàn)多種運(yùn)算時(shí),按照運(yùn)算符優(yōu)先級順序進(jìn)行表達(dá)式運(yùn)算。一般而言,運(yùn)算符的優(yōu)先級從高到低順序如下:乘方→乘、除、取余、整除→加、減→關(guān)系運(yùn)算符→邏輯運(yùn)算符。括號內(nèi)的運(yùn)算符具有最高優(yōu)先級,因此可以通過加括號改變運(yùn)算順序;關(guān)系運(yùn)算符中大于(或大于等于)及小于(或小于等于)優(yōu)先級高于等于和不等于;邏輯運(yùn)算符中邏輯非優(yōu)先級高于邏輯與運(yùn)算,邏輯與優(yōu)先級又高于邏輯或運(yùn)算。此外,同優(yōu)先級運(yùn)算按照從左到右次序,多層括號則由里層向外層運(yùn)算。(2)字符串類型及操作用一對單引號或雙引號括起來的字符序列稱為字符串(string)。例如:'abc_123',"256.8","你好"都是字符串。字符串與后面章節(jié)介紹的列表和元組類型同屬序列類型。1)字符串常用方法Python的字符串類型定義了一些方法(操作),可以以下格式調(diào)用字符串對象的方法,實(shí)現(xiàn)對字符串對象的相關(guān)操作:字符串類型對象.方法()。表2-4為字符串對象常用方法,其它字符串方法將在后面章節(jié)介紹。2)轉(zhuǎn)義字符與字符串格式符轉(zhuǎn)義字符以“\”開頭,后接某些特定的字符或數(shù)字。Python中常用的轉(zhuǎn)義字符如表2-5所示。注意:當(dāng)“\”被用在行尾時(shí)被視為續(xù)行符,表示下一行將繼續(xù)輸入本行未輸完的代碼。Python支持格式化字符串的輸出,常用于將一個(gè)值插入到有字符串格式符的模板中。常用的字符串格式符及含義見表2-6所示:【例2-4】轉(zhuǎn)義字符與字符串格式符的使用示例。a=0xFF#0x后跟十六進(jìn)制數(shù)

#在占位符%d位置以十進(jìn)制輸出a:print('十六進(jìn)制數(shù)0xFF轉(zhuǎn)換成十進(jìn)制為:%d'%a)b=65#65是'A'字符的ASCII碼print("ASCII碼%d代表:%c"%(b,b))#3位八進(jìn)制數(shù)101是‘A’字符的ASCII碼,因此輸出字符‘A’:print('\101')#2位十六進(jìn)制數(shù)41是‘A’字符的ASCII碼,因此輸出字符‘A’:print('\x41')c=22500000#在占位符%e位置以科學(xué)計(jì)數(shù)法格式輸出c:print('22500000轉(zhuǎn)換成科學(xué)計(jì)數(shù)法為:%e'%c)#2個(gè)連續(xù)反斜杠表示輸出一個(gè)反斜杠\:d='這個(gè)字符串中只輸出1個(gè)\\'print('%s'%d)#輸出字符串de=-2.315#分別以浮點(diǎn)數(shù)默認(rèn)格式和保留2位小數(shù)格式輸出e:print('%f與%3.2f'%(e,e))運(yùn)行輸出:十六進(jìn)制數(shù)0xFF轉(zhuǎn)換成十進(jìn)制為:255ASCII碼65代表:AAA22500000轉(zhuǎn)換成科學(xué)計(jì)數(shù)法為:2.250000e+07這個(gè)字符串中只輸出1個(gè)\-2.315000與-2.315.常量、變量及賦值(1)常量與變量常量就是不能變的量,比如π的值3.14就是一個(gè)常量(常數(shù))。在Python中,習(xí)慣用全部大寫的變量名表示常量:PI=3但在Python中的常量只是一個(gè)習(xí)慣上的用法,實(shí)際上PI的值也是可以被改變的。變量是程序設(shè)計(jì)語言中能儲(chǔ)存計(jì)算結(jié)果或能表示值的抽象概念。變量可以通過變量名訪問,用于表示可變的數(shù)據(jù)。(2)賦值在Python中通過賦值創(chuàng)建變量,并將值與對應(yīng)的變量名字相關(guān)聯(lián)。通過賦值語句對變量進(jìn)行賦值的語句格式如下:<變量>=<表達(dá)式>其中“=”為賦值運(yùn)算符,“=”左側(cè)是一個(gè)變量,“=”右邊是一個(gè)表達(dá)式(由常量、變量和運(yùn)算符構(gòu)成),賦值語句實(shí)現(xiàn)將表達(dá)式的值賦值給變量。1)復(fù)合賦值、鏈?zhǔn)劫x值與變量數(shù)據(jù)交換賦值號與運(yùn)算符可以組成復(fù)合賦值語句。a=a+12;b=b*14;c=c/12可以縮寫成:a+=12;b*=14;c/=12等。鏈?zhǔn)劫x值實(shí)現(xiàn)多變量賦相同的值。例如:a=b=19等同于b=19;a=b(a與b都等于19)??蓪?shí)現(xiàn)x與y變量存儲(chǔ)數(shù)據(jù)相互交換的語句:x,y=y,x。

2)賦值對象內(nèi)存示意圖Python是動(dòng)態(tài)類型語言,即由變量的賦值自動(dòng)確定其類型。通過賦值變量可以指向(引用)任何類型的對象,同時(shí)Python還是強(qiáng)類型語言,即每個(gè)變量指向某種確定類型的對象,因此指向某些不同類型對象變量間的運(yùn)算會(huì)出錯(cuò)(例如執(zhí)行:a=6;b='7';a+b將出錯(cuò))?!纠?-5】對變量a與b進(jìn)行賦值交換,并驗(yàn)證賦值與引用變化的關(guān)系。a=12#a指向值為12的int型實(shí)例對象(整型數(shù)也是對象)b=-12#b指向值為-12的int型實(shí)例對象print('a與b交換前的值:','a=',a,'b=',b)#id()函數(shù)顯示變量的存儲(chǔ)地址print('a與b交換前:','a中存儲(chǔ)地址',id(a),',b中存儲(chǔ)地址',id(b))#以下代碼通過中間變量t對變量a與b進(jìn)行賦值交換t=a#變量t和a同時(shí)指向(引用)對象實(shí)例12a=b#變量a和b同時(shí)指向(引用)對象實(shí)例-12b=t#變量b和t同時(shí)指向(引用)對象實(shí)例12print('a與b交換后的值:','a=',a,'b=',b)print('a與b交換后:','a中存儲(chǔ)地址',id(a),',b中存儲(chǔ)地址',id(b))a,b=b,a#變量a與b直接進(jìn)行賦值交換print('a與b再次交換后的值:','a=',a,'b=',b)print('a與b再次交換后:','a中存儲(chǔ)地址',id(a),',b中存儲(chǔ)地址',id(b))代碼運(yùn)行結(jié)果:a與b交換前的值:a=12b=-12a與b交換前:a中存儲(chǔ)地址140706398958192,b中存儲(chǔ)地址1727327051536a與b交換后的值:a=-12b=12a與b交換后:a中存儲(chǔ)地址1727327051536,b中存儲(chǔ)地址140706398958192a與b再次交換后的值:a=12b=-12a與b再次交換后:a中存儲(chǔ)地址140706398958192,b中存儲(chǔ)地址1727327051536圖2-7為例2-5中賦值對象內(nèi)存示意圖。按(1)到(5)順序執(zhí)行賦值語句后,變量a、b及t中存儲(chǔ)的對象地址變化過程(圖中箭頭表示變量中存儲(chǔ)了指向?qū)ο蟮拇鎯?chǔ)地址)。由于每次運(yùn)行代碼計(jì)算機(jī)都會(huì)動(dòng)態(tài)分配變量a與b中的對象存儲(chǔ)地址,本例用id()函數(shù)獲得本次程序運(yùn)行最初分配給變量a、b指向的對象存儲(chǔ)地址為140706398958192、1727327051536。2.2程序的控制結(jié)構(gòu)2.2.1選擇結(jié)構(gòu)1.單分支語句單分支語句語法形式如下所示:if條件表達(dá)式:語句體關(guān)鍵字if后面為判斷條件表達(dá)式,然后加一個(gè)冒號。如圖2-8為單分支語句執(zhí)行流程圖。當(dāng)表達(dá)式結(jié)果為真(包括非零、非空字符串)時(shí)執(zhí)行語句體,語句體包含的語句前必須縮進(jìn)相同的空格數(shù)(通??s進(jìn)一個(gè)Tab,或4個(gè)空格)。【例2-6】任意輸入三個(gè)浮點(diǎn)數(shù),使用單分支語句編程按從小到大順序:x,y,z輸出。x=float(input('x='))#輸入三個(gè)數(shù),轉(zhuǎn)換成實(shí)數(shù)后賦值到x,y,zy=float(input('y='))z=float(input('z='))交換到x中,否則x中保留較小數(shù)x,y=y,xifx>z:

#如x>z,則z為最小數(shù)并交換到x中,否則x中保留最小數(shù)x,z=z,xify>z:#x中已為最小數(shù)。如y>z,則把y中最大數(shù)交換到z中y,z=z,y#否則(即y≤z),z中保ifx>y:#如x>y較小數(shù)留最大數(shù)不變print(x,y,z)#三個(gè)實(shí)數(shù)按從小到大順序:x,y,z輸出運(yùn)行輸出:x=2.8y=78z=-34-34.02.878.02.雙分支語句雙分支if/else語句的語法形式如下所示:

if條件表達(dá)式:語句體1else:語句體2【例2-7】輸入一個(gè)整數(shù),判別其是否能同時(shí)被5和7整除。a=int(input("輸入一個(gè)整數(shù):"))#判別除5、除7的余數(shù)是否同時(shí)為0ifa%5==0anda%7==0:

print(a,"能同時(shí)被5和7整除")else:print(a,"不能同時(shí)被5和7整除")運(yùn)行輸出:輸入一個(gè)整數(shù):35<回車>35能同時(shí)被5和7整除3.多分支語句如圖2-10為多分支語句執(zhí)行流程圖,多分支語句的語法形式如下所示:

if條件表達(dá)式1:

語句體1 elif條件表達(dá)式2:

語句體2 …… elif條件表達(dá)式n-1:

語句體n-1 else:

語句體n【例2-8】編寫石頭、剪刀、布游戲程序(數(shù)字含義:0-石頭、1-剪刀、2-布;游戲規(guī)則:石頭勝剪刀、剪刀勝布、布勝石頭)。電腦使用隨機(jī)函數(shù)產(chǎn)生隨機(jī)整數(shù):0、1、2;玩家手動(dòng)輸入整數(shù):0、1、2。importrandom#導(dǎo)入random隨機(jī)函數(shù)模塊后,可使用模塊內(nèi)包含的隨機(jī)函數(shù)print("數(shù)字含義:0-石頭、1-剪刀、2-布")player=int(input("請出拳:"))#玩家出拳computer=random.randint(0,2)#電腦使用隨機(jī)函數(shù),產(chǎn)生隨機(jī)整數(shù):0、1、2print("您出{0},電腦出{1}".format(player,computer))'''3個(gè)連續(xù)單引號或雙引號之間為注釋:format函數(shù)格式化輸出字符串,字符串{0}位置替代輸出format函數(shù)中第0個(gè)參數(shù)變量player,在{1}位置替代輸出第1個(gè)參數(shù)變量computer'''if(player==0)and(computer==1)or(player==1)\#“\”為續(xù)行符,“與”優(yōu)先“或”運(yùn)算

and(computer==2)or(player==2)and(computer==0):#判別條件為真,則玩家勝

print('玩家獲勝!')#玩家勝elifplayer==computer:#非玩家勝,且判別此條件為真則平局

print('玩家與計(jì)算機(jī)平局!')else:#非玩家勝,也非平局則電腦獲勝

print('電腦獲勝!')運(yùn)行輸出:數(shù)字含義:0-石頭、1-剪刀、2-布請出拳:0<回車>您出0,電腦出1玩家獲勝!2.2.2循環(huán)結(jié)構(gòu)1.while循環(huán)語句while語句的語法形式如下所示:while條件表達(dá)式:循環(huán)體while循環(huán)由關(guān)鍵字while、條件表達(dá)式、冒號及循環(huán)體構(gòu)成。while語句的執(zhí)行流程圖如圖2-11所示。其執(zhí)行過程:只要計(jì)算條件表達(dá)式值為真(包括非零、非空)循環(huán)執(zhí)行循環(huán)體中的語句,直到判斷條件為假退出循環(huán),執(zhí)行循環(huán)語句的下一條語句?!纠?-9】輸入整數(shù)n,分別求n的階乘和1到n間的整數(shù)和(含1和n)。n=input("輸入整數(shù)n:")n=int(n)d=1#求累乘的積通常賦值初值為1m=1s=0#求累加和通常賦值初值為0whilem<=n:#條件表達(dá)式值為真,則不斷循環(huán)執(zhí)行循環(huán)體,直到條件表達(dá)式值為假

d*=m#循環(huán)體中的3條語句必須縮進(jìn)相同的空格數(shù)

s+=mm=m+1#產(chǎn)生下一個(gè)整數(shù)print(n,"!=",d,";sum=",s)運(yùn)行輸出:輸入整數(shù)n:66!=720;sum=212.for循環(huán)語句

for循環(huán)的語法格式如下:for循環(huán)變量in序列循環(huán)體循環(huán)變量依次遍歷序列中的每一項(xiàng)值并執(zhí)行循環(huán)體,直到序列(可迭代對象)中沒有值可取時(shí)循環(huán)終止。圖所示為for語句執(zhí)行流程圖。Python提供一個(gè)range()函數(shù),可生成一個(gè)整數(shù)序列,用來產(chǎn)生for循環(huán)的循環(huán)操作次數(shù)。函數(shù)調(diào)用格式如下:range(起始數(shù)字,結(jié)尾數(shù)字,步長)起始數(shù)字默認(rèn)從0開始,結(jié)尾數(shù)字-1產(chǎn)生最后一個(gè)整數(shù),步長默認(rèn)為1?!纠?-10】用for循環(huán)語句重寫例2-9代碼。n=int(input("輸入整數(shù)n:"))d=1;s=0forminrange(1,n+1):#每次循環(huán)m依次遞增(步長為1)取1到n間所有整數(shù)

d*=ms+=mprint(n,"!=",d,";sum=",s)運(yùn)行輸出:輸入整數(shù)n:66!=720;sum=213.嵌套循環(huán)嵌套循環(huán)指一個(gè)循環(huán)體里可嵌入另一個(gè)循環(huán),而且允許多重嵌套循環(huán)?!纠?-11】編寫秒表計(jì)時(shí)程序。程序說明:程序含三重循環(huán),設(shè)外循環(huán)控制變量hour(計(jì)時(shí))、中循環(huán)計(jì)數(shù)變量minute(計(jì)分)、內(nèi)循環(huán)計(jì)數(shù)變量second(計(jì)秒)實(shí)現(xiàn)計(jì)時(shí)功能。運(yùn)行程序注意多重循環(huán)各控制變量變化規(guī)律與時(shí):分:秒計(jì)時(shí)顯示的對應(yīng)關(guān)系(內(nèi)循環(huán)完成全部循環(huán)計(jì)數(shù),變量second置0,中循環(huán)計(jì)數(shù)變量minute加1;中循環(huán)完成全部循環(huán)計(jì)數(shù),變量minute置0,外循環(huán)計(jì)數(shù)變量hour加1)。程序共被執(zhí)行24╳60╳60次循環(huán),如圖2-13為程序正運(yùn)行至“0時(shí)2分3秒”時(shí)的顯示界面,可見內(nèi)循環(huán)計(jì)數(shù)滿60,變量second置0,中循環(huán)計(jì)數(shù)變量minute加1。importtime#導(dǎo)入time庫forhourinrange(24):#外循環(huán)產(chǎn)生時(shí)計(jì)數(shù)

forminuteinrange(60):#中循環(huán)產(chǎn)生分計(jì)數(shù)

forsecondinrange(60):#內(nèi)循環(huán)產(chǎn)生秒計(jì)數(shù)

print(hour,':',minute,':',second)#顯示當(dāng)前時(shí):分:秒

time.sleep(1)#調(diào)用time庫的sleep()函數(shù)暫停(延時(shí))1秒代碼以ex2_11.py保存,在電腦中找到該文件后鼠標(biāo)雙擊運(yùn)行文件,運(yùn)行界面見圖2-13。【例2-12】編程打印九九乘法口訣表(輸出格式見程序運(yùn)行輸出)。foriinrange(1,10):#外循環(huán)變量i取值1到9(行號),i為打印行號,內(nèi)循環(huán)變量j決定打印第i行的第j列

forjinrange(1,i+1):#行列號相等(j取值i)時(shí)對應(yīng)對角線位置#j取值1到i(列號),j取遍列號(完成所有內(nèi)循環(huán))后進(jìn)入下一輪外循環(huán)

print('{0}*{1}={2}'.format(i,j,i*j),end='\t')#3個(gè)輸出值依次在{0}、{1}、{2}位置顯示

#end="\t"以制表符結(jié)束,作用是對齊表格數(shù)據(jù)

print()#換行運(yùn)行輸出:4.continue和break語句break語句在while循環(huán)和for循環(huán)中都可以使用,一般放在if選擇結(jié)構(gòu)中,一旦break語句被執(zhí)行,將使得整個(gè)循環(huán)提前結(jié)束;continue語句的作用是終止當(dāng)前循環(huán),并忽略continue之后的語句,然后回到循環(huán)的頂端,提前進(jìn)入下一次循環(huán)?!纠?-13】編寫程序,輸出10~100之間的所有素?cái)?shù)(只能被1和本身整除的正整數(shù),稱為素?cái)?shù)或質(zhì)數(shù))。#判i是否素?cái)?shù):將i依次被2到i的平方根間的所有整數(shù)除,若都除不盡,則i為素?cái)?shù)importmath#導(dǎo)入數(shù)學(xué)庫foriinrange(10,101):#i取從10到100的整數(shù)

mark=True#設(shè)置當(dāng)前i是否為素?cái)?shù)的標(biāo)記邏輯變量mark為真

forjinrange(2,int(math.sqrt(i))+1):#循環(huán)控制變量j取值2到i的平方根的取整值

ifi%j==0:#i是否能被j整除

temp=False#能被某個(gè)數(shù)整數(shù),則不是素?cái)?shù)并設(shè)置mark為假

break#不是素?cái)?shù),退出本層次循環(huán)

else:continue#進(jìn)行下一次循環(huán)

ifj>=int(math.sqrt(i))andmark:#如i不能被2到i的平方根整除,i為素?cái)?shù)

print(i,end='')#不換行輸出素?cái)?shù)運(yùn)行輸出:1113171923293137414347535961677173798389972.3內(nèi)置函數(shù)、常用模塊的導(dǎo)入與調(diào)用2.3.1常用內(nèi)置函數(shù)Python內(nèi)置的不需要導(dǎo)入任何模塊就可以直接使用的常用函數(shù)稱內(nèi)置函數(shù)。前面已介紹了print()、range()、float()、int()、input()、eval()等常用內(nèi)置函數(shù)。注:表中的“[]”表示可選項(xiàng)。2.3.2標(biāo)準(zhǔn)庫(模塊)的導(dǎo)入與調(diào)用

1.常用模塊的導(dǎo)入模塊(也稱庫)是保存了Python代碼的文件,在其內(nèi)部能定義函數(shù),類和變量。把相關(guān)的代碼存放到一個(gè)模塊中能讓此代碼段更易用、易讀。Python自帶的標(biāo)準(zhǔn)庫無需安裝,只需先通過import方法導(dǎo)入便可使用標(biāo)準(zhǔn)庫中的方法。對于Python的第三方庫則需要先進(jìn)行安裝(部分還需要配置),然后通過import方法導(dǎo)入才可使用庫中的方法。(1)導(dǎo)入模塊方式1)導(dǎo)入模塊方式一在Python中用關(guān)鍵字import來導(dǎo)入某個(gè)模塊。導(dǎo)入模塊方式一格式如下:import模塊名 #導(dǎo)入模塊2)導(dǎo)入模塊方式二如只需要用到模塊中的某個(gè)(或某些)函數(shù),則只要導(dǎo)入指定的函數(shù)即可,此時(shí)使用的導(dǎo)入模塊方式二格式如下:from模塊名import函數(shù)名1,函數(shù)名2....當(dāng)需要導(dǎo)入模塊中所有的函數(shù)時(shí)還可使用以下省略函數(shù)名的語句格式:frommathimport*(2)常用標(biāo)準(zhǔn)庫介紹1)math模塊如表2-8為常用數(shù)學(xué)庫函數(shù)功能列表??刹捎孟旅娑N方式實(shí)現(xiàn)math模塊的所有函數(shù)的導(dǎo)入:importmath或frommathimport*。fabs()函數(shù)只適用于float和integer類型,而內(nèi)置函數(shù)abs()也適用于復(fù)數(shù);abs()可返回float和int類型值,而math.fabs()只返回float類型值。同樣的,math.pow(10,3)與內(nèi)置函數(shù)pow(10,3)分別返回float類型值1000.0與int類型值1000。2)random模塊如表2-9為常用random模塊產(chǎn)生隨機(jī)數(shù)函數(shù)功能列表。2)random模塊如表2-9為常用random模塊產(chǎn)生隨機(jī)數(shù)函數(shù)功能列表。3)其它常用模塊專用于復(fù)數(shù)運(yùn)算的模塊cmath示例importcmath#導(dǎo)入cmath模塊cmath.sqrt(-2)#求-2的平方根,結(jié)果為復(fù)數(shù):1.4142135623730951jdatetime日期時(shí)間模塊示例importdatetime#導(dǎo)入datetime模塊print("今天是%s"%datetime.date.today())#在%s位置輸出函數(shù)值:今天是2022-09-04dt=datetime.datetime.now()#獲取當(dāng)前日期時(shí)間后,下行語句依次輸出元組中日期變量值:print("日/月/年:%s/%s/%s"%(dt.day,dt.month,dt.year))#輸出今天日期:“日/月/年:4/9/2022”#以“時(shí):9,分:16,秒:48”格式輸出當(dāng)前時(shí)間:print("時(shí):%s,分:%s,秒:%s"%(dt.hour,dt.minute,dt.second))

2.標(biāo)準(zhǔn)庫的調(diào)用兩種模塊導(dǎo)入方式在函數(shù)調(diào)用上的差別:importmath#使用方式一導(dǎo)入math模塊print(math.sqrt(25))#使用方式一導(dǎo)入后,要使用math.sqrt(25)格式frommathimport*#使用方式二導(dǎo)入math模塊frommathimportsqrt#使用方式二導(dǎo)入math模塊中的sqrt函數(shù)print(sqrt(25))#使用方式二導(dǎo)入后,要使用sqrt(25)格式,函數(shù)名前不要加“math.”【例2-14】應(yīng)用蒙特卡羅方法求解π,并計(jì)算程序運(yùn)行時(shí)間。如圖2-14為蒙特卡羅方法求解π示意圖,主要求解步驟如下:隨機(jī)向單位正方形和四分之一圓范圍內(nèi)射出大量“飛鏢”點(diǎn)。計(jì)算每個(gè)點(diǎn)到圓心的距離,判別該點(diǎn)在圓內(nèi)或者圓外。統(tǒng)計(jì)射中四分之一圓的總點(diǎn)數(shù)。當(dāng)總隨機(jī)點(diǎn)數(shù)量足夠大,點(diǎn)就能充分均勻覆蓋整個(gè)單位正方形(邊長和面積均為1)和四分之一圓(半徑為1,面積為π/4)范圍。射中圓內(nèi)的點(diǎn)數(shù)除以總點(diǎn)數(shù)的比值=四分之一圓與單位正方形面積的比值,比值數(shù)為π/4。fromrandomimportrandom#導(dǎo)入random庫函數(shù)importmath#導(dǎo)入math模塊importtime#導(dǎo)入time模塊start=time.time()#記錄程序開始運(yùn)行時(shí)間到startpoints=200000#設(shè)置產(chǎn)生離散點(diǎn)總數(shù)hits=0.0#設(shè)置射中四分之一圓的總點(diǎn)數(shù)初值forninrange(1,points+1):#產(chǎn)生200000個(gè)總離散點(diǎn)x=random();y=random()#產(chǎn)生200000個(gè)隨機(jī)離散點(diǎn)坐標(biāo)d=math.hypot(x,y)#求離散點(diǎn)到原點(diǎn)的距離,等價(jià)d=math.sqrt(x*x+y*y)ifd<=1.0:#判別該離散點(diǎn)是否位于四分之一圓內(nèi)hits+=1 #計(jì)數(shù)射中四分之一圓的總點(diǎn)數(shù)pi=4*hits/points#4*π/4得到π值#輸出π值及當(dāng)前時(shí)間與程序開始運(yùn)行時(shí)間差(單位:秒)print("PI=",pi,";程序運(yùn)行時(shí)間",time.time()-start,"秒")運(yùn)行輸出:PI=3.14412;程序運(yùn)行時(shí)間0.09133172035217285秒2.4列表、元組、字典與集合數(shù)據(jù)類型2.4.1序列類型Python內(nèi)置序列類型最常用的是列表、元組和字符串。序列中的每個(gè)元素都有屬于自己的編號(索引),自左起索引值從0開始遞增。序列可進(jìn)行索引、截?。ㄇ衅?、加和乘等操作。此外,Python內(nèi)置了求序列的長度、最大和最小值元素的方法。1.序列類型索引操作以序列類型中字符串為例,說明序列的索引操作:執(zhí)行day="Sunday周日"后,如圖2-15所示:索引值自左起從0開始正向遞增,也可以從右向左反向遞減,最后一個(gè)元素索引值為-1。day[0]等價(jià)于day[-8]等于'S'、day[7]等價(jià)于day[-1]都等于'日'、day[3]等價(jià)于day[-5]等于'd'。2.遍歷序列元素通過序列迭代法和序列索引迭代法可以遍歷序列中的元素?!纠?-15】分別使用序列迭代法和序列索引迭代法,編程實(shí)現(xiàn)查看指定字符串中字符的ASC碼功能。str1=input('pleaseinputastring:')print("使用序列迭代法,查看指定字符串中字符的ASC碼:")forxinstr1:print('char:',x,',ASCcode:',ord(x))print("使用序列索引迭代法,顯示字符串中字符的ASC碼:")foriinrange(len(str1)):print('char:',str1[i],',ASCcode:',ord(str1[i]))運(yùn)行結(jié)果:pleaseinputastring:Python<回車>使用序列迭代法,查看指定字符串中字符的ASC碼:char:PASCcode:80char:yASCcode:121char:tASCcode:116char:hASCcode:104char:oASCcode:111char:nASCcode:110使用序列索引迭代法,顯示字符串中字符的ASC碼:char:PASCcode:80char:yASCcode:121char:tASCcode:116char:hASCcode:104char:oASCcode:111char:nASCcode:1102.4.2列表Python語言中列表(list)也是一種序列類型。列表用方括號將列表中的元素括起來。列表中元素之間以逗號進(jìn)行分隔。列表的各數(shù)據(jù)項(xiàng)可允許是不同的類型??梢酝ㄟ^賦值創(chuàng)建列表,例如:

List1=[1,2,3,True];L2=["one","two","three","four"];L3=[3,4.5,"abc"],則L3[0]和L3[2]的值分別為3和'abc'??梢詫⒍嗑S列表(類似其它編程語言中的多維數(shù)組)視為列表的嵌套,即多維列表的元素值也是一個(gè)列表。二維列表比一維列表多一個(gè)索引,可以如下格式訪問二維列表的元素:列表名[行索引號][列索引號]例如:定義1個(gè)3行3列的二維列表如下:List4=[["i5","16GB","512GB"],["i7","32GB","1TB"],["i9","64GB","2TB"]]如圖2-16為二維列表List4的元素存儲(chǔ)圖,則:List4[0][1]的存儲(chǔ)值為"16GB"、

List4[1][2]的存儲(chǔ)值為"1TB",使用語句:List4[2][2]="4TB"可將List4[2][2]的值由"2TB"賦值成"4TB"。設(shè)列表s=[1,2,3],對列表的常?操作?法見表2-10。remove()?法與del語句的區(qū)別說明:用del命令刪除列表中指定下標(biāo)的元素,而remove(x)?法用于刪除列表中指定值為x的元素。例如要?jiǎng)h除L=["one","two","three","four"]中下標(biāo)為第0個(gè)元素(值為"one"),可使用delL[0]或L.remove("one")完成。此外,列表生成式可以簡化用循環(huán)語句生成列表。例如,生成一個(gè)由1到6的立方數(shù)所組成的L列表的列表生成式如下:

L=[x**3forxinrange(1,7)]#生成L為[1,8,27,64,125,216]假如要生成一個(gè)由1到6之間奇數(shù)的立方數(shù)所組成列表,其生成式需再加個(gè)條件篩選:L=[x**3forxinrange(1,7)ifx%2!=0]#不能被2整除的為奇數(shù),L為[1,27,125]【例2-16】編程實(shí)現(xiàn)防脈沖干擾的平均值數(shù)字濾波算法,程序使用隨機(jī)函數(shù)連續(xù)產(chǎn)生6個(gè)[5,255]之間的隨機(jī)數(shù)(用來模擬采集到的6個(gè)數(shù)據(jù))。該算法中心思想是對連續(xù)采集到的n個(gè)數(shù)據(jù)(本例n取6),去掉其中最大和最小的2個(gè)數(shù)據(jù),將剩余數(shù)據(jù)求平均值作為本次采集數(shù)輸出。importrandom#導(dǎo)入random模塊frommathimport*#導(dǎo)入數(shù)學(xué)庫中所有函數(shù)data=[]#初始化data為空列表s=0foriinrange(1,7):#設(shè)連續(xù)采集6個(gè)數(shù)據(jù)x=random.randrange(5,255)#產(chǎn)生1個(gè)[5,255]之間的隨機(jī)數(shù)模擬采集到的數(shù)據(jù)data.append(x)#采集到的數(shù)據(jù)添加到列表dataprint(x,end="")s+=x #求所有采集到的數(shù)據(jù)和print("最大數(shù):",max(data),",最小數(shù):",min(data))#調(diào)用求列表中最大、最小數(shù)函數(shù)print("去除最大數(shù)、最小數(shù)后的平均數(shù):",(s-max(data)-min(data))//4)運(yùn)行輸出:1456311919513684最大數(shù):195,最小數(shù):63去除最大數(shù)、最小數(shù)后的平均數(shù):1212.4.3元組元組(tuple)也屬于序列類型,它用一對圓括號作為邊界將元素括起來,其中的元素以逗號分隔。元組中的元素類型也可以不同,元組與列表的主要不同之處在于元組的元素值不能修改??梢酝ㄟ^賦值創(chuàng)建元組,例如:tup1=(1,0,False,True)tup2=("Monday","Tuesday","Wednesday","Friday","Saturday","Sunday")tup3="a","b","c","1","2"#可以省略括號,等價(jià):tup3=("a","b","c","1","2")Tup4=("Monday",)#創(chuàng)建含一個(gè)元素的元組時(shí),必須要加一個(gè)逗號,否則被視作字符串元組元素值除不能修改外,也無法對元組進(jìn)行添加或刪除元素的操作,但可以使用del命令刪除整個(gè)元組,例如:delTup4。2.4.4序列的公共基本操作1.序列切片操作序列切片操作用于訪問一定范圍內(nèi)的元素,可通過切片操作生成一個(gè)新的序列。語法格式如下:序列名[切片開始位置:切片結(jié)束位置:步長]其中,開始位置、結(jié)束位置及步長的默認(rèn)值分別為序列的起始位置(索引值為0)、結(jié)束位置(索引值為結(jié)束位置-1)及1。表2-11序列切片操作示例對照表。2.序列連接、重復(fù)與包含判斷操作表2-12為序列的連接、重復(fù)(加和乘)與判斷是否包含的操作示例。【例2-17】運(yùn)用序列的乘運(yùn)算輸出如下圖所示的圖形:####################################

#############foriinrange(7):#輸出6行,i取0到5print(""*(10-i),"#"*(2*i+1))#逐行輸出10-i個(gè)空格,2*i+1個(gè)“#”3.序列的內(nèi)置操作函數(shù)表2-13為序列的常用內(nèi)置操作函數(shù)。4.序列類型間的轉(zhuǎn)換表2-14所示為字符串、列表、元組間的轉(zhuǎn)換函數(shù)與方法列表?!纠?-18】編寫猜英語單詞游戲程序。要求隨機(jī)抽取單詞庫中的一個(gè)單詞,將該單詞中的所有字母隨機(jī)選取后亂序重組,由玩家從被亂序的字母組合中猜出正確的單詞。importrandom#創(chuàng)建單詞庫元組Lib=("class","word","find","apple","handbook","computer","information"\,"master","semester","paper","homework","break","smart","system")print("猜單詞游戲:把亂序字母組合成一個(gè)正確的單詞")Continue1="y"whileContinue1.lower()=="y":#把輸入的字母轉(zhuǎn)換成小寫,判別是否輸入"y"chosen_word=random.choice(Lib)#從單詞庫中隨機(jī)挑出一個(gè)單詞到chosen_wordcorrect_word=chosen_word#保存正確的單詞到變量correct_wordchanged_word=""#創(chuàng)建亂序后單詞changed_word為空字符串whilechosen_word: #如chosen_word未被刪成空串(False)則繼續(xù)循環(huán)亂序組詞#根據(jù)選取單詞chosen_word長度,隨機(jī)產(chǎn)生單詞中亂序字母位置pospos=random.randrange(len(chosen_word))changed_word+=chosen_word[pos]#將pos位置字母添加組合到亂序后單詞#通過切片,將chosen_word中pos位置字母從chosen_word中刪除chosen_word=chosen_word[:pos]+chosen_word[(pos+1):]print("亂序后單詞:",changed_word)guess_word=input("\n請輸入您猜的單詞:")

whileguess_word!=correct_wordandguess_word!="":print("您猜錯(cuò)了!")Continue2=input("還要繼續(xù)猜這個(gè)單詞嗎(Y/N)?")ifContinue2.lower()=="n":#把輸入的字母轉(zhuǎn)換成小寫,判別是否輸入"n"break#不再繼續(xù)猜這個(gè)單詞,退出循環(huán)else:guess_word=input("繼續(xù)猜:")#繼續(xù)猜這個(gè)單詞

ifguess_word==correct_word:print("您猜對了!")Continue1=input("\n是否繼續(xù)猜單詞游戲(Y/N)?")#是否繼續(xù)游戲運(yùn)行結(jié)果:猜單詞游戲:把亂序字母組合成一個(gè)正確的單詞亂序后單詞:nfmnoaiorit請輸入您猜的單詞:ifnmnoiotrr<回車>您猜錯(cuò)了!還要繼續(xù)猜這個(gè)單詞嗎(Y/N)?y<回車>繼續(xù)猜:information<回車>您猜對了!是否繼續(xù)猜單詞游戲(Y/N)?2.4.5字典及其操作除序列數(shù)據(jù)結(jié)構(gòu)類型外,Python還提供了字典和集合這樣的數(shù)據(jù)結(jié)構(gòu),它們屬于無順序的數(shù)據(jù)集合體,因此不能通過位置索引號來訪問其中的數(shù)據(jù)元素。字典是Python中唯一內(nèi)建的映射類型,可用于實(shí)現(xiàn)通過數(shù)據(jù)來查找關(guān)聯(lián)數(shù)據(jù)的功能。字典也被稱作關(guān)聯(lián)數(shù)組或哈希表,它是一種可變?nèi)萜髂P?,且可存?chǔ)任意類型對象,如字符串、數(shù)字、元組等。字典用大括號包含所有元素,每個(gè)元素都包含兩部分:鍵和值,每個(gè)元素的鍵和值用冒號分隔(key:value)組成“鍵:值”對,“鍵:值”對是無序集合,元素之間用逗號分隔。字典中元素的“鍵”必須是唯一的,但“值”是可重復(fù)的。1.創(chuàng)建字典字典中各元素的鍵名只能是字符串、元組或數(shù)字,不能是列表。創(chuàng)建字典實(shí)例如下:dict1={}#創(chuàng)建一個(gè)空字典dict2={'Name':'李四','Age':19,'Dept':'計(jì)算機(jī)'}或者可以用內(nèi)置函數(shù)dict()創(chuàng)建同上的字典:dict1=dict()#創(chuàng)建一個(gè)空字典dict2=dict(Name='李四',Age=19,Dept='計(jì)算機(jī)')2.訪問字典里的值訪問字典里的值時(shí),把相應(yīng)的鍵放入方括號里,例如:print(dict2['Name'],dict2['Age'],dict2['Dept'])#輸出dict2字典的值:'李四'、19、'計(jì)算機(jī)'3.修改字典dict2['Age']=20 #dict2字典中已存在'Age'鍵,則更新“鍵:值”對,'Age'值改為20dict2['Class']="19級2班" #因dict2字典中無'Class'鍵,則增加新的“鍵:值”對print(dict2['Age'],dict2['Class'])#輸出:20及'19級2班'表2-15為字典的常用方法、內(nèi)置函數(shù)與包含判別運(yùn)算列表(設(shè)D={'Name':'李四','Age':19,'Dept':'計(jì)算機(jī)'})。D.copy()與直接賦值字典變量的區(qū)別說明:執(zhí)行c1=D.copy();c2=D后c1返回字典新副本,c2也指向字典D(c2存放字典D的存儲(chǔ)地址,也稱引用),但沒有創(chuàng)建字典新副本,且

c1、c2都返回與D相同的字典內(nèi)容:{'Name':'李四','Age':19,'Dept':'計(jì)算機(jī)'}。再執(zhí)行:id(D);id(c1);id(c2)后可分別返回存儲(chǔ)地址2253134645272、2253134053448、2253134645272(每次運(yùn)行時(shí)存儲(chǔ)地址可不同,但id(D)與id(c2)顯示的地址應(yīng)相同)。可見,D與c2分配相同的字典存儲(chǔ)地址:2253134645272;而c1分配新字典存儲(chǔ)地址:2253134053448?!纠?-19】編寫學(xué)生成績管理程序,字典中包含姓名Name、課程Course和成績Score。要求輸出全體同學(xué)信息和課程不及格同學(xué)的信息。students=[{'Name':'李四','Score':79,'Course':'Python程序設(shè)計(jì)'},{'Name':'張三','Score':88,'Course':'Java程序設(shè)計(jì)'},{'Name':'趙五','Score':50,'Course':'數(shù)據(jù)庫技術(shù)'},{'Name':'王六','Score':96,'Course':'C程序設(shè)計(jì)'},{'Name':'周贊天','Score':55,'Course':'Python程序設(shè)計(jì)'},{'Name':'任平','Score':67,'Course':'數(shù)據(jù)庫技術(shù)'},{'Name':'馬非','Score':49,'Course':'Python程序設(shè)計(jì)'}]#初始化學(xué)生列表print("選修課程全體同學(xué)信息:")forstuinstudents:forkey,iteminstu.items():#輸出students列表中每個(gè)字典元素項(xiàng)(key,item)print(key,item)print("\n選修課程不及格同學(xué)信息:")forstuinstudents:ifstu['Score']<60:print(stu['Name'],stu['Score'],stu['Course'])

運(yùn)行結(jié)果:選修課程全體同學(xué)信息:Name李四Score79CoursePython程序設(shè)計(jì)Name張三Score88CourseJava程序設(shè)計(jì)Name趙五Score50Course數(shù)據(jù)庫技術(shù)Name王六Score96CourseC程序設(shè)計(jì)Name周贊天Score55CoursePython程序設(shè)計(jì)Name任平Score67Course數(shù)據(jù)庫技術(shù)Name馬非Score49CoursePython程序設(shè)計(jì)選修課程不及格同學(xué)信息:趙五50數(shù)據(jù)庫技術(shù)周贊天55Python程序設(shè)計(jì)馬非49Python程序設(shè)計(jì)2.4.6集合及其操作集合類型(set)是一組對象的集合,同一個(gè)集合可以由各種不可變類型對象的元素組成,元素間無序且不重復(fù)。集合的基本功能是進(jìn)行成員關(guān)系測試和刪除重復(fù)元素。1.創(chuàng)建集合可以使用大括號或者set()函數(shù)創(chuàng)建集合。為與創(chuàng)建一個(gè)空字典相區(qū)別,創(chuàng)建一個(gè)空集合s必須用set()而不是

s={},因?yàn)閧}已被用于創(chuàng)建一個(gè)空字典:s=set()#創(chuàng)建一個(gè)空集合創(chuàng)建一個(gè)專業(yè)Dept集合實(shí)例如下:Dept={'Computer','Art','Math','Chinese','Art','Automation','Trade'}也可以用函數(shù)set()創(chuàng)建集合:a=set('abc123')#等價(jià)于a={'1','3','c','a','2','b'}b=set(range(6))#創(chuàng)建集合b={0,1,2,3,4,5}2.訪問集合元素print(Dept)#輸出集合中的重復(fù)元素'Art'會(huì)被自動(dòng)去掉集合對象的主要方法與運(yùn)算列表如表2-16所示(設(shè)集合a={1,2,3,'a','b','c'},b={0,1,2,3,4,5})。2.5函數(shù)與模塊2.5.1函數(shù)1.函數(shù)的定義與調(diào)用函數(shù)是指一段可以直接被其它程序或代碼引用的具有特定獨(dú)?功能的代碼塊。函數(shù)可以被重復(fù)調(diào)用,通過更高效地組織和簡化代碼,以實(shí)現(xiàn)代碼重用。函數(shù)定義格式如下:

def函數(shù)名(形式參數(shù)):

函數(shù)體return表達(dá)式或者返回值函數(shù)名必須符合Python標(biāo)識(shí)符的規(guī)定;形式參數(shù)(形參)可選,即函數(shù)參數(shù)可有可無,形參間用逗號分隔;形參不代表任何具體的值,只有在函數(shù)調(diào)用時(shí),通過實(shí)際參數(shù)(實(shí)參)把具體的值賦給形參;函數(shù)必須先定義后使?;函數(shù)體是語句序列,左端必須縮進(jìn)空格;當(dāng)函數(shù)有多個(gè)參數(shù)需要傳遞時(shí),實(shí)參按照位置順序一一對應(yīng)地把值傳遞給形參;函數(shù)通過return語句返回值(多個(gè)返回值以元組形式返回),如沒有return語句則返回None(空值)?!纠?-20】定義函數(shù)circle,要求輸入半徑后計(jì)算出圓的面積。#方法一:直接在函數(shù)中輸出結(jié)果,無需返回圓面積defcircle(r):#circle函數(shù)定義,形式參數(shù)r無需定義類型area=3.14*r*r#函數(shù)中的語句必須縮進(jìn)相同空格數(shù)print("半徑為",r,"的圓面積為:",area)#直接在函數(shù)中輸出結(jié)果,無需返回圓面積#主程序開始r=eval(input("請輸入半徑:"))#主程序與def都無縮進(jìn)空格circle(r)#函數(shù)調(diào)用,實(shí)參r的值傳遞給形參r(實(shí)參r與形參r是2個(gè)變量,可不同名)程序運(yùn)行結(jié)果:請輸入半徑:2<回車>半徑為2的圓面積為:12.56#方法二:函數(shù)返回計(jì)算出的圓面積值到主程序再輸出結(jié)果defcircle(r):#circle函數(shù)定義,形式參數(shù)r無需定義類型area=3.14*r*r#函數(shù)必須縮進(jìn)相同空格數(shù)returnarea#返回圓面積area的值到主程序#主程序x=eval(input("請輸入半徑:"))s=circle(x)#函數(shù)調(diào)用,實(shí)參x的值傳遞給形參r,接受函數(shù)返回的圓面積值并賦給sprint("半徑為",x,"的圓面積為:",s)方法二程序運(yùn)行結(jié)果同方法一。2.返回多個(gè)函數(shù)值當(dāng)有多個(gè)函數(shù)返回值時(shí),可通過以下方式實(shí)現(xiàn):1)?個(gè)函數(shù)可以含兩個(gè)以上return語句,以返回兩個(gè)以上不同的值,程序執(zhí)行到任何一個(gè)return語句后,返回對應(yīng)return語句的返回值。2)return語句可以返回列表、元

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論