Python

Как узнать количество дней в месяце в Python

В Python количество дней в месяце удобно получать через модуль calendar. Функция calendar.monthrange(year, month) возвращает пару значений: день недели первого дня месяца и количество дней в месяце. Нам обычно нужен второй элемент

import calendar

days = calendar.monthrange(2026, 2)[1]
print(days)

Результат

28

Функция учитывает год, поэтому февраль в високосном году будет иметь 29 дней

Короткий ответ

import calendar

year = 2024
month = 2

days = calendar.monthrange(year, month)[1]
print(days)

Результат

29

2024 год високосный, поэтому в феврале 29 дней

Что возвращает monthrange

import calendar

result = calendar.monthrange(2026, 6)
print(result)

Результат будет похож на такой

(0, 30)

Первое число — день недели первого дня месяца, второе число — количество дней в месяце. Если нужна только длина месяца, берите индекс [1]

days = calendar.monthrange(2026, 6)[1]

Как сделать функцию

import calendar

def days_in_month(year, month):
    return calendar.monthrange(year, month)[1]

print(days_in_month(2026, 1))
print(days_in_month(2026, 2))
print(days_in_month(2024, 2))

Результат

31
28
29

Такая функция удобна, если задача повторяется в нескольких местах программы

Как принять год и месяц от пользователя

import calendar

year = int(input("Введите год: "))
month = int(input("Введите месяц числом от 1 до 12: "))

days = calendar.monthrange(year, month)[1]
print("Дней в месяце:", days)

Если пользователь введет месяц вне диапазона 1-12, Python выдаст ошибку. Для учебной программы лучше добавить проверку

import calendar

year = int(input("Введите год: "))
month = int(input("Введите месяц числом от 1 до 12: "))

if 1 <= month <= 12:
    days = calendar.monthrange(year, month)[1]
    print("Дней в месяце:", days)
else:
    print("Месяц должен быть от 1 до 12")

Как проверить високосный год

В модуле calendar есть функция isleap()

import calendar

print(calendar.isleap(2024))
print(calendar.isleap(2026))

Результат

True
False

Для количества дней в месяце отдельно проверять високосный год не нужно: monthrange() уже делает это. Но isleap() полезна, если вам нужно вывести отдельное объяснение пользователю

import calendar

year = 2024
month = 2

days = calendar.monthrange(year, month)[1]

if month == 2 and calendar.isleap(year):
    print("Это февраль високосного года")

print("Дней:", days)

Как получить название месяца

Если нужно вывести не только число, но и название месяца, можно использовать calendar.month_name

import calendar

year = 2026
month = 6

days = calendar.monthrange(year, month)[1]
month_name = calendar.month_name[month]

print(month_name, year, "—", days)

По умолчанию названия будут на английском. Для русских названий проще завести свой список

months = [
    "", "январь", "февраль", "март", "апрель", "май", "июнь",
    "июль", "август", "сентябрь", "октябрь", "ноябрь", "декабрь"
]

month = 2
print(months[month])

Пустая строка в начале нужна, чтобы январь был под индексом 1, февраль под индексом 2 и дальше так же, как номера месяцев

Альтернативный способ через datetime

Можно вычислить количество дней как разницу между первым днем следующего месяца и первым днем текущего месяца. Но для новичка это длиннее

from datetime import date, timedelta

def days_in_month(year, month):
    if month == 12:
        next_month = date(year + 1, 1, 1)
    else:
        next_month = date(year, month + 1, 1)

    last_day = next_month - timedelta(days=1)
    return last_day.day

print(days_in_month(2024, 2))

Этот вариант полезен, если вы уже работаете с объектами date, но для обычной задачи calendar.monthrange() проще

Мини-практика

Создайте файл days_in_month.py

import calendar

months = [
    "", "январе", "феврале", "марте", "апреле", "мае", "июне",
    "июле", "августе", "сентябре", "октябре", "ноябре", "декабре"
]

year = int(input("Год: "))
month = int(input("Месяц: "))

if 1 <= month <= 12:
    days = calendar.monthrange(year, month)[1]
    print(f"В {months[month]} {year} года дней: {days}")
else:
    print("Номер месяца должен быть от 1 до 12")

Проверьте февраль 2024 и февраль 2026 года. Это сразу покажет, что високосный год учитывается

Частые ошибки

Первая ошибка — передавать месяц как строку. monthrange() ждет число месяца от 1 до 12, поэтому ввод пользователя нужно преобразовать через int()

Вторая ошибка — забыть, что январь — это 1, а не 0. В calendar.monthrange() месяцы нумеруются так же, как в обычном календаре

Третья ошибка — писать свою таблицу дней и забыть про високосный февраль. Если есть год и месяц, лучше использовать calendar.monthrange()

Что почитать дальше по Python

Если нужен общий маршрут по теме, откройте рубрику Python. Для соседних задач пригодятся эти разборы:

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные

Настройки cookie

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x