# Python教學 函式def 授課老師:楊淑惠 ## :memo: 函式介紹 def在python語言中為副程式,需要呼叫才會執行,常見語法如下: ```python def 名稱(參數名稱): return 回傳內容 ``` ### Step 1: 函式呼叫 配合TQC501 題目說明:請撰寫一程式,呼叫函式compute(),該函式功能為讓使用者輸入系別(Department)、學號(Student ID)和姓名(Name)並顯示這些訊息。 範例輸入: Information Management 123456789 Tina Chen 範例輸出 Department: Information Management Student ID: 123456789 Name: Tina Chen 函式跟之前學過的一樣,差在於函式屬於副程式,如果沒有做「呼叫」他並不會執行 程式碼: ```python def compute(): #def宣告副程式 括號內參數名稱可暫時先不打 Department=input() StudentID=input() Name=input() print("Department: %s",%Department) print("Student ID: %s",%StudentID) print("Name: %s",%Name) #以上是要執行的程式,但如果打到這邊電腦並不會做任何動作,需要呼叫 compute() #這是呼叫的方式,只要把上方的名稱打上去就好 ``` ### Step 2: 參數值 回傳值 參數是在函式中加入參數,例如 函式計算a+b ,那函式中就加入a,b,而計算a+b完後,回傳a+b,範例程式如下: ```python def compute(a,b): #宣告函式且加入參數a,b return a+b #回傳a+b a=eval(input()) b=eval(input()) #輸入a,b後,會把a,b的值加入到compute c=compute(a,b) #呼叫compute的函式,並且a+b的回傳值給c print(compute(a,b)) #呼叫compute的韓式,並且印出a+b的回傳值 ``` 配合 TQC502 題目說明: 題目說明:請撰寫一程式,將使用者輸入的兩個整數作為參數傳遞給一個名為compute(x, y)的函式,此函式將回傳x和y的乘積。 範例輸入: 56 11 範例輸出: 616 程式: ```python def compute(a,b): #宣告函式且加入參數a,b return a*b #回傳a*b a=eval(input()) b=eval(input()) print(compute(a,b)) #把a,b載入後,執行compute ``` 若return 0 表示回傳值為0 學科練習: def遞迴練習第21題 執行下列Python程式片段後,印出的結果為何? ```python def sum(n): s=2 for i in range(s,n+1): s=s*i return s print(sum(5)) ``` (A)720 (B)120 (C)360 (D)240 sum(5)中參數為5,將他帶進副程式 讓程式變成 ```python s=2 for i in range(2,5+1): s=s*i ``` 之後算出s 練習: def 學科第七題 執行下列Python程式片段後,印出的結果為何? ```python def Fn(a): fact=1 for n in range(1,a+1): fact=fact+n return fact print(Fn(6)) ``` (A)720 (B)120 (C)22 (D)6 def 學科第十三題 執行下列Python程式片段後,印出的結果為何? ```python def compute(b,a): return a**b print(compute(4,3)) ``` (A)12 (B)34 (C)27 (D)81 ### Step 3: 遞迴 遞迴在學科中非常的複製,因為她會一直呼叫自己 例如程式可以寫 配合def學科第十八題 執行下列Python費式數列程式片段後,印出的結果為何? ```python def F(x): if (x==1) or (x==2): return 1 else: return (F(x-1)+F(x-2)) print(F(6)) ``` 在上方程式中,明顯看到return回傳值一直呼叫F(x),在做遞迴題目中解法如下: 1.F(6)將6代進 2.判斷6是否為1或2,如果不是會進行else,所以換句話說為以下 F(6)=F(5)+F(4) 以上來看F(6)會等於F(5)+F(4),而要如何知道F(5)跟F(4)是多少呢?必須再帶入一次 重複1. 跟 2. 的作法 判斷5是否為1或2,如果不是會進行else F(5)=F(4)+F(3) F(4)=F(3)+F(2) 而要如何知道F(3)跟F(2),必須再重複1. 2. 帶入F(3) F(3)=F(2)+F(1) 而帶入F(2) 發現在做第一個if就可以執行,所以 F(2)=1 *** 在這邊做整理一下 F(6)=F(5)+F(4) F(5)=F(4)+F(3) F(4)=F(3)+F(2) F(3)=F(2)+F(1) F(2)=1 F(1)=1 *** 而既然知道F(2)及F(1)都是1之後,可以知道 F(3)=1+1=2 而F(3)=2後,F(4)為 F(4)=2+1=3 按照這種方式全部做出來 F(1)=1 F(2)=2 F(3)=F(2)+F(1)=1+1=2 F(4)=F(3)+F(2)=2+1=3 F(5)=F(4)+F(3)=3+2=5 F(6)=F(5)+F(4)=5+3=8 所以F(6)為8,超級複雜ㄉ 練習: 學科def 19題 執行下列Python程式片段後,印出的結果為何? ```python def funA(x): if x==1: return 1 else: return (x+funA(x-1)) print(funA(4)) ``` (A)10 (B)24 (C)7 (D)1 學科def 35題 執行下列Python程式片段後,印出的結果為何? ```python def total(a,b): sum=0 for i in range(a,b+1): sum+=i return sum def main(): x,y=1,20 t=total(x,y) print(t) main() ``` (A)20 (B)190 (C)210 (D)380 35題稍微難一點,可以想想看 學科def 36題 在Python中, 假設我們有以下一個使用者自訂函數A, 如下列程式片段, 若呼叫A(5),則回傳的值為何? ```python def A(k): if K<4: return K else: return A(K-1)-A(K-2)+A(K-3) ``` (A)1 (B)3 (C)5 (D)11 def學科37題 下列程式片段,為Python的自訂函數,主程式執行S(4)傳回的值為何? ```python def S(K): if K==0: return "a" else K==1: return "b" else: return S(K-2)+S(K-1) ``` (A)abbab (B)ababb (C)babba (D)babab