Try   HackMD

Python教學 函式def

授課老師:楊淑惠

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
函式介紹

def在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

函式跟之前學過的一樣,差在於函式屬於副程式,如果沒有做「呼叫」他並不會執行

程式碼:

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,範例程式如下:

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

程式:

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程式片段後,印出的結果為何?

def  sum(n):
    s=2
    for i in range(s,n+1):
        s=s*i
    return s
print(sum(5))

(A)720 (B)120 ©360 (D)240

sum(5)中參數為5,將他帶進副程式
讓程式變成


s=2
for i in range(2,5+1):
    s=s*i

之後算出s

練習:
def 學科第七題

執行下列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 ©22 (D)6

def 學科第十三題

執行下列Python程式片段後,印出的結果為何?

def compute(b,a):
    return a**b
print(compute(4,3))
        

(A)12 (B)34 ©27 (D)81

Step 3: 遞迴

遞迴在學科中非常的複製,因為她會一直呼叫自己
例如程式可以寫
配合def學科第十八題

執行下列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程式片段後,印出的結果為何?

def funA(x):
    if x==1:
        return 1
    else:
        return (x+funA(x-1))
print(funA(4))

(A)10 (B)24 ©7 (D)1

學科def 35題
執行下列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 ©210 (D)380

35題稍微難一點,可以想想看

學科def 36題
在Python中, 假設我們有以下一個使用者自訂函數A, 如下列程式片段, 若呼叫A(5),則回傳的值為何?

def A(k):
    if K<4:
        return K
    else:
        return A(K-1)-A(K-2)+A(K-3)

(A)1 (B)3 ©5 (D)11

def學科37題
下列程式片段,為Python的自訂函數,主程式執行S(4)傳回的值為何?

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 ©babba (D)babab