Високосный год на Python

Есть рабочий код для определения того високосный год или нет. Вот:

def is_leap(year):
    leap = False

if (year % 4) == 0:
    if (year % 100) == 0:
        if (year % 400) == 0:
            return True
        else:
            return False
    else:
        return True
else:
    return False

return leap

year = int(input())
print(is_leap(year))

И есть такой, но он не работает, только если год равен 1992, а с другими годами все окей.

def is_leap(year):
    leap = False
    
if year%4==0 and year%100==0 and year%400==0:
    return True
else:
    return False

    return leap

year = int(input())
print(is_leap(year))

Объясните пожалуйста почему. Разве они не идентичны? Почему первый рабочий полностью, а второй частично? Спасибо.


Ответы (2 шт):

Автор решения: MaxU

В вашем втором варианте високосными будут считаться только те года, которые делятся на 400, т.к. True вернется только если все три условия выполняются, а это случается только для тех лет, которые делятся на 400 (они автоматически делятся еще и на 4 и на 100).

Попробуйте так:

def is_leap(year):
    return year%4==0 and (year%100!=0 or year%400==0)

тесты:

In [168]: is_leap(2000)
Out[168]: True

In [169]: is_leap(2020)
Out[169]: True

In [170]: is_leap(2100) # если год делится на 100, но не делится на 400 - он НЕ является високосным
Out[170]: False
→ Ссылка
Автор решения: Za_наших

есть вариант сильно проще

def is_leap_year(year):
    if year % 4 == 0:
        return True 
    else:
        return False
now = is_leap_year(1961)
print(now)
→ Ссылка