# 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