Python數據分析及應用 課件 第3、4章 程序的控制結構、函數_第1頁
Python數據分析及應用 課件 第3、4章 程序的控制結構、函數_第2頁
Python數據分析及應用 課件 第3、4章 程序的控制結構、函數_第3頁
Python數據分析及應用 課件 第3、4章 程序的控制結構、函數_第4頁
Python數據分析及應用 課件 第3、4章 程序的控制結構、函數_第5頁
已閱讀5頁,還剩60頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Python數據分析及應用第三章程序的控制結構目錄

3.1程序的基本結構3.2程序的選擇結構3.3程序的循環結構3.4程序的異常處理3.5Random庫的使用知識目標:掌握程序的三種基本結構:順序結構、選擇結構、循環結構,掌握單分支、二分支和多分支三種選擇結構,掌握for循環、while循環兩種循環結構。技能目標:理解分支的概念及程序控制的關系,掌握二分支決策方法,掌握多分支決策方法,掌握for循環的使用方法,掌握while循環的使用方法。素質目標:具備一定的決策能力和規劃能力,具備發展的眼光,培養全局思維,能夠合理規劃自己的職業生涯。學習目標

稅收取之于民、用之于民,我們在履行納稅的法定義務時,也在享受稅收給整個社會帶來的積極影響。以個人所得稅為例,目前個人所得稅的起征點是5000,并且采用差額累進制。只有收入超過5000元時我們才需要繳納個人所得稅,收入越高需要繳納的稅款越多,并且國家還考慮到撫養小孩和贍養老人的壓力,提高了個人所得稅的起征點。目前,個人工資扣稅標準規定:月薪5000元以下免稅,5000-8000元稅率為3%,8000-17000元為10%,17000-30000元為20%,30000-40000元為25%,40000-60000元為30%,60000-85000元為35%,85000元以上為45%。如何設計一個Python程序計算個人所得稅?本章導讀

結構化編程鼓勵將復雜問題分解成一系列簡單、明確的步驟,使得代碼易于理解。清晰的模塊劃分和邏輯流程使得整個程序的結構清晰,目標明確,便于理解和維護。采用結構化程序設計方法可以顯著提高程序的可讀性、可維護性、可靠性、效率以及適應變化的能力。Python的程序控制結構主要包括順序結構、選擇結構(分支結構)和循環結構。這三種控制結構也是結構化程序設計的核心,與之相對的是面向對象程序設計。C語言就是結構化語言,而C++、Java或者Python等都是面向對象的語言。調試Python程序時,經常會報出一些異常。一方面可能是寫程序時由于疏忽或者考慮不全造成了錯誤,這時就需要根據異常分析程序結構,改正錯誤;另一方面,有些異常是不可避免的,但我們可以對異常進行捕獲處理,防止程序終止。本章導讀1.順序結構順序結構的執行順序是自上而下,依次執行。順序結構的程序設計是最簡單的,它表示程序按照代碼的書寫順序從上到下依次執行,只要按照解決問題的順序寫出相應的語句就行。3.1程序的基本結構程序由語句構成,根據項目或者算法的實際需求執行語句,程序的具體執行是由流程控制語句實現的。結構化程序設計分三種基本結構:順序結構、選擇結構(分支結構)、循環結構。采用結構化程序設計方法,程序結構清晰,易于閱讀、測試、排錯和修改。由于每個模塊執行單一功能,模塊間聯系較少,使程序編制比過去更簡單,程序更可靠,而且增加了可維護性,每個模塊可以獨立編制、測試。ABC圖3-1順序結構的流程圖2.選擇結構選擇結構(分支結構)是程序根據條件表達式的值來決定執行哪一部分的代碼。顧名思義,當程序到了一定的處理過程時,遇到了很多分支,無法按直線走下去,程序的處理步驟出現了分支,它需要根據某一特定的條件選擇其中的一個分支執行,選擇結構有單分支、二分支和多分支三種形式。3.1程序的基本結構

