Високосный год на 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)