TGViewer
Python Lounge: работа и стажировки для программистов Python Lounge: работа и стажировки для программистов @python_lounge · 3.72K subscribers
Post #305 3.18K
​​Как одной математической формулой по номеру месяца посчитать количество дней в нем?

Попробуем написать функцию f(x), которая бы давала следующий список значений (таблица №1), то есть количество дней в месяцах. Помимо стандартных арифметических операций, мы будем использовать целочисленное деление и взятие остатка по модулю.

Обычно количество дней в месяце колеблется между 30 и 31. При этом, можно заметить зависимость этого числа от четности месяца — значит, воспользуемся операцией взятия остатка по модулю 2. Кажется, это должно быть нечто, вроде:

f₁(x) = 30 + x % 2
# таблица №2

Пока что не обращая внимания на февраль, нам нужно, чтобы +1 в делимом «активировалось» только при достижении аргументом значений, больших 8. При этом значения аргумента не могут превосходить 12. Значит, нам идеально подойдет целочисленное деление аргумента на 8:

f₃(x) = 30 + (x + x // 8) % 2
# таблица №3

Все правильно, кроме февраля. Как неожиданно. В самой последней версии нашей формулы февралю достались целых 30 дней. А потому нам нужно отсечь у него пару дней. Естественно, от этого пострадают и еще какие-то месяцы, поэтому нам придется пожертвовать именно январем, затем подправив формулу и для него. Отсечь дни для первого и второго месяцев можно с помощью выражения 2 % x. Тогда наша формула принимает уже следующий вид:

f₄(x) = 28 + (x + x // 8) % 2 + 2 % x
# таблица №4

Остался последний шаг — подлатать январь. Это сделать не так сложно: просто добавим 2 дня только к нему, т.е. к такому месяцу, чей номер меньше либо равен единице. Как вам идея использовать для этой цели 1 // x? Проверяем:

f₅(x) = 28 + (x + x // 8) % 2 + 2 % x + 1 // x * 2
# таблица №5

Превосходно, 12 из 12. Подобная функция на языке Python может быть записана следующим образом:

f = lambda x: 28 + (x + x // 8) % 2 + 2 % x + 1 // x * 2
print(f'В июне {f(6)} дней')
# Out: В июне 30 дней
More from @python_lounge
  1. Jul 27, 2026Промпт-инженер для AI-фото в Onephoto Опыт с нейросетями не обязателен, важнее насмотренно…
  2. Jul 23, 2026Представитель в Т-Банк Отклик в 1 клик Идеальный вариант подработки/работы! Среднее вознаг…
  3. Jul 15, 2026Менеджер по продажам Мы занимаемся профессиональным рекрутингом для Министерства обороны Р…
  4. Jul 9, 2026Media Buyer / Performance Marketer (Meta* Ads) — eCommerce / Digital Products Мы — MotionP…
  5. May 26, 2026Специалист техподдержки в Mailganer Мы развиваем кросс-канальную платформу рассылок для ИТ…
  6. May 6, 2026Мы ищем Project / Product Manager’а, который способен взять проект целиком: от структуры и…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →