# Python -- 函數Function ###### tags: `python` `九年級` >+ 目前為止,我們所寫的程式皆只是執行小型簡單的工作。 >當我們想要去進一步編寫大型程式,就必須了解一些方法 >來將大型程式分解成小片段以更好的去管理。 > >+ 如果我們遇到需要 ==**重複使用某組方法**== 的情況時, >可以透過函數來幫助我們處理這項工作。 >+ 與重複執行的**迴圈**不同,函數能幫助我們將複雜的程式分解來簡化管理 ## 一、基本函數類型 ### 函數一 : 沒有參數傳入,沒有數值傳出 :::info ```python= def A(): print("Hello!") A() ``` >輸出: >Hello! ::: ```python= #函式宣告 def A(): ``` + 上述函數透過`def`來向`python`表示我要建立一個函式 + 在`def`後方定義此函數名稱為`A` + 括弧`()`中沒有東西,代表沒有參數傳入 + 冒號`:`表示下行開始為該函式的區塊 + ==函式內部區塊從此行下方第一行縮排開始,停止縮排結束== ```python= def A(): #注意下行有縮排 print("Hello!") ``` + 可以觀察只有一行縮排,故此函式`A()`的內部僅有一行,即印出字串`Hello!` + 一般python開發環境下,函式宣告行打完後點Enter換行,就會自動幫你縮排。 否則就要自己手動打`tab`來縮排一行。 ```python= A() ``` + 當我們想要呼叫剛剛寫出的函示`A()`時,便可以在外部打`A()`呼叫函式。 + 此處呼叫函數是在函式==外部呼叫`A()`==,所以==沒有縮排==。 + 在呼叫後電腦才會執行函式`A()`中的`print("Hello!")`,將`Hello!`印出來。 ___ ### 函數二 : 參數傳入,數值傳回 :::info ```python= def A2(num): x=num+num print("傳入數字的兩倍為: ", x) return x x=A2(100) print("傳回的數值為: ",x) ``` >輸出結果: >傳入數字的兩倍為: 200 >傳回的數值為: 200 ::: ```python= def A2(num): ``` + 與函數一的`A()`不同,函式二`A2()`有一個參數傳入。 + 此函數傳入一個參數,會被內部被當作變數 `num`來使用 ```python= def A2(num): x=num+num ``` + 函數內部除了變數`num`外,還宣告了一個變數`x`,`x`為`num+num` ```python= def A2(num): ... #此處為了表達方便,用...來省略這幾行 return x ``` + 利用`return` 來從函數內部將處理過的數值傳出去 + 此處我們傳回函數內部的變數`x`之值,即`return x`。 ``` x=A2(100) ``` + 函數外部的程式主體部分,我們同樣也呼叫了一個`x`來取得函數`A()`傳回的數值 :::danger ### 注意! 函式內部的變數與函式外部的變數並不相通 |函式A2()內部空間的變數|函式外部空間的變數| |:------:|:------:| |x , num | x | + 此題中函數內部空間的變數`x`與外部空間接收`A2()`函數回傳值的`x`並不相通 + 兩邊雖然名子命名一樣,但實際視為不同,因為在不同空間被命名。 ::: :::warning ```python= def AAA(num): x=num+num y=200 return y x =-100 x2=AAA(100) print("x數值為:",x) ``` + 同學可以參考上方程式來理解: + 程式主體空間的`x`被宣告為-100 + 呼叫`AAA()`,`AAA()`內也有一個`x`。函式內部`x`為兩倍傳入的數值,即200 + 呼叫完後`AAA()`x數值印出來為何? |函式AAA()內部空間的變數|函式外部空間的變數| |:------:|:------:| | num, x, y | x, x2 | ::: ___ ### 函數三: 多個傳入與傳出 ```python= def A3(x,y,z): a=x+y+z b=(x+y+z)/3 return a,b total,avg = A3(100,80,90) print("變數total為: ",total) print("變數avg為: ",avg) ``` >輸出: >變數total為: 270 >變數avg為: 90.0 + 上方範例傳入三個參數給`A3()`並傳回兩個數值回來, + 所以我們宣告`total`與`avg`兩個變數來取得這兩個傳回的數值 ___ ## 二、 算成績函式 ### 邏輯架構 :::info <設計函式> >算成績(傳入計算所需數值) > ><函式中的函式> >>算總分數(...) >>算平均分數(...) >>算加分調整後的分數(...) <呼叫函式> >>同學A使用 算成績(...) >>同學B使用 算成績(...) >>同學C使用 算成績(...) ### 函式架構圖 ![](https://i.imgur.com/rcjhw9s.jpg) ::: ### 程式碼 ```python= #定義算成績函式名稱:getScore def getScore ( chinese, english, math, bonus): #新的函式 ,第一個功能:輸出原始總成績 totalScore(chinese, english, math) #新的函式 ,第二個功能:輸出原始平均成績 avgScore(chinese, english, math) #新的函式 ,第三個功能:輸出加分後的總成績 adjScore(chinese, english, math ,bonus) #印這行做為每次印出結果的間隔 print('------------------------') def totalScore (chinese, english, math ) : a=chinese + english + math print("你的總分數為 :",a) def avgScore (chinese, english, math ) : a= (chinese + english + math)/3 print("你的平均分數為 : ",a) def adjScore (chinese, english, math ,bonus) : a=chinese + english + math + bonus print("你的加分後的總分數為 :",a) #有個學生A getScore(100,80,60,50) #有個學生B getScore(100,80,60,40) #有個學生C getScore(10,8,60,50) ``` 輸出: >你的總分數為 : 240 你的平均分數為 : 80.0 你的加分後的總分數為 : 290 > >你的總分數為 : 240 你的平均分數為 : 80.0 你的加分後的總分數為 : 280 >你的總分數為 : 78 你的平均分數為 : 26.0 你的加分後的總分數為 : 128