SmartQuery /ВОПРОС → ПРИМЕР → ПОНЯТНЫЙ ОТВЕТ
Языки и платформы

Число дней в месяце в Python: calendar.monthrange

calendar.monthrange(year, month) возвращает пару: день недели первого числа и количество дней месяца. Для числа дней нужен второй элемент; февраль автоматически зависит от года.

import calendar

_, days = calendar.monthrange(2024, 2)
print(days)  # 29

print(calendar.monthrange(2023, 2)[1])  # 28
print(calendar.monthrange(2024, 12)[1]) # 31

Вариант через даты

Разность первого числа следующего месяца и первого числа текущего тоже даёт длительность. При этом отдельно обработайте декабрь:

from datetime import date

year, month = 2024, 2
start = date(year, month, 1)
next_month = (date(year + 1, 1, 1) if month == 12
              else date(year, month + 1, 1))
print((next_month - start).days)  # 29

Для крайних допустимых лет date переход к следующему году требует отдельного решения. Если задача только о числе дней, monthrange короче и не нуждается в построении следующей даты.

Проверка ввода

Месяц должен соответствовать контракту1…12, год — правилам выбранного API. Проверьте февраль високосного и обычного года, декабрь и неверный месяц. У модуля datetime нет функции monthrange: используйте calendar.monthrange или разность дат.

Документация