2. 有多個參數的函式
(1) 「依位置順序」傳入引數值
一個函式可以沒有參數,也可以有1個、2個參數,甚至更多。在呼叫一個有多個參數的函式時,如果沒有指定傳入的引數要交給哪一個參數,則傳入值會依照位置順序傳給函式內的參數。
以下是一個例子:
def bmi(height, weight):
'''
參數:
height (float): 身高(公分)
weight (float): 體重(公斤)
回傳:
float: BMI
'''
#檢查輸入值型態是否int或float
if not (isinstance(height, (int, float)) and isinstance(weight, (int, float))):
raise TypeError('傳入值必須是數值')
#計算並回傳bmi
return weight / (height/100)**2
在第1行,函式有2個參數,依序是height及weight。
呼叫函式:
print(f'{bmi(170, 55):.2f}')
print(f'{bmi(155, 42):.2f}')
在第1行,引數170及55依位置順序傳給函式的height及weight參數。
執行結果:
19.03 17.48
(2) 「指定參數名稱」的引數傳遞方式
呼叫函式:
print(f'{bmi(weight=55, height=170):.2f}')
print(f'{bmi(height=155, weight=42):.2f}')
在第1行,weight=55表示55要傳給參數weight,而height=170表示170要交給參數height。
執行結果:
19.03 17.48
問題1(用「依位置順序」的方式傳引數值):
撰寫一個函式,名稱是price,有2個參數(oilType, liter),分別是 「油品別」 及 「公升數」。如果油品別是「95無鉛」,每公升31.4元;如果是「98無鉛」,每公升33.4元。油價=每公升價格*公升數,請依傳入值計算油價,回傳的油價為整數,小數無條件進位。
測試範例:
"95無鉛", 25 -> 785元 "98無鉛", 45 -> 1,503元
問題2(用「指定參數名稱」的方式傳引數值):
請用指定名稱傳引數值的方法完成上述程式。