#python #python-3.x #range #generator
#python #python-3.x #диапазон #генератор
Вопрос:
Я пытаюсь создать функцию для високосного года, а затем создать генератор, который будет функционировать как команда range(start, stop, step). По какой-то причине мой приведенный ниже код не выводит, является ли написанный год високосным годом или нет. Я продолжаю получать False, когда набираю известные високосные годы, и я не уверен, что я сделал не так.
def is_leap(Y):
leap=False
if Y % 4 == 0:
leap=True
elif Y % 100 == 0:
leap=False
elif Y % 400 == 0:
leap=True
return Y % 400 == 0
return Y % 4 == 0
print(is_leap(2004))
Комментарии:
1. Вы не возвращаетесь
leap
.
Ответ №1:
Вам нужно вернуться leap
. Вы устанавливаете переменную, но затем игнорируете ее.
Кроме того, ваши тесты расположены в неправильном порядке. Если год делится на 100, он также будет делиться на 4, поэтому первое if Y % 4 == 0:
условие будет истинным. elif
условия проверяются только в том случае, если все предыдущие условия были ложными, поэтому он никогда не будет выполнять эти тесты.
На самом деле вам не нужна leap
переменная. Просто верните в if
инструкции.
def is_leap(Y):
if Y % 400 == 0:
return True
if Y % 100 == 0:
return False
if Y % 4 == 0:
return True
return False
В этом случае вам не нужно elif
, поскольку return
предотвращает переход к следующему if
.
Вы также можете объединить все условия:
def is_leap(Y):
return Y % 400 == 0 or (Y % 4 == 0 and Y % 100 != 0):