圖3-2選擇結構的流程圖AB條件a)FTA條件b)FT3.循環結構循環結構用于重復執行一段代碼,直到滿足某個條件為止。語句不斷的重復,被稱作循環,循環結構通常用來表示反復執行一個程序或某些操作的過程,直到某條件為假(或為真)時才可終止循環。在循環結構中最主要的是:什么時候可以執行循環?出現哪些操作需要循環執行?3.1程序的基本結構圖3-3循環結構的流程圖分支A條件FT3.2程序的選擇結構選擇結構顧名思義,當程序到了一定的處理過程時,遇到了很多分支,無法按直線走下去,程序的處理步驟出現了分支,它需要根據某一特定的條件選擇其中的一個分支執行。選擇結構有單一條件分支選擇結構(if)、二條件分支選擇結構(else從句)、多條件分支選擇結構(elif子句)三種形式。在Python中,選擇結構通常使用if、elif和else語句來實現。這些語句允許程序根據條件測試的結果執行不同的代碼塊。在選擇結構中,if語句用來檢驗一個條件,如果條件為真,我們運行一塊語句(稱為if-塊),否則我們處理另外一塊語句(稱為else-塊),如果有多個分支選擇,再根據分支條件,選擇對應的語句塊處理(稱為elif-塊)。else從句和elif子句是可選的。選擇結構由三部分組成:關鍵字本身,用于判斷結果真假的條件表達式,以及當表達式為真(True)或者非零時執行的代碼塊。3.2程序的選擇結構選擇結構顧名思義,當程序到了一定的處理過程時,遇到了很多分支,無法按直線走下去,程序的處理步驟出現了分支,它需要根據某一特定的條件選擇其中的一個分支執行。選擇結構有單一條件分支選擇結構(if)、二條件分支選擇結構(else從句)、多條件分支選擇結構(elif子句)三種形式。在Python中,選擇結構通常使用if、elif和else語句來實現。這些語句允許程序根據條件測試的結果執行不同的代碼塊。在選擇結構中,if語句用來檢驗一個條件,如果條件為真,我們運行一塊語句(稱為if-塊),否則我們處理另外一塊語句(稱為else-塊),如果有多個分支選擇,再根據分支條件,選擇對應的語句塊處理(稱為elif-塊)。else從句和elif子句是可選的。選擇結構由三部分組成:關鍵字本身,用于判斷結果真假的條件表達式,以及當表達式為真(True)或者非零時執行的代碼塊。3.2程序的選擇結構選擇結構當條件為真時,執行相應的代碼塊。如何判斷條件的真假?在Python中,任何非零,非空對象都是真,除真和None以外其他的都是假(False)。條件判斷使用關系運算符和邏輯運算符來表示。Python中的比較運算符,如表3-1所示;Python中的邏輯運算符,如表3-2所示。操作符描述x

==

yx等于yx!=

yx不等于yx>

yx大于yx<

yx小于yx>=

yx大于等于yx<=

yx小于等于yx

is

yx和y是同一個對象x

isnot

yx和y不是同一個對象x

in

yx是y的成員x

notin

