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)
-4
A
回答
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
,這將導致失敗在調用函數時,它嘗試添加int
到None
,因此錯誤:
TypeError: unsupported operand type(s) for +: 'NoneType' and #'int'
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
和兩個數字時,它將失敗,因爲它不可能。
相關問題
- 1. 爲什麼RewriteCond需要此規則才能正常工作?
- 2. 爲什麼curl需要.lib和.dll才能正常工作?
- 3. Android需要什麼才能返回findViewById()?
- 4. SystemProperties.set需要什麼linux權限才能正常工作? (android)
- 5. 爲什麼我需要scope.property = scope.property()才能使表達式正常工作?
- 6. 爲什麼我需要兩次輸入WSL才能正常工作?
- 7. 爲什麼我的drawpoint功能不能正常工作?
- 8. 爲什麼我的祕密詞功能不能正常工作
- 9. 爲什麼我的JS功能不能正常工作?
- 10. 爲什麼我的javascript功能不能正常工作
- 11. 爲什麼我需要執行深度克隆才能使此代碼正常工作?
- 12. 我需要添加什麼才能使此程序起作用?
- 13. 什麼樣的參數,我需要發送此功能爲它工作
- 14. 即使參數丟失,爲什麼此功能仍能正常工作?
- 15. 返回FilePath的Action方法不能正常工作。爲什麼?
- 16. 爲什麼我需要推送功能?
- 17. 爲什麼我們需要crossCheckMatching功能?
- 18. 爲什麼Thread.Join需要很長時間才能返回?
- 19. 爲什麼我的功能在C中無法正常工作?
- 20. 爲什麼我的PHP包含功能無法正常工作?
- 21. 爲什麼我的setuid功能無法正常工作?
- 22. 爲什麼功能代碼不能正常工作
- 23. 爲什麼ClientValidationFunction功能不能正常工作?
- 24. 爲什麼這個AJAX功能不能正常工作?
- 25. 爲什麼郵件功能不能正常工作
- 26. JavaScript排列功能 - 爲什麼不能正常工作?
- 27. 爲什麼htmlentities功能不能正常工作?
- 28. 我需要做些什麼才能使此鏈接在Rails中工作
- 29. 我如何才能使此Google RSS小工具正常工作?
- 30. 非常簡單的手機功能 - 我真正需要什麼?
我很困惑。如果函數的值大於7,它如何知道該值在每個語句中都沒有返回? – INeedVerification
再次檢出代碼,它實際上*會*返回一個值,只是它在函數結束時只做了一次;) – alfasin
啊,我明白了。你非常有幫助。最後一個問題。如果它在最後一行之後返回,那麼爲什麼它不會僅返回最後一個elif部分。例如,第一個if部分在函數返回前切斷,然後elif部分開始並以返回結束。 – INeedVerification