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再回傳。