yx不是y的成員表3-1“Python中的比較運算符表3-1“Python中的比較運算符運算符邏輯表達式描述andxandy布爾"與"-如果x為False,xandy返回False,否則它返回y的計算值orxory布爾"或"-如果x是True,它返回True,否則它返回y的計算值notnotx布爾"非"-如果x為True,返回False。如果x為False,它返回True3.2.1單分支選擇結構3.2程序的選擇結構if語句是最基本的條件判斷結構,用于測試一個條件是否為真(True)。如果條件為真,則執行緊跟在if后面的代碼塊。單分支選擇結構的if語句語法格式如下:if<條件>:<語句塊1>if語句根據給出的條件,決定下一步怎么做?如果條件為真(True),就執行語句塊1中的代碼,為假(False)就不執行語句塊1中的代碼。無論條件為真或者為假,控制都會轉到if語句后的下一條語句。實例3-1計算個人所得稅(單分支示例),假設月薪5000元以上稅率為3%。salary=eval(input("請輸入月薪:"))tax=0ifsalary>5000:tax=salary*0.03income=salary-taxprint("月薪:{}元,本月繳稅:{}元,實際收入:{}元".format(salary,tax,income))程序運行結果:請輸入月薪:6899月薪:6899元,本月繳稅:206.97元,實際收入:6692.03元在這個程序中,用戶輸入月薪,然后判斷月薪是否大于5000元,如果月薪大于5000元,計算所得稅為月薪的3%。在這個例子中,使用eval(input())語句函數取得用戶輸入的月薪。3.2.2二分支選擇結構3.2程序的選擇結構二分支選擇結構增加了else語句,根據判斷條件結果而選擇不同向前路徑的運行方式。if-else語句用于測試一個條件,如果該條件為真,則執行if代碼塊;否則,執行else代碼塊。在實例3-1計算個人所得稅(單分支示例)中,用戶輸入月薪,然后判斷月薪是否大于5000元,如果月薪大于5000元,使得if語句的條件為真,程序執行語句塊1中的代碼,計算所得稅為月薪的3%。如果月薪小于或者等于5000元,可以用else語句增加另外的選擇。二分支選擇結構的if-else語句語法格式如下:if<條件>:<語句塊1>else:<語句塊2>實例3-2計算個人所得稅(二分支示例),假設月薪5000元以上稅率為3%,月薪小于或者等于5000元稅率為0。salary=eval(input("請輸入月薪:"))ifsalary>5000:tax=salary*0.03else:tax=0income=salary-taxprint("月薪:{}元,本月繳稅:{}元,實際收入:{}元".format(salary,tax,income))程序運行結果:請輸入月薪:4500月薪:4500元,本月繳稅:0元,實際收入:4500元二分支選擇結構緊湊形式的if-else語句語法格式如下:<表達式1>if<條件>else<表達式2>實例3-3計算個人所得稅(二分支緊湊形式示例),假設月薪5000元以上稅率為3%,月薪小于或者等于5000元稅率為0。salary=eval(input("請輸入月薪:"))print("本月繳稅:",salary*0.03)if(salary>5000)elseprint("本月繳稅:",0)程序運行結果:請輸入月薪:6899本月繳稅:206.973.2.3多分支選擇結構二分支選擇結構的if-else語句只有兩種選擇,如果有多個條件需要多種選擇,可以使用elif語句。elif語句(是elseif的縮寫),它檢查多個表達式是否為真,并在為真時執行特定代碼塊中的代碼。如果所有的if和elif條件都不滿足,則執行最后的else部分。和else一樣,elif聲明是可選的,不同的是,if語句后最多只能有一個else語句,但可以有任意數量的elif語句。3.2程序的選擇結構多分支選擇結構的if-elif-else語句語法格式如下:if<條件1>:<語句塊1>elif<條件2>:<語句塊2>……elif<條件N-1>:<語句塊N-1>else:<語句塊N>3.2.3多分支選擇結構3.2程序的選擇結構實例3-4計算個人所得稅(多分支示例)月薪5000元以下免稅,5000-8000元稅率為3%,8000-17000元為10%,17000-30000元為20%,30000-40000元為25%,40000-60000元為30%,60000-85000元為35%,85000元以上為45%。salary=eval(input("請輸入月薪:"))ifsalary<=5000:tax=0elifsalary<=8000:tax=(salary-5000)*0.03elifsalary<=17000:tax=(salary-8000)*0.1+3000*0.03elifsalary<=30000:tax=(salary-17000)*0.2+3000*0.03+9000*0.1elifsalary<=40000:tax=(salary-30000)*0.25+3000*0.03+9000*0.1+13000*0.2elifsalary<=60000:tax=(salary-40000)*0.3+3000*0.03+9000*0.1+13000*0.2+10000*0.25elifsalary<=850000:tax=(salary-60000)*0.35+3000*0.03+9000*0.1+13000*0.2+10000*0.25+20000*0.3else:tax=(salary-85000)*0.45+3000*0.03+9000*0.1+13000*0.2+10000*0.25+20000*0.3+25000*0.35income=salary-taxprint("月薪:{}元,本月繳稅:{}元,實際收入:{}元".format(salary,tax,income))程序運行結果:請輸入月薪:4500月薪:4500元,本月繳稅:0元,實際收入:4500元3.2.3多分支選擇結構如果將計算表達式中的數值預先計算出,實例3-4可以改寫為簡化形式。3.2程序的選擇結構實例3-5計算個人所得稅(多分支示例)簡化形式。salary=eval(input("請輸入月薪:"))ifsalary<=5000:tax=0elifsalary<=8000:tax=salary*0.03-150elifsalary<=17000:tax=salary*0.1-710elifsalary<=30000:tax=salary*0.2-2410elifsalary<=40000:tax=salary*0.25-3910elifsalary<=60000:tax=salary*0.3-5910elifsalary<=850000:tax=salary*0.35-8910else:tax=salary*0.45-17410income=salary-taxprint("月薪:{}元,本月繳稅:{}元,實際收入:{}元".format(salary,tax,income))程序運行結果:請輸入月薪:8000月薪:8000元,本月繳稅:90.0元,實際收入:7910.0元實例3-6判斷股票是否漲停或者跌停(多分支示例)漲停和跌停的設定是根據股票價格波動的情況來確定的。在中國A股市場中,漲停價格和跌停價格的計算分別為:漲停價格=前一個交易日收盤價×1.1跌停價格=前一個交易日收盤價×0.93.2程序的選擇結構如果某只股票的前一個交易日收盤價為10元,那么當天的漲停價為11元,跌停價為9元close=eval(input("請輸入股票的前一個交易日收盤價:"))nowprice=eval(input("請輸入股票交易價格:"))top=close*1.1low=close*0.9ifnowprice<low:print(“股票交易價格{}小于跌停價{},股票不能在當前價格交易。”.format(nowprice,low))elifnowprice==low:print(“股票交易價格{}等于跌停價{},股票交易將停盤。”.format(nowprice,low))elifnowprice==top:print(“股票交易價格{}等于漲停價{},股票交易將停盤。”.format(nowprice,top))elifnowprice>top:print(“股票交易價格{}大于漲停價{},股票不能在當前價格交易。”.format(nowprice,top))else:print(“股票可以正常交易。”.format(nowprice,top))程序運行結果:請輸入股票的前一個交易日收盤價:51請輸入股票交易價格:58股票交易價格58大于漲停價56.1,股票不能在當前價格交易。3.3 程序的循環結構程序的循環結構是編程語言中用于執行重復任務的一類控制結構。循環允許一段代碼多次執行,直到滿足某個終止條件。怎么樣才能重復多次呢?循環語句在某種條件下,循環的執行某段代碼塊,并在符合條件的情況下跳出該段循環,其目的重復的處理相同任務,Python循環語句主要有for語句和while語句。循環結構For語句While語句特殊的流程控制語句Break語句Continue語句(一)for語句基礎語法3.3.1for語句1.for語句語法格式一for迭代變量in遍歷序列:執行語句......(1)執行過程:依次將‘遍歷序列’的每一個值傳遞給‘迭代變量’,每傳遞一個值時執行一次內部語句,直至‘遍歷序列’的最后一個元素,for語句退出。(2)遍歷序列可以是字符串(str),列表(list),元組(tuple)…。實例3-7遍歷字符串。strs=”ThisisPython”forcinstrs:print(c,end="*")程序運行結果:T*h*i*s**i*s**P*y*t*h*o*n*實例3-8遍歷股票過去5個交易日的收盤價列表。closing=[52.45,55.20,53.75,56.50,53.80]forpriceinclosing:print(price)程序運行結果:52.4555.253.7556.553.8(一)for語句基礎語法3.3.1for語句2.for語句語法格式二for迭代變量inrange(start,end[,step]):

