2017-05-02 18 views
1

我正在通過CodeAcademy的初學者Python課程。這是其中一項練習的一部分,您在雜貨店「檢查」,但我想要代碼打印最終賬單/「總計」而不是僅返回「總計」。我不明白爲什麼它不打印。我已經嘗試在迭代之後將它放在最後,並且在這裏,在遞歸中查看它是否會在每一步之後進行打印。當我運行這個代碼時,沒有任何顯示。結果不是正在打印,爲什麼在`return`後忽略'print`?

shopping_list = ["banana", "orange", "apple"] 

stock = { 
    "banana": 6, 
    "apple": 0, 
    "orange": 32, 
    "pear": 15 
}  
prices = { 
    "banana": 4, 
    "apple": 2, 
    "orange": 1.5, 
    "pear": 3 
}  
food = shopping_list 

def compute_bill(food): 
    total = 0 
    for item in food: 
     if stock[item]>0: 
      total += prices[item] 
      stock[item] -=1 
    return total 
    print total 
compute_bill(food) 

三江源 - 所以我現在明白了,一切都return total後忽略 - 更好的問題可能是這是爲什麼? 有沒有這種情況下,你會包括print totalreturn total以這種方式和不是祝願雙方都發生?

+0

'return'結束一個函數*,然後*。 「打印總量」從未達到。 –

+3

你在哪裏*調用compute_bill()'?爲什麼不打印返回值*那裏*? –

+0

您需要在''return'語句之前移動'print'語句,然後調用函數'compute_bill()'。 –

回答

1

我喜歡你的方法,因爲它結構良好,程序流程清晰。但是,對於調用函數,您還沒有完全正確的語法。根據您目前的佈局,你需要做的是這樣的:

shopping_list = ["banana", "orange", "apple"] 

stock = { 
    "banana": 6, 
    "apple": 0, 
    "orange": 32, 
    "pear": 15 
} 

prices = { 
    "banana": 4, 
    "apple": 2, 
    "orange": 1.5, 
    "pear": 3 
} 

#food = shopping_list # Not needed as it is used as input parameter 

def compute_bill(food): 
    global stock # Not strictly needed, see below. 
    total = 0 
    for item in food: 
     if stock[item]>0: 
      total += prices[item] 
      stock[item] -=1 
    return total 

print compute_bill(shopping_list) # Calling function and printing result 

可能會咬你將來的另一件事是,一般是不可能給一個函數內更新全局變量stock,因爲對於大多數變量它只是該功能可用的副本,並且該副本不可寫入(如果該副本不在輸入參數列表中) - 除非使用了關鍵字global。但是,對於字典(以及列表和其他集合),不需要global關鍵字。

相關問題