[英]Returns None instead of False
所以我在CodingBat上做題,這是一個提供JS和Python練習題的網站。 我遇到了意外的 output。順便說一句,這是問題的鏈接: https://codingbat.com/prob/p135815 。 理論上我的代碼應該返回 False 但是當我把 print(squirrel_play(50, False))
代碼:
def squirrel_play(temp, is_summer):
if is_summer:
if temp <= 100:
if temp >= 60:
return True
elif temp <= 60:
return False
elif temp >= 100:
return False
if not is_summer:
if temp <= 90:
if temp >= 60:
return True
elif temp >= 90:
return False
elif temp <= 60:
return False
當我用 print(squirrel_play(50, False)) 運行它時,我沒有得到(我應該得到 False)為什么???
你試過調試它嗎? 使用squirrel_play(50, False)
它將落入:
def squirrel_play(temp, is_summer):
if is_summer:
if temp <= 100:
if temp >= 60:
return True
elif temp <= 60:
return False
elif temp >= 100:
return False
if not is_summer:
if temp <= 90:
if temp >= 60:
return True
# HERE ( 50 is less than 90 but not greater than 60 )
# and you have no return statement for this case
elif temp >= 90:
return False
elif temp <= 60:
return False
使用 False 的 is_summer 參數,您處於第二個條件塊中:
if not is_summer:
if temp <= 90:
if temp >= 60:
return True
elif temp >= 90:
return False
elif temp <= 60:
return False
然后按照這個塊:
if temp <= 90:
if temp >= 60:
return True
這里發生的事情是你永遠不會達到elif temp <= 60
因為你處於第一個條件。 如果你不滿足第一個條件,你只能到達下面的 elif。
最后if temp <= 90
塊整個條件鏈結束,你的 function 返回默認值None
因為你沒有提供另一個返回值。
通過閱讀整個代碼,您可能會更清楚地看到這一點:
def squirrel_play(temp, is_summer):
if is_summer:
if temp <= 100:
if temp >= 60:
return True
elif temp <= 60:
return False
elif temp >= 100:
return False
if not is_summer:
if temp <= 90:
if temp >= 60:
return True
else:
return "This is where I'm returning with 50, and True as my parameters"
elif temp >= 90:
return False
elif temp <= 60:
return False
你目前編碼的方式,在你的
if temp <= 90:
if temp >= 60:
return True
elif ....
如果第一個if
測試評估為 True 而第二個評估為 False,則不會到達return
語句(請記住,后續的elif
測試不會執行,因為第一個if
評估為 true),因此 function 返回None
。
事實上,您可以使用鏈式比較運算符簡化 function :
def squirrel_play(temp, is_summer):
if is_summer:
return 60 <= temp <= 100
else:
return 60 <= temp <= 90
如果您不從 Python function 返回值,則默認返回None
。 我相信這里發生的事情是因為您正在使用elif
語句,因為正在輸入if not is_summer: if temp <= 90:
子句,因此未達到最終子句elif temp <= 60
。 因此 function 在沒有返回值的情況下通過了所有if
/ elif
語句,並返回None
。
一個簡單的解決方案是將所有elif
替換為if
。 然后print(squirrel_play(50, False))
返回False
(至少對我而言)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.