Изучение различных методов печати високосных лет между любыми заданными годами

Високосные годы с добавлением дополнительного дня к февралю происходят каждые четыре года, чтобы синхронизировать наш календарь с орбитой Земли вокруг Солнца. Это явление ставит интересную проблему: как мы можем эффективно найти и распечатать все високосные годы между любыми заданными годами? В этой статье блога мы рассмотрим несколько методов решения этой проблемы, приведя попутно примеры кода. Давайте погрузимся!

Метод 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)