簡體   English   中英

返回 None 而不是 False

[英]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

然后按照這個塊:

  • 溫度低於90? 是的。 所以現在我們在這個街區:
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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM