Високосные годы с добавлением дополнительного дня к февралю происходят каждые четыре года, чтобы синхронизировать наш календарь с орбитой Земли вокруг Солнца. Это явление ставит интересную проблему: как мы можем эффективно найти и распечатать все високосные годы между любыми заданными годами? В этой статье блога мы рассмотрим несколько методов решения этой проблемы, приведя попутно примеры кода. Давайте погрузимся!
Метод 1: цикл по годам
Самый простой подход — перебрать каждый год в заданном диапазоне и проверить, является ли он високосным. Вот пример на Python:
def print_leap_years(start_year, end_year):
leap_years = []
for year in range(start_year, end_year + 1):
if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
leap_years.append(year)
print(leap_years)
Метод 2: понимание списка
Более краткий способ достижения того же результата — использование понимания списка. Этот метод уменьшает количество строк кода и предлагает более элегантное решение:
def print_leap_years(start_year, end_year):
leap_years = [year for year in range(start_year, end_year + 1) if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)]
print(leap_years)
Метод 3: библиотека DateTime
Другой подход заключается в использовании библиотеки DateTime, которая предоставляет встроенные функции для обработки дат и високосных лет. Вот пример использования библиотеки Python DateTime:
import datetime
def print_leap_years(start_year, end_year):
leap_years = []
for year in range(start_year, end_year + 1):
if datetime.datetime(year, 2, 29).strftime('%Y') == str(year):
leap_years.append(year)
print(leap_years)
Метод 4: функция-генератор
Если эффективность использования памяти является проблемой, мы можем использовать функцию-генератор для получения високосных лет один за другим вместо хранения их в списке. Этот метод особенно полезен при работе с большими диапазонами:
def generate_leap_years(start_year, end_year):
for year in range(start_year, end_year + 1):
if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
yield year
def print_leap_years(start_year, end_year):
leap_years = list(generate_leap_years(start_year, end_year))
print(leap_years)