iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 7
0

今天來介紹一個程式語言中很重要的概念,自訂函式(function),如果要一口氣蓋出一棟房子,很難吧~ 但是如果用磚頭、鋼筋一部分一部分蓋上去相較之下就可行許多,程式語言也可以像這樣,先打造小的執行區塊,可以用來執行特定的功能,最後再將所有小區塊組合成一整個程式,這樣不但開發容易,未來維護也會比較方便。

假設說,今天我們要寫一個不同錯誤紀錄的功能,我們可以這樣寫:


if(ERROR1):
    print("Time: ",now())
    print("Error occurred.")
    print("Code ",ERROR1)
    exit()
elif(ERROR2):
    print("Time: ",now())
    print("Error occurred.")
    print("Code ",ERROR2) 
    exit()

可是這樣如果有20種不同的錯誤,那豈不是會讓程式碼變得很長,而且好像都在做類似的事情,所以如果我們把這個報錯的功能寫在函式裡就會變成這樣:

def PrintError(ErrorNo):
    print("Time: ",now())
    print("Error occurred.")
    print("Code ",ErrorNo)
    exit()
    
if(ERROR1):
    PrintError(ERROR1)
    
elif(ERROR2):
    PrintError(ERROR2)
    
elif(ERROR3):
    PrintError(ERROR3)
    
elif(ERROR4):
    PrintError(ERROR4)
    
elif(ERROR5):
    PrintError(ERROR5)

即使我們有五個錯誤判斷需要做,但整體而言就清爽許多,如果要修改的話也只需要修改 def PrintError()裡面的區塊即可全部修改,那我們就來好好認識一下如何自訂函式吧!

函式就像數學中 y = f(x) 的 f(x),你給他 x 他會輸出 y,只不過呢今天他要輸出什麼 y 是由你自己定義的,例如說我想寫一個加法的函式,我就得給他加數被加數,而函式應該要回應兩數和,例如這樣:

def add(num1, num2):
    return num1 + num2
    
y = sum(1,2)
print(y)
#output 3

有看到嗎? 函式裡有一個 return 語句,意即我們想要回傳的值,後面的 y = sum(1,2) 為函式調用方法 (call function) 將1和2傳到 add(),並且將回傳值指派給變數 y。

也就是說,我們可以將類似的程式碼寫成一個 function,未來要使用的時候只要給他傳入值,他就會回應給我們想要的答案,同時也可以做到資料封裝,我們或許需要一個判斷是否為質數的功能,但我不會寫,該怎麼辦? 我可以調用別人寫好的函式,只要我們相信他回傳的是正確的,我們就可以無視函式內到底做了甚麼我們不懂的事,直接使用結果,注意!這必須要在確定函式回傳正確的情況下才可以,不然會導致垃圾進垃圾出,整個程式邏輯錯誤甚至崩潰。最好還是理解一下函式裡在幹嘛,這樣是最好且最安全的作法。

Ex 質數搜尋

import math

def IsPrimer(num):
     if(num == 2):
         return True
     
     if(num % 2 == 0):
         return False
         
     for i in range(3,math.sqrt(num)+1):
         if(num % i==0):
             return False;
         
         return True;
         
 #使用時我們只需要調用,不需要了解 function 內部的運作原理
 num = input("輸入欲檢查整數")
 if(IsPrimer(num)):
     print("是質數")
 else:
     print("非質數")

Function 的用法大致上就是這樣,這邊提供給讀者一些延伸閱讀,可以更增強讀者對函式使用的熟悉度,不過最好的方式還是親自練習寫寫看,保證多寫幾次就會了!當初我既受這麼學過來的~

延伸閱讀

https://www.w3schools.com/python/python_functions.asp
https://openhome.cc/Gossip/Python/DefStatement.html
https://www.geeksforgeeks.org/functions-in-python/


上一篇
Day6-來寫個簡單遊戲吧(1A2B game)
下一篇
Day8-變數用量太大,名字不知道怎麼取啦,認識陣列
系列文
原來電腦可以這樣用!? 果蠅也懂的程式語言教學30

尚未有邦友留言

立即登入留言