執行語句......參數說明:start:初始值(默認為‘0’)end:終止值step:步進值(默認為‘1’),即每次重復操作時比上一次操作所增長的數值。執行過程:第一步:將start值傳遞給‘迭代變量’,然后執行一次內部語句;第二步:在start的基礎上+step再次傳遞給‘迭代變量’,如果‘迭代變量’的值小于‘end’的值,則再次執行內部語句,否則退出for循環。實例3-9輸出九九乘法表。foriinrange(1,10):forjinrange(1,i+1):print("{}*{}={:2}".format(j,i,j*i),end="")print()程序運行結果:1*1=11*2=22*2=41*3=32*3=63*3=91*4=42*4=83*4=124*4=161*5=52*5=103*5=154*5=205*5=251*6=62*6=123*6=184*6=245*6=306*6=361*7=72*7=143*7=214*7=285*7=356*7=427*7=491*8=82*8=163*8=244*8=325*8=406*8=487*8=568*8=641*9=92*9=183*9=274*9=365*9=456*9=547*9=638*9=729*9=81(一)for語句基礎語法3.3.1for語句2.for語句語法格式二實例3-10輸出100以前的偶數foriinrange(0,101,2):print(i,end="")程序運行結果:02468101214161820222426283032343638404244464850525456586062646668707274767880828486889092949698100(二)else語句在循環條件正常結束后如果要執行某段代碼塊,則可以用else語句來操作。循環的正常結束后,就會觸發else語句。3.3.1for語句for-else語句可以總結成以下說明:如果依次做完了所有的事情(for正常結束),就去做其他事(執行else),若做到一半就停下來不做了(中途遇到break),就不去做其他事了(不執行else)。實例3-11for-in-else實例。foriinrange(10):print(i,end="")else:print(“循環正常結束”)程序運行結果:0123456789循環正常結束(一)while語句語法格式3.3.2while語句while循環條件:循環操作執行過程:判斷表達式,如果為真(True)則執行循環操作語句,如果為假(False)則退出while語句。循環條件最終的返回值必須是False或True。實例3-12每個月向銀行存入固定金額的錢(比如1000元),年利率是固定的3%,按月復利計算。需要多少個月才能使賬戶總額達到10,000元deposit=eval(input(“請輸入每月存款額”))rate=0.03#年利率target=eval(input(“請輸入目標總額”))total=0months=0mon_rate=rate/12whiletotal<target:total+=total*mon_rate

total+=deposit

months+=1print("需要{}個月后,賬戶總額將達到或超過{}元。".format(months,target))

程序運行結果:請輸入每月存款額:200請輸入目標總額:10000需要48個月后,賬戶總額將達到或超過10000元。只要在條件為真的情況下,while語句允許重復執行一塊語句。如果條件成立(True),重復執行相同操作,條件不符合,跳出循環。(二)循環中使用else語句語法格式3.3.2while語句while循環條件:循環操作else:

執行操作實例3-13while-else實例x=3while(x>0):x-=1print("HelloWorld")else:print("done")程序運行結果:HelloWorldHelloWorldHelloWorlddone(一)break語句3.3.3特殊的流程控制語句break語句用于立即終止當前循環(最內層的循環),跳出循環體,并繼續執行循環之后的代碼。如果break語句出現在嵌套循環中,它將只終止最內層的循環。如果從for或while循環中終止,任何對應的循環else塊將不執行。實例3-14break語句實例forletterin'while':ifletter=='i':breakprint('當前字母為:',letter)程序運行結果:當前字母:w當前字母:h循環除了在條件不滿足的時候結束外還可以選擇在某些條件下結束循環,結束循環共有兩個命令break、continue。break語句用來終止循環語句,程序控制跳出循環執行循環體外的下一條語句。Continue語句用來結束本次循環,緊接著執行下一次的循環(二)continue語句3.3.3特殊的流程控制語句continue語句用于跳過當前循環的剩余部分,并立即開始下一次循環。continue之后的代碼在當次循環中不會被執行實例3-15continue語句實例forletterin'while':ifletter=='i':

