2015-10-15 64 views
0

首先,讓我說我已經做了徹底的研究試圖瞭解。但我不明白其他人給出的解釋(這被問問者所理解)。這是我有問題的代碼:Python「迴歸」困難

def tax(bill): 
    """Adds 8% tax to a restaurant bill.""" 
    bill *= 1.08 
    print "With tax: %f" % bill 
    return bill 

def tip(bill): 
    """Adds 15% tip to a restaurant bill.""" 
    bill *= 1.15 
    print "With tip: %f" % bill 
    return bill 

meal_cost = 100 
meal_with_tax = tax(meal_cost) 
meal_with_tip = tip(meal_with_tax) 

當我刪除第一個「迴歸法案」,並運行它,我得到的第一個數字,但是當它試圖計算出第二個數字有錯誤。 def tax(bill)需要100,輸出108是對的?因此,如果我刪除第一個「退貨清單」,那麼def tip(bill)爲什麼不用108來計算而不是給出錯誤?

我確實在掌握編程的最基本概念時遇到了問題。我現在一直在緊張學習3個月,而這正是我所處的位置。這是我腦海中一個非常滑溜的話題,我非常感謝一些幫助。

+7

當你刪除return語句時,函數默認返回'None'。這意味着'meal_with_tax'的值爲'None'。 「無* = 1.15」是什麼意思? – Dair

+0

這個問題剛剛作爲一個副本關閉。 http://stackoverflow.com/questions/33138918/i-dont-understand-return-in-python-and-what-is-a-caller – digitaLink

+1

[你爲什麼會在Python中使用return語句?]( http://stackoverflow.com/questions/7129285/why-would-you-use-the-return-statement-in-python) – tzaman

回答

1

我相信你誤解了returnprint聲明之間的區別。

在您的tax(bill)函數中,您乘以bill *= 1.08。那麼你的print的值爲billprint只輸出賬單值到控制檯窗口 - 它不存儲該值或允許其以任何方式被其他函數使用。

您要刪除的return聲明會將存儲在帳單108中的值返回給調用者。在這種情況下的來電者是meal_with_tax = tax(meal_cost)。這意味着meal_with_tax的值是tax(bill)的返回值。當您刪除return bill時,您返回的值爲None,因此meal_with_tax的值爲None。您想要return bill,以便您將值108分配到meal_with_tax

tip(bill)返回錯誤的原因是因爲它試圖計算None *= 1.15。正如您所想,tip(bill)內的bill的值不是108