5. 用「*」接收多個成對的引數

用「*」接收不定個數的引數值時,每一個引數值也可以用tuple或list包裝成成對資料。

以下是一個例子:

假設每一張訂單可以買多杯不同的飲料並指定每種飲料的杯數。

def price(*purchase):
    '''回傳購買金額'''
    items = {'冬瓜檸檬':55, '冬瓜青茶':50, '柳橙原汁':65, '四季春拿鐵':85, '茉香綠茶':65, '日月潭紅茶':80, '抹茶拿鐵':75, '黑糖珍珠鮮奶':75, '芒果青茶':65, '鳳梨牛奶':70}   
    
    tot = 0
    for item, amt in purchase:
        tot += items[item] * amt   
                  
    return tot

呼叫函式:

print(f'{price(("冬瓜檸檬", 1), ("四季春拿鐵", 2)):,}元')
print(f'{price(("茉香綠茶", 2), ("日月潭紅茶", 1), ("黑糖珍珠鮮奶", 3)):,}元')

在第1行,用tuple包裝成對資料,表示買1杯"冬瓜檸檬"2杯"四季春拿鐵"

執行結果:

225元 435元

說明:

問題:

撰寫一個函式,名稱是total,可回傳「總共得到的學分數」。它接收不定個數的科目資料,每個科目以成對資料(學分數, 分數)表示。假設達60分的科目成績可獲得該科目的學分數,請計算並回傳傳入資料共得到多少學分數,。

測試範例:

total((3, 85), (2, 50), (3, 90)) -> 6 total((2, 45), (3, 55), (2, 40), (3, 45)) -> 0