因此,我正在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) 为什么?
答案 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
然后按照以下步骤操作:
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
(至少对我而言)。