continueprint('當前字母:',letter)程序運行結果:當前字母:w當前字母:h當前字母:l當前字母:e用break關鍵字終止當前循環就不會執行當前的else語句,而使用continue關鍵字快速進入下一論循環,或者沒有使用其他關鍵字,循環的正常結束后,就會觸發else語句。只有循環完所有次數,才會執行else。break可以阻止else語句塊的執行。break是用于完全終止循環,而continue是用于跳過當前迭代的剩余部分并繼續下一次迭代。正確選擇使用break或continue可以有效地控制循環流程,使程序邏輯更加靈活和高效。3.4 程序的異常處理什么是異常?異常是Python對象,表示一個錯誤。當Python腳本發生異常時我們需要捕獲處理它,否則程序會終止執行。在程序運行過程中,總會遇到各種各樣的錯誤,有的錯誤是程序編寫有問題造成的。我們如何處理異常,使程序正常運行?我們可以使用try…except語句來處理異常。我們把所有可能引發錯誤的語句放在try-語句塊中,然后在except語句塊中處理所有的錯誤和異常。except語句塊可以專門處理單一的錯誤或異常,或者一組包括在圓括號內的錯誤/異常。如果沒有給出錯誤或異常的名稱,它會處理所有的錯誤和異常。對于每個try-語句塊,至少都有一個相關聯的except-語句塊。如果某個錯誤或異常沒有被處理,默認的Python處理器就會被調用。它會終止程序的運行,并且打印一個消息,我們已經看到了這樣的處理。還可以讓try…except關聯上一個else從句。當沒有異常發生的時候,else從句將被執行。BaseException所有異常的基類,父類Exception常規錯誤的基類StandardError所有的內建標準異常的基類,標準化錯誤ImportError導入模塊錯誤ArithmeticError所有數值計算錯誤的基類FloatingPointError浮點計算錯誤AssertionError斷言語句失敗AttributeError對象沒有這個屬性Warning警告的基類警告類也可以自定義異常。系統定義的異常:1.異常處理的基本使用3.4 程序的異常處理異常處理語句語法格式一:try:<語句塊1>except<異常類型>:<語句塊2>程序首先執行語句塊1,如果輸入有誤,接著執行語句塊2。如果輸入沒有錯誤,執行try…except語句的后續語句。實例3-16異常處理示例try:num=eval(input("請輸入股票買入價格:"))print(num**2)except:print("輸入不是一個數值!")程序運行結果:請輸入股票買入價格:wy輸入不是一個數值!2.異常處理的高級使用3.4 程序的異常處理異常處理基本語句語法格式二:try:<語句塊1>except:<語句塊2>else:<語句塊3>finally:<語句塊4>程序首先執行語句塊1,如果輸入有誤,接著執行語句塊2。如果輸入沒有錯誤,執行else語句后的語句塊2,finally對應語句塊4一定執行,else對應語句塊3在不發生異常時執行。實例3-17異常處理的高級使用示例flag=Falsewhile(flag==False):try:num=evel(input("請輸入股票買入價格:"))print(num**2)except:print("輸入錯誤!請重新輸入股票價格!")else:flag=Truefinally:print("輸入的是數值!")程序運行結果:請輸入股票買入價格:wy輸入錯誤!請重新輸入股票價格!輸入的是數值!本章總結學習目標知識目標:掌握程序的三種基本結構(順序結構、選擇結構、循環結構),以及單分支、二分支和多分支選擇結構,還有for循環、while循環兩種循環結構。技能目標:理解分支概念與程序控制關系,掌握二分支和多分支決策方法,以及for循環和while循環的使用方法。素質目標:培養決策、規劃能力,具備全局思維,合理規劃職業生涯。程序基本結構順序結構:自上而下依次執行語句,如計算商品平均價格。多數情況下作為程序一部分與其他結構構成復雜程序。選擇結構:根據條件表達式值決定執行哪部分代碼,有單分支、二分支和多分支三種形式,通過if、elif和else語句實現。循環結構:重復執行一段代碼直到滿足條件,主要有for語句和while語句。選擇結構單分支選擇結構:if語句測試條件,為真執行緊跟代碼塊,如計算月薪大于5000元的個人所得稅。二分支選擇結構:if-else語句根據條件選擇執行代碼塊,有緊湊形式,如計算不同月薪范圍的個人所得稅。多分支選擇結構:if-elif-else語句處理多個條件選擇,如根據不同月薪范圍計算個人所得稅,還可用于判斷股票漲停或跌停情本章主要介紹了程序的控制結構相關知識,包括學習目標、程序基本結構、選擇結構、循環結構、異常處理和random庫的使用,具體內容如下:本章總結

