首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >返回None而不是False

返回None而不是False
EN

Stack Overflow用户
提问于 2020-08-18 09:26:22
回答 4查看 61关注 0票数 0

因此,我正在CodingBat上做一个问题,这是一个提供JS和practice问题的网站。我遇到了一个意想不到的输出。顺便说一句,这是问题的链接:https://codingbat.com/prob/p135815。理论上,我的代码应该返回False,但当我将打印(squirrel_play(50,False))放入时,它将不返回。

代码:

代码语言:javascript
代码运行次数: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
    elif temp >= 90: 
        return False
    elif temp <= 60:
        return False

当我运行打印(squirrel_play(50,False))时,我没有得到(我应该得到假)为什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-08-18 09:32:24

如果参数为is_summer of False,则在第二个条件块中:

代码语言:javascript
代码运行次数:0
运行
复制
if not is_summer:
    if temp <= 90:
        if temp >= 60:
            return True
    elif temp >= 90: 
        return False
    elif temp <= 60:
        return False

然后沿着这个街区走:

  • 温度低于90吗?是。所以现在我们在这个街区:
代码语言:javascript
代码运行次数:0
运行
复制
if temp <= 90:
  if temp >= 60:
    return True

这里所发生的事情是,您永远无法到达elif temp <= 60,因为您处于第一个条件中。只有在不满足第一个条件的情况下,才能到达下面的elif。

在这个if temp <= 90块的末尾,整个条件链结束,您的函数返回None的默认值,因为您没有提供另一个返回值。

通过让整个代码读懂,您可能会更清楚地看到这一点:

代码语言:javascript
代码运行次数: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
票数 0
EN

Stack Overflow用户

发布于 2020-08-18 09:32:23

你试过调试它吗?对于squirrel_play(50, False),它将分为:

代码语言:javascript
代码运行次数: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
        # 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
票数 0
EN

Stack Overflow用户

发布于 2020-08-18 09:32:29

当前对其进行编码的方式,在

代码语言:javascript
代码运行次数:0
运行
复制
    if temp <= 90:
        if temp >= 60:
            return True
    elif ....

如果第一个if测试计算为True,而第二个测试计算为False,则不会达到return语句(请记住,由于第一个if计算为true,因此没有执行后续的if测试),因此函数返回None

实际上,您可以通过使用链式比较算子来简化函数

代码语言:javascript
代码运行次数:0
运行
复制
def squirrel_play(temp, is_summer):
    if is_summer:
        return 60 <= temp <= 100
    else:
        return 60 <= temp <= 90
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63465686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档