9. 回傳多個值
(1) 用函式回傳2個值
以下是一個例子:
假設傳入一個成績的list,函式將同一個list內的成績轉成等級,再回傳該list的參照。
def bmi(height, weight):
'''回傳bmi值及評語'''
value = weight / (height/100)**2
if value < 18.5:
comments = '過輕'
elif value < 24.9:
comments = '適中'
elif value < 29.9:
comments = '過重'
else:
comments = '肥胖'
return value, comments
第14行,回傳2個值。
呼叫函式:
val, comm = bmi(170, 55)
print(f'bmi值:{val:.2f}, 評語:{comm}')
第1行,用2個變數分別接收2個回傳值。
執行結果:
bmi值:19.03, 評語:適中
說明:

(2) 將多個回傳值存在dict中
以下是一個例子:
def bmi(height, weight):
'''回傳包含bmi值及評語的dict'''
value = weight / (height/100)**2
if value < 18.5:
comments = '過輕'
elif value < 24.9:
comments = '適中'
elif value < 29.9:
comments = '過重'
else:
comments = '肥胖'
return {'value':value, 'comments':comments}
第14行,將回傳值value及comments包在一個dict中。
呼叫函式:
myBMI = bmi(170, 55)
print(f'bmi值:{myBMI["value"]:.2f}, 評語:{myBMI["comments"]}')
第1行,用myBMI接收一個回傳的dict值。 第2行,用myBMI["value"]及myBMI["comments"]分別取出bmi值及bmi評語。
執行結果:
bmi值:19.03, 評語:適中
說明:

問題1:
寫一個函式score(chi, eng, mat, wchi=1.0, weng=1.0, wmat=1.0),傳入值分別是國文、英文、數學、國文加權、英文加權、數學加權。請計算傳入值的加權平均分數,另外: 如果加權平均分數>=90,等級分數為A; 否則如果加權平均分數>=80,等級分數為B; 否則如果加權平均分數>=70,等級分數為C; 否則如果加權平均分數>=60,等級分數為D; 否則,等級分數為E。
請回傳「加權平均分數」及「等級分數」。
測試主程式:
wavg, rank = score(70, 80, 90)
print(wavg, rank)
wavg, rank = score(70, 80, 90, wchi=2.0)
print(wavg, rank)
測試結果範例:
80, B 77.5, C
問題2:
改寫以上的程式,將回傳值包裝在一個dict再回傳。