循環結構for語句基礎語法格式一:遍歷序列,依次將元素傳遞給迭代變量并執行內部語句,遍歷序列可以是字符串、列表等。基礎語法格式二:通過指定初始值、終止值和步進值,控制循環次數,常用于輸出九九乘法表、100以前的偶數等。else語句:循環正常結束后可執行else語句塊。while語句:條件為真時重復執行語句塊,可計算每月存款達到目標總額所需月數,也可在循環中使用else語句。特殊流程控制語句break語句:立即終止當前循環(最內層),跳出循環體執行后續代碼,終止循環時不執行else語句塊。continue語句:結束本次循環,立即開始下一次循環,不執行本次循環后續代碼。異常處理異常概念:Python中異常是表示錯誤的對象,程序運行出錯時需捕獲處理,否則終止執行。處理方式基本使用:try-except語句,將可能出錯語句放try塊,出錯執行except塊處理錯誤。高級使用:try-except-else-finally語句,輸入無誤執行else塊,finally塊一定執行。random庫的使用:Python標準庫,用于生成偽隨機數。需導入random模塊,包含seed、random、randint、uniform、choice、shuffle等函數,分別用于初始化隨機數種子、生成隨機小數、整數、浮點數、從序列中隨機選元素、打亂序列元素順序等操作。課后自學的建議在學習完關于程序控制結構的內容后,為了更深入地掌握相關知識并提升編程能力,以下是一些自學建議:深入理解概念對順序結構、選擇結構(單分支、二分支、多分支)、循環結構(for循環、while循環)以及異常處理等概念進行詳細剖析,確保不僅知曉其定義,更能理解它們在程序執行流程中的作用和邏輯關系。針對每種結構,回顧文檔中的實例,自己動手在紙上或腦海中模擬程序執行過程,清晰把握每個步驟的執行順序和條件判斷依據,強化對控制結構運行機制的理解。對比分析異同細致對比不同選擇結構(如if-else和if-elif-else)在處理多種條件時的差異,包括適用場景、代碼簡潔性和可讀性等方面,分析何種情況下選擇哪種結構更為合適,以優化程序設計。深入研究for循環和while循環的特點和適用場景,例如在遍歷已知序列元素時for循環的便利性,以及在不確定循環次數但滿足特定條件時while循環的優勢,通過實際案例體會兩者的區別與聯系,靈活運用它們解決不同類型的問題。研究異常處理機制全面了解系統定義的各類異常(如BaseException、Exception、ImportError等),明確它們所代表的錯誤類型以及在程序中可能出現的場景,深入理解異常處理對于程序穩定性和健壯性的重要意義。分析try-except語句的多種用法,包括捕獲特定異常和處理多種異常的方式,思考在實際編程中如何根據可能出現的錯誤類型合理設置異常處理代碼,確保程序在遇到異常時能夠做出恰當響應,避免崩潰或產生不可預期的結果。理論鞏固課后自學的建議在學習完關于程序控制結構的內容后,為了更深入地掌握相關知識并提升編程能力,以下是一些自學建議:基礎編程練習針對每種控制結構,進行大量簡單的編程練習。例如,使用順序結構編寫計算簡單數學表達式的程序;運用選擇結構實現根據用戶輸入判斷數字大小、判斷年份是否為閏年等功能;利用循環結構編寫計算1到100的整數和、打印特定圖案(如三角形、菱形等)的程序,通過這些基礎練習熟練掌握語法規則。在練習過程中,注重代碼規范,遵循良好的命名習慣、縮進規則等,提高代碼的可讀性和可維護性,培養良好的編程風格,為后續復雜程序的編寫奠定基礎。綜合項目實踐嘗試完成一些綜合性的項目,將多種控制結構融合運用。例如,設計一個簡單的學生成績管理系統,實現輸入學生成績、計算平均分、根據成績等級進行分類統計(使用選擇結構判斷等級)、循環錄入多個學生成績(使用循環結構)等功能,通過實際項目深入理解不同控制結構之間的協作關系,提升解決實際問題的能力。參與開源項目或在線編程挑戰平臺,閱讀他人優秀代碼,學習不同的編程思路和技巧,同時接受實際問題的挑戰,鍛煉自己在復雜場景下運用程序控制結構的能力,拓寬編程視野,提高代碼質量。調試與優化程序在編寫程序過程中,主動引入錯誤,觀察程序出現的異常現象,運用所學的異常處理知識進行調試,通過分析錯誤信息、設置斷點等調試工具,精準定位問題所在并加以解決,逐漸積累調試經驗,提高解決問題的效率。對已完成的程序進行優化,思考如何改進算法、簡化代碼邏輯、提高程序運行效率,例如優化循環結構中的計算過程、減少不必要的條件判斷等,在優化過程中進一步加深對控制結構的理解,培養優化程序性能的意識和能力。實踐練習課后自學的建議在學習完關于程序控制結構的內容后,為了更深入地掌握相關知識并提升編程能力,以下是一些自學建議:定期總結歸納定期回顧自己所學的程序控制結構知識和完成的練習項目,總結在不同類型問題中各種控制結構的使用技巧和經驗教訓,梳理知識體系,形成自己的編程思維框架,便于在實際編程中快速選擇合適的控制結構解決問題。制作學習筆記或思維導圖,將重要的概念、語法規則、典型案例以及容易出錯的點進行整理和歸納,便于復習和記憶,同時也有助于發現自己知識掌握的薄弱環節,有針對性地進行強化學習。反思錯誤與不足在編程練習和項目實踐中,及時反思遇到的錯誤和問題,深入分析錯誤產生的原因,是對控制結構理解不透徹、邏輯錯誤還是其他因素導致,通過不斷反思總結避免在今后的編程中犯同樣的錯誤,逐步提高代碼質量和編程能力。對比自己編寫的代碼與優秀代碼的差異,思考如何改進自己的編程思路和方法,從代碼的簡潔性、可讀性、效率等多個角度進行評估和反思,積極尋求優化和提升的方向,不斷追求更高質量的編程實踐。總結反思35Python數據分析及應用第四章函數目錄

4.1函數的定義與調用4.1.1函數的定義

4.1.2函數的調用

4.2參數與返回值4.2.1默認參數4.2.2關鍵字參數4.2.3可變長參數4.2.4返回值4.3變量的作用域4.3.1局部變量4.3.2全局變量4.4遞歸(1)知識目標:掌握函數的定義及調用,掌握定義函數時,如何設置參數和返回值,掌握局部變量和全局變量的使用,學會應用遞歸函數來解決問題。

(2)技能目標:函數是編程中非常重要的組成部分,學會應用函數實現特定功能、提高代碼復用率、增強程序的可讀性和可維護性。

