Создает список еженедельных расписаний. Каждое недельное расписание - это список, начиная с понедельника и заканчивая воскресеньем Выбор с понедельника по воскресенье заключается в выравнивании с порядком дня недели в Python в модулях datetime и calendar .
weeks = []
num_weeks = 4 # how many weeks to schedule
days_off = [
(2, 6), # sunday and wednesday
(0, 5), # monday and saturday
]
for week in range(num_weeks):
days_off_this_week = days_off[week % len(days_off)]
weeks.append([bool(i not in days_off_this_week) for i in range(7)])
Ключом здесь является использование оператора %
(week % len(days_off)
), а не //
, чтобы определить, какой график недели мы должны использовать. Поскольку мы используем len(days_off)
, мы можем сделать наше 2-недельное чередование 3 или 4-недельным чередованием, просто добавив запись в days_off
, и календарь все равно будет работать.
Сохранение дня недели в виде целого числа и включения / выключения в качестве логического значения дает нам большую гибкость в том, как мы позже организуем эту информацию для отображения. Мы можем легко распечатать графики, используя модуль календаря:
import calendar
from collections import OrderedDict
cal = calendar.Calendar(calendar.SUNDAY)
for week in weeks:
print(OrderedDict([(calendar.day_abbr[i], ("On" if week[i] else "Off")) for i in cal.iterweekdays()]))
Чтобы изменить первый день недели на нашем дисплее, мы просто передаем другой день недели на calendar.Calendar
, (например, calendar.Calendar(calendar.MONDAY)
).
Это не учитывает фактическую дату, но я с удовольствием добавлю это, если это будет полезно.