返回None而不是False

时间:2020-08-18 09:26:22

标签: python function return

因此,我正在CodingBat(该网站提供JS和Python练习问题)上处理一个问题。我遇到了意外的输出。顺便说一下,这是问题的链接: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) 为什么?

4 个答案:

答案 0 :(得分:0)

您尝试调试它吗? 如果使用create table Customers ( customerId integer primary key autoincrement, firstname varchar(255), surname varchar(255) ); ,它将属于:

squirrel_play(50, False)

答案 1 :(得分:0)

使用is_summer的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

然后按照以下步骤操作:

  • 温度是否小于90?是。所以现在我们在这个区块中:
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块的末尾,整个条件链结束,并且您的函数返回了默认值if temp <= 90,因为您没有提供其他返回值。

通过读取整个代码,您也许可以更清楚地看到这一点:

None

答案 2 :(得分:0)

您当前在其中编码的方式

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 .... 测试的结果为True,而第二个测试的结果为False,则不会达到if语句(请记住,由于第一个测试未执行后续的return测试elif评估为true),因此该函数返回if

实际上,您可以使用chained comparison operators简化功能:

None

答案 3 :(得分:0)

如果不从Python函数返回值,则默认返回None。我相信这里正在发生的事情是,因为您使用的是elif语句,所以由于输入了子句if not is_summer: if temp <= 90:,所以没有到达最终子句elif temp <= 60。因此,该函数在不返回值的情况下传递了所有if / elif语句,并返回了None

一个简单的解决方案是用elif替换所有if。然后print(squirrel_play(50, False))返回False(至少对我而言)。