(3)素質目標:?通過學習函數的定義與使用,掌握如何使用Python解決實際問題,?同時培養邏輯思維和編程能力,?為未來的學習和職業發展奠定堅實基礎。37學習目標

函數的概念最早起源于數學領域,用于描述數學關系中的輸入與輸出。隨著計算機科學的發展,函數的概念也被引入到了計算機編程中。編程函數用于將一組相關的指令封裝在一起,形成一個可以重復使用的代碼塊。通過函數,程序員可以更高效地編寫和維護代碼,從而提高代碼的可讀性和可維護性。在Python中,使用函數可以加強代碼的復用性、減少代碼冗余,從而提高程序編寫的效率。

本章主要介紹了函數的概念、函數的分類及定義、函數的調用、返回值、函數的參數、變量的作用域及函數遞歸的使用方法等。

38本章導讀394.1函數的定義與調用

在程序設計里,函數是用來實現特定功能的可重復使用的代碼段,是用于構建更大、更復雜程序的部件。在Python中,使用函數可以加強代碼的復用性、減少代碼冗余,從而提高程序編寫的效率。

函數必須先創建(定義)才可以使用,用戶通過調用函數名來完成相應代碼段的功能,無需關心具體實現的細節,只需傳遞參數,得到函數運行的最終結果即可。相同的函數可以在一個或多個程序里多次調用。舉個例子,譬如:利用凈水器對自來水進行深度處理,假設把凈水器比作是一個函數,該函數把一步一步的對水進行過濾處理的過程封裝了起來,用戶無需關心具體的處理過程,只需要傳遞參數(自來水),然后讓凈水器自動運行,最終就可獲得處理結果(凈化后的水)。

4.1函數的定義與調用4.1.1函數的定義Python中的函數分為:內置函數、自定義函數和匿名函數。1.內置函數是系統中預先定義好的一些常用函數和方法,這些函數不需要引用庫,直接使用即可。如:數學運算類的函數(sum()、eval())、IO操作類的函數(input()、print())、標準庫中的函數(datetime庫中的today()、now())等。Python的內置函數如表4-1所示。4.1函數的定義與調用表4-1Python的內置函數表abs()delattr()hash()memoryview()set()all()dict()help()min()setattr()any()dir()hex()next()slice()ascii()divmod()id()object()sorted()bin()enumerate()input()oct()staticmethod()bool()eval()int()open()str()bytes()exec()isinstance()ord()sum()bytearray()filter()issubclass()pow()super()complex()float()iter()print()tuple()callable()format()len()property()type()chr()frozenset()list()range()vars()classmethod()getattr()locals()repr()zip()compile()globals()map()reversed()__import__()

hasattr()max()round()

4.1函數的定義與調用2.自定義函數是由用戶自己定義的。定義一個函數要使用def語句,語法格式如下:def函數名(參數1,參數2,...,參數n):

函數體(語句塊)

return值def:英文單詞define的簡寫,是定義函數的關鍵詞。

函數名:函數的名稱,必須符合Python中的命名要求,一般用小寫字母和單下畫線、數字等組合,如:my_sum、func1等。函數名后的:(冒號)必不可少。

參數:參數寫在函數名后的圓括號里,為函數體提供數據,參數個數不限,可以是0個,1個或多個。

函數體:進行一系列邏輯計算的語句塊,相對于def縮進四個空格。

返回值:函數執行完畢后返回給調用者的數據。返回值沒有類型及個數限制,若有返回值,則使用return結束函數并返回值,否則不帶return表達式相當于返回None。Python函數有兩種類型參數,一種是函數定義里的形參,一種是調用函數時傳入的實參。接下來通過一個簡單的例子,深入理解函數。4.1函數的定義與調用實例4-2編寫程序比較2個數的大小,輸出2個數的最大值。(有參函數)defmax(num1,num2):

ifnum1>num2:max=num1

elsemax=num2

returnmaxmax1=max(2,15)print("最大值是:",max1)該程序輸出結果如下:最大值是:15

在函數定義階段括號內有參數,稱為有參函數,調用時必須傳入實際參數。如果函數體代碼需要依賴外部傳入的值,必須定義為有參函數。4.1函數的定義與調用3.匿名函數

lambda函數也稱匿名函數,即沒有函數名的函數。lambda只是一個單行的表達式,函數體比def簡單很多,其語法結構如下:

lambda參數1,參數2,,...參數N:表達式

單行表達式決定了lambda函數只能完成非常簡單的功能。實例4-3lambda函數示例f=lambdax,y:x*yf(2,3)6

函數輸入參數x和y,輸出值是積x*y,并將輸出值賦給變量f,變量f成為具有乘法功能的函數。

4.1.2函數的調用

函數在定義的階段不會立即執行,而是等函數被程序調用時才執行。對實例4-2的程序執行流程分析如下:

1.程序運行時,首先跳過def塊定義的函數代碼,而從主程序的第一行,也就是圖中第5行標注的max1=max(2,15)這行開始運行,即調用函數max。2.程序在調用處暫停(圖中第5行)執行,然后跳轉到def定義的函數體的第一行,并將實參2傳遞給形參num1,實參15傳遞給形參num2,即num1=2,num2=15。4.1函數的定義與調用4.1函數的定義與調用

