iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 16
0
AI & Data

看對話學 Python 資料分析,用情境故事帶你入門系列 第 16

Day-16 函式 function,就好像建造積木一樣(下)


Meiko 的車到保養廠,進行檢查,看是否要換輪胎、換機油、和換雨刷。Licensed by Adobe Stock

Jason:「有時候,我們可能會回傳多個值,比如說我們先前有提過的布林值boolTrueFalse,這樣使用完這行程式之後,如果還有其他的程式區塊需要這個 action_for_rain的執行結果,我們就會return一個以上的值。像這樣

rain = True
def action_for_rain(rain):
 if rain:
   return True,"帶傘"
 else:
   return False,"不帶傘"
is_rain,output=action_for_rain(rain)

你看,這次我們在 if-else 的判斷條件中,直接 return 了兩個參數,一個是布林值 True 或 False 另外一個是『帶傘』或『不帶傘』。」

Meiko:「對耶,而且你在輸出的時候,還把它們分別指定到兩個參數is_rainoutput。」

Jason :「對啊,因為這樣之後,我們就可以拿is_rainoutput做別的應用了!如果我們把它們印出來的話會看到

rain = True
def action_for_rain(rain):
 if rain:
   return True,"帶傘"
 else:
   return False,"不帶傘"
is_rain,output=action_for_rain(rain)
print (is_rain,output)

Meiko:「Jason,但是這只有一個函式而已,好像沒什麼感覺耶?」

Jason:「不然,我們來想一下,你的車保養會做哪些服務好了,我用這個來發想。」

Meiko:「這倒簡單,你看這張單子是剛剛服務人員給我的保養記錄表,詳細記錄了車子做了哪些保養,你看...」

  1. 里程 30,000 公里換 4 個輪胎
  2. 引擎機油更換
  3. 雨刷更換

Jason:「好唷,這表示你的車子進到保養廠可能到了 3 個不同的保養區進行檢查。那我就用tire_replace代表輪胎的更換,engine_oil_replace代表機油的更換和wiper_replace代表雨刷的更換!」

Meiko:「還真的可以喲?」

Jason:「對啊,不過就是要做一些條件設定就是...tire_replace 有一個 input 是 milage 代表里程數,換輪胎的條件是超過 30000公里就會換輪胎。」

Jason:「然後,engine_oil_replace 有一個 input 是 oil_need_replace,基本上只要進保養廠就是車子儀表板顯示機油要更換了。」

Jason:「最後一個 wiper_replace 有一個 input 是 wiper_years,一般來說,3年左右橡膠就會開始硬化,我們這個地方又多雨,保養廠建議 3 年換一次。」

Meiko:「這樣好像都有提到了耶!」

Jason:「那我們就先分別把個別的函式寫出來吧!你先寫換輪胎的函式...」

Meiko:「是要回一次回傳 2 個值的函式嗎?」

Jason:「歐,對!差點忘了跟你說,你試著 return 2個值,一個是布林值,另外一個是個 output 的字串。」

Meiko:「Okay,那tire_replace應該是這樣...」

def tire_replace(milage):
 if milage > 30000:
   return True,"換輪胎"
 else:
   return False,"不換輪胎"

Jason:「不錯耶,那你可以繼續寫engine_oil_replace...」

Meiko:「換機油的好像是一個預設條件,只要成立就...換機油..」

def engine_oil_replace(oil_need_replace):
 if oil_need_replace:
   return True,"換機油"
 else:
   return False,"不換機油"

Jason:「答對了,那最後一個是雨刷如果超過 3 年的話要更換,你會怎麼寫?」

Meiko:「應該是有一個參數配上一個比較>= 3 吧?」

def wiper_replace(wiper_years):
 if wiper_years>=3:
   return True,"換雨刷"
 else:
   return False,"不換雨刷"

Jason:「沒錯唷!看來你 3 個函式都寫好了,那我來幫你整理一下完整的樣子...

milage=30050
oil_need_replace = True
wiper_years=2

def tire_replace(milage):
 if milage > 30000:
   return True,"換輪胎"
 else:
   return False,"不換輪胎"


def engine_oil_replace(oil_need_replace):
 if oil_need_replace:
   return True,"換機油"
 else:
   return False,"不換機油"


def wiper_replace(wiper_years):
 if wiper_years>=3:
   return True,"換雨刷"
 else:
   return False,"不換雨刷"

is_tire_replaced, tire_output=tire_replace(milage)
is_oil_replaced,oil_output=engine_oil_replace(oil_need_replace)
is_wiper_replaced,wiper_output=wiper_replace(wiper_years)
print (is_tire_replaced,tire_output)
print (is_oil_replaced,oil_output)
print (is_wiper_replaced,wiper_output)

Meiko:「歐,這樣好像就比較有感覺了耶,Jason,照著我這份保養紀錄單寫了一份程式,我的車跑了 30050 公里,所以要換輪胎。」

Meiko:「接著進到保養廠就要換機油,所以顯示換機油,因為我的車還很新才 2 年而已,所以暫時不用換雨刷。這些結果印出來跟我保養紀錄單上的結果是一樣的!」

Jason:「答對了,看著你漸漸有寫程式的思維了,一步步的把每一件事情都想清楚!」

Meiko:「我也好像有點感覺了!Jason 你剛跟我說程式變多,一冗長就會有很多資訊,不容易維護,現在我大概可以感覺得到了!」

Jason:「是啊,現在我們只有 3 個保養的函式,如果你的車在開久一點的話,需要保養的項目很多,要在程式上顯示出來,就真的會眼花撩亂了!」

Meiko:「對呀,有了函式,處理這些複雜的程式碼,還是可以像現在坐在保養廠的休息區喝咖啡,享受一下悠閒的時光!哈!」

牛刀小試

我大寶寶~拉,今天繼續介紹函式function的用法,有沒有發現我們把汽車保養廠裡面的步驟描述出來,再轉換成程式碼也是蠻有意思的啊?這就一種程式撰寫抽象化的過程,大寶寶把實體世界的行為,轉換成程式邏輯,這樣就可以讓電腦去進一步幫我們判斷囉!

給大寶寶留言、分享、鼓勵

歡迎登入留言跟我分享你的想法唷!(登入不麻煩,點一下 FB 登入就可以留言了!)

1.喜歡這樣方式學 Python 的朋友請留言『+1』
2.如果前面的內容忘記了,趕快看一下大寶寶這一系列的看對話學 Python 資料分析,用情境故事帶你入門的列表!就能夠繼續 Happy Coding 囉!


上一篇
Day-15 函式 function,就好像建造積木一樣(上)
下一篇
Day-17 模組 module,除了自己努力外,也要站在巨人肩膀上
系列文
看對話學 Python 資料分析,用情境故事帶你入門30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言