В Python скрипте ниже рассмотрим как подсчитать количества определенных дней недели в диапазоне дат в Python. Где это может понадобиться? Допустим, Вы получаете некий доход 2 раза в неделю каждый месяц в году. С помощью данного простого скрипта Вы сможете рассчитать доход за каждый месяц. Пример, хоть и надуманный,...

Подсчет количества определенных дней недели в диапазоне дат в Python

В Python скрипте ниже рассмотрим как подсчитать количества определенных дней недели в диапазоне дат в Python. Где это может понадобиться? Допустим, Вы получаете некий доход 2 раза в неделю каждый месяц в году. С помощью данного простого скрипта Вы сможете рассчитать доход за каждый месяц. Пример, хоть и надуманный, но позволит Вам поработать с датой и временем в Python, динамическим формированием стандартной структуры данных - словаря - dict, консольным вводом и выводом.

Файл work_automation.py


# импортируем классы для работы с датой и промежутком дат
from datetime import date, timedelta


# возвращает словарь месяц - период времени
def get_work_months(year):
    return {
        'ЯНВАРЬ':   (year - 1, 12, year, 1),
        'ФЕВРАЛЬ':  (year, 1, year, 2),
        'МАРТ':     (year, 2, year, 3),
        'АПРЕЛЬ':     (year, 3, year, 4),
        'МАЙ':       (year, 4, year, 5),
        'ИЮНЬ':      (year, 5, year, 6),
        'ИЮЛЬ':      (year, 6, year, 7),
        'АВГУСТ':    (year, 7, year, 8),
        'СЕНТЯБРЬ': (year, 8, year, 9),
        'ОКТЯБРЬ':   (year, 9, year, 10),
        'НОЯБРЬ':  (year, 10, year, 11),
        'ДЕКАБРЬ':  (year, 11, year, 12),
    }


# получаем количество интересующих нас дней недели в месяце
def get_weekdays_count(from_year, from_month, to_year, to_month):

    # дни недели по умолчанию начинаются с нуля
    TUESDAY = 1   # ищем вторник
    THURSDAY = 3  # и четверг, к примеру
    calc_day = 23 # период расчета

    # создаем объекты даты
    from_date = date(from_year, from_month, calc_day)
    to_date = date(to_year, to_month, calc_day)

    # создаем генератор для всех дней из диапазона
    daygen = [from_date + timedelta(day + 1) for day in range((to_date - from_date).days)]

    # подсчитываем количество вторников и четвергов в диапазоне
    days = sum(1 for day in daygen if day.weekday() in [TUESDAY, THURSDAY])

    return days


файл main.py


# импортируем модули нашей программы
from work_automation import get_work_months, get_weekdays_count

# точка запуска файла
if __name__ == '__main__':

    year_input = input('Введите год: ')
    work_year = get_work_months(int(year_input))

    print('\nКоличество вторников и четвергов в периоде:\n')

    for month_name in work_year:
        work_period = work_year[month_name]

        # разворачиваем кортеж (неизменяемый список) в отдельные переменные
        work_days_count = get_weekdays_count(*work_period)
        print(f'{month_name} = {work_days_count}')


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