3.繼續執行完函數體中的所有語句,計算出max=15,再跳回到程序暫停處(圖中第5行)繼續執行,將數值15作為函數返回值,即max(2,15)=15,得到max1=15。4.繼續執行完主程序中的所有語句,輸出max1。Python函數必須先定義后調用,函數一旦定義后就可以反復調用,從而避免代碼冗余。4.2參數與返回值

4.2.1默認參數

定義函數時,如果給參數設置了默認值,當調用該函數時沒有傳遞對應的實參,就會使用這個默認值。示例如下:實例4-4默認參數示例>>>defadd(a,b=1):returna+b>>>add(2)3>>>add(2,3)54.2參數與返回值

4.2.2關鍵字參數

實參默認情況下是按位置從左至右順序傳遞給函數,而關鍵字參數通過“鍵-值”形式加以指定,允許通過變量名進行匹配,而不是通過位置,從而讓函數更加清晰。例如:實例4-5關鍵字參數示例>>>deffunc(a,b,c): print(a,b,c)>>>func(1,2,3)#順序傳遞,1傳給a,2傳給b,3傳給c1,2,3>>>func(c=3,a=1,b=2)#關鍵字參數1,2,3采用關鍵字參數后,參數通過變量名進行傳遞,參數的位置可以任意調整。4.2參數與返回值

實例4-1無參函數deffunc():

print("Pythonisinteresting!")func()該程序輸出結果如下:Pythonisinteresting!

在函數定義階段括號內沒有參數,稱為無參函數,調用時也無需傳入參數。如果函數體的代碼邏輯不需要依賴外部傳入的值,必須定義為無參函數。

這個函數的作用就是打印出一句話,但是沒有return,相當于返回的值是None。4.2參數與返回值

4.2.3可變長參數

可變長參數就是向一個函數傳遞不定個數的參數。例如,我們要定義一個函數用于計算咖啡店每單的銷售額,由于每單的咖啡品種及數量都不一樣,因此傳入的參數個數也就不同,這個時候后就可以使用可變長參數來定義函數。

可變長參數,一種在參數前加一個星號(*),數據結構為元組;另一種在參數前加兩個星號(**),數據結構為字典。示例如下:實例4-6可變長參數示例1>>>deff1(a,*args):

print(a,args)>>>f1(1,2,3,4)1(2,3,4)1按照位置傳遞給a;2、3、4被當做元組類型數據傳遞給args。4.2參數與返回值

實例4-7可變長參數示例2>>>deftest(**kwargs):

print(kwargs)

print(type(kwargs))

forkey,valueinkwargs.items():

print("{}={}".format(key,value))>>>test(name='jerry',age=18,address='kunming')該程序輸出結果為:{'age':18,'name':'jerry','address':'kunming'}<class'dict'>age=18name=jerryaddress=kunmingkwargs是一個字典,傳入的參數以鍵值對的形式存放到字典里。參數定義的順序必須是:必選參數–>默認參數–>可變長參數。4.2參數與返回值

4.2.4返回值

return語句用于結束函數,并將結果及控制權返回給調用者。執行到return語句時,會退出函數,return之后的語句不再執行。

在實際編程環境中,一些函數沒有return語句,只需要干活,不需要返回值(返回None),譬如,實例4-1定義的函數就只干活(打印語句)。但在大部分情況下,函數的運行結果需要用在其它運算中,所以函數必須返回一個結果,而不是只局限于把結果打印出來。接下來,通過幾個微實例進行分析。1.無返回值的函數實例4-8無返回值的函數示例1>>>deftest1():

print(“Iamrunningatest”)>>>a=test1()>>>print(a)該程序輸出結果為:IamrunningatestNone

上面這個函數沒有return語句,返回給變量a的是None(無返回值),None沒什么利用價值,所以無需用一個變量來存儲。通常采用以下的方式進行調用。4.2參數與返回值

實例4-9無返回值的函數示例2>>>deftest1():

print(“Iamrunningatest”)>>>test1() 該程序輸出結果為:Iamrunningatest2.有返回值的函數實例4-10有返回值的函數示例>>>defsquare_sum(a,b):c=a**2+b**2

returnc>>>s=square_sum(1,2)>>>print(s)該程序輸出結果為:54.2.4返回值

3.返回多個值

return也可以返回多個值,多個值以元組類型返回。實例4-11返回多個值的函數示例>>>deftest2():return1,2,3,4,5,6>>>a=test2()>>>print(a)該程序輸出結果為:(1,2,3,4,5,6)4.3變量的作用域

作用域就是一個變量的可用范圍,由變量名被賦值的位置所決定,根據作用域的不同可將變量分為兩類:局部變量和全局變量。4.3.1局部變量

局部變量是指定義在函數內部的變量,其作用域是局部的,只能被函數內部引用,在函數外無效。例如:實例4-12變量示例1>>>deffunc():a=123#a是局部變量print(a)>>>func()1234.3變量的作用域

局部變量只能在函數內部使用,一旦函數運行退出后,局部作用域被銷毀,局部變量就不存在了,超出函數體的范圍引用就會出錯,例如:實例4-13變量示例2>>>de

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論