#python #function #return
#python #функция #Возврат
Вопрос:
Итак, я работаю над вопросом о CodingBat, веб-сайте, который предоставляет практические задачи на JS и Python. Я столкнулся с неожиданным результатом. Кстати, вот ссылка на вопрос:https://codingbat.com/prob/p135815 . Теоретически мой код должен возвращать False, но он возвращает none, когда я ставлю 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)), я не получаю None (я должен получить False)
Почему???
Ответ №1:
С вашим параметром is_summer, равным False, вы находитесь во 2-м условном блоке:
if not is_summer:
if temp <= 90:
if temp >= 60:
return True
elif temp >= 90:
return False
elif temp <= 60:
return False
Затем следуйте этому блоку:
- является ли temp меньше 90? ДА. итак, теперь мы в этом блоке:
if temp <= 90:
if temp >= 60:
return True
Здесь происходит то, что вы никогда не доберетесь до elif temp <= 60
, потому что вместо этого вы находитесь в первом условном выражении. Вы могли бы получить приведенный ниже elif только в том случае, если бы вы не удовлетворяли первому условию.
В конце этого if temp <= 90
блока заканчивается вся цепочка условий, и ваша функция возвращает значение по умолчанию 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
Ответ №2:
Вы пытались это отладить? С 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
Ответ №3:
Если вы не возвращаете значение из функции Python, None
возвращается по умолчанию. Я полагаю, что здесь происходит то, что, поскольку вы используете elif
инструкции, поскольку предложение if not is_summer: if temp <= 90:
вводится, конечное предложение elif temp <= 60
не достигается. Поэтому функция получает все инструкции if
/ elif
, не возвращая значения, и возвращает None
.
Простое решение — заменить все elif
s на if
s . Затем print(squirrel_play(50, False))
возвращает False
(по крайней мере, для меня).
Ответ №4:
Способ, которым вы в настоящее время его закодировали, в вашем
if temp <= 90:
if temp >= 60:
return True
elif ....
если первый if
тест выдает значение True, а второй — значение False, то return
оператор не выполняется (имейте в виду, что последующие elif
тесты не выполняются, потому что первый if
оценил значение true), и поэтому функция возвращает None
.
На самом деле вы можете упростить функцию, используя операторы сравнения в цепочке:
def squirrel_play(temp, is_summer):
if is_summer:
return 60 <= temp <= 100
else:
return 60 <= temp <= 90