2016-02-07 95 views
-4
def hotel_cost(days): 
    return 140 * days 

def plane_ride_cost(city): 
    if city == "Charlotte": 
     return 183 
    elif city == "Tampa": 
     return 220 
    elif city == "Pittsburgh": 
     return 222 
    else: 
     return 475 

def rental_car_cost(days): 
    cost_times_day = days * 40 
    if days >= 7: 
     cost_times_day = cost_times_day - 50 
     print cost_times_day 
     return cost_times_day 
    elif days >= 3 and days <7: 
     cost_times_day = cost_times_day - 20 

     **return cost_times_day** # right here!!!! <--- if I remove this I  #get the error, TypeError: unsupported operand type(s) for +: 'NoneType' and #'int' 

    else: 
     print cost_times_day 
     return cost_times_day 

def trip_cost(city, days, spending_money): 
    return rental_car_cost(days) + hotel_cost(days) + plane_ride_cost(city) +\ 
    spending_money 

print trip_cost("Los Angeles", 5, 600) 

回答

0

事實上你沒有從該行返回......此外,這是不好的做法,從每一個回報您的if/elif的分支,一個更好的辦法是:

def rental_car_cost(days): 
    cost_times_day = days * 40 
    if days >= 7: 
     cost_times_day -= 50 
     print cost_times_day 
    elif days >= 3 and days <7: 
     cost_times_day -= 20  
    return cost_times_day # <-- a single point of return 

如果你有一個分支,沒有返回值,Python中,默認情況下會返回None,這將導致失敗在調用函數時,它嘗試添加intNone,因此錯誤:

TypeError: unsupported operand type(s) for +: 'NoneType' and #'int'

+0

我很困惑。如果函數的值大於7,它如何知道該值在每個語句中都沒有返回? – INeedVerification

+0

再次檢出代碼,它實際上*會*返回一個值,只是它在函數結束時只做了一次;) – alfasin

+0

啊,我明白了。你非常有幫助。最後一個問題。如果它在最後一行之後返回,那麼爲什麼它不會僅返回最後一個elif部分。例如,第一個if部分在函數返回前切斷,然後elif部分開始並以返回結束。 – INeedVerification

0

你的錯誤是真的h ERE:

return rental_car_cost(days) + hotel_cost(days) + plane_ride_cost(city) 

您嘗試添加的rental_car_cost(days)結果到其他費用,當你註釋掉你所提到的線,存在rental_car_cost不返回任何東西的情況下(即返回None)。因此,當您嘗試將None添加到int時會爆炸。

要解決此問題,請確保每條代碼路徑(特別是通過您的if語句的每條可能路徑)都會返回有效的int

1

監守,如果rental_car_cost沒有返回值,然後在:trip_cost,正是在這一行:

return rental_car_cost(days) + hotel_cost(days) + plane_ride_cost(city) +\ 
    spending_money 

您正在試圖總結與int

0

if days >= 3 and days < 7一個NoneType並刪除return語句,你已經突出顯示,rental_car_cost()函數將返回None。當trip_cost()函數試圖連接None和兩個數字時,它將失敗,因爲它不可能。

相關問題