Как заставить Python сделать функцию leap yr аналогичной range (start, stop, step)?

#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):