Календарь
Одна из первых программ, которую можно попробовать написать на Python — это календарь. Она не сложная, но при всем при этом, с её помощью можно потренировать навыки работы со стандартными библиотеками Tkinter и calendar.
Описание программы
Календарь написан на Python 3 с помощью графической библиотеки Tkinter. Для определения текущего дня недели и количества дней в месяце использовалась стандартная библиотека calendar. Будем отображать календарь на текущий месяц в виде таблицы. Текущую дату выделим зелёным цветом. Также добавим кнопки для перелистывания месяцев.

Подключение библиотек и объявление переменных
Подключаем стандартные библиотеки Tkinter, datetime и calendar с помощью import. Инициализируем класс root, с помощью которого будет отрисовываться графический интерфейс. Задаем заголовок окна «Calendar». Объявляем пустой список days . В дальнейшем в нем будут храниться поля таблицы. Каждое такое поле соответствует определенному дню.
В переменную now будем хранить текущую дату. В переменных year и month будут храниться год и месяц, календарь которых в данный момент отображается.
from tkinter import * import calendar import datetime root = Tk() root.title('Calendar') days = [] now = datetime.datetime.now() year = now.year month = now.month
Меняем текущий месяц
Функции prew и next будут вызываться при нажатии на одну из клавиш смены месяца. Если текущее значение месяца «январь» и пользователь нажмет на кнопку перехода на предыдущий месяц, то тогда уменьшится год и месяц поменяет значение на «декабрь».
Обратите внимание на то, что переменные month и year глобальные. Поэтому перед изменением их значения в функции необходимо использовать ключевое слово global .
Функция fill перерисовывает календарь.
def prew(): global month, year month -= 1 if month == 0: month = 12 year -= 1 fill() def next(): global month, year month += 1 if month == 13: month = 1 year += 1 fill()
Перерисовка календаря
В функции fill будет перерисовываться отображение всех элементов. Она будет вызываться в начале работы программы и каждый раз после изменения месяца, для которого нужно вывести календарь.
Вначале выводим наименование месяца и год. Вычисляем количество дней в предыдущем месяце и записываем в переменную prew_month_days . В переменноу week_day запишем номер дня недели первого числа месяца (от 0 – если первое число выпадет на понедельник, до 6 — на воскресенье).
После этого в трех циклах выводим числа и их корректируем их цвета:
- В первом цикле заполняем номера дней выбранного месяца. Отображать будем их черным цветом. Если это текущий день, то его фон делаем зелёным.
- Во втором цикле заполняем числа предыдущего месяца. Они отображаться будут серым цветом.
- В третьем цикле добавляем числа следующего месяца. Их также выводим серым цветом.
def fill(): info_label['text'] = calendar.month_name[month] + ', ' + str(year) month_days = calendar.monthrange(year, month)[1] if month == 1: prew_month_days = calendar.monthrange(year-1, 12)[1] else: prew_month_days = calendar.monthrange(year, month - 1)[1] week_day = calendar.monthrange(year, month)[0] for n in range(month_days): days[n + week_day]['text'] = n+1 days[n + week_day]['fg'] = 'black' if year == now.year and month == now.month and n == now.day: days[n + week_day]['background'] = 'green' else: days[n + week_day]['background'] = 'lightgray' for n in range(week_day): days[week_day - n - 1]['text'] = prew_month_days - n days[week_day - n - 1]['fg'] = 'gray' days[week_day - n - 1]['background'] = '#f3f3f3' for n in range(6*7 - month_days - week_day): days[week_day + month_days + n]['text'] = n+1 days[week_day + month_days + n]['fg'] = 'gray' days[week_day + month_days + n]['background'] = '#f3f3f3'
Отображение элементов
Для отображения календаря в Python 3 мы используем библиотеку Tkinter. Воспользуемся её упаковщиком grid . Он представит все создаваемые нами элементы в виде таблицы.
В первой строке в крайней левой и крайней правой ячейках (с номерами столбцов 0 и 6) отобразим кнопки смены месяцев. По центру выведем текстовое поле, в котором будет отображаться текущий год и месяц. Это поле будет занимать 5 ячеек таблицы, поэтому выставим параметр columnspan в 5.
prew_button = Button(root, text='', command=next) next_button.grid(row=0, column=6, sticky='nsew') info_label = Label(root, text='0', width=1, height=1, font=('Verdana', 16, 'bold'), fg='blue') info_label.grid(row=0, column=1, columnspan=5, sticky='nsew')
Во второй строке выведем сокращенные названия месяцев.
Дальше отображаем 6 строк по 7 столбцов, которые будем заполнять числами, обозначающими номера дней.
В завершении используем функцию fill , которая заполнит наш календарь начальными данными – календарем текущего месяца. После этого запустим цикл обработки событий mainloop .
for n in range(7): lbl = Label(root, text=calendar.day_abbr[n], width=1, height=1, font=('Verdana', 10, 'normal'), fg='darkblue') lbl.grid(row=1, column=n, sticky='nsew') for row in range(6): for col in range(7): lbl = Label(root, text='0', width=4, height=2, font=('Verdana', 16, 'bold')) lbl.grid(row=row+2, column=col, sticky='nsew') days.append(lbl) fill() root.mainloop()
Пример программы на Python 3 для вывода календаря с помощью библиотеки Tkinter достаточно прост. Он поможет программистам в изучении языка. Здесь у нас представлены различные условные операторы и циклы, работа с глобальными переменными в функциях. Самое сложное в этом примере – это отображение графических элементов.
Пример можно усложнить и выводить календарь сразу на весь год. Для этого надо будет использовать классы.
Модуль calendar

Модуль calendar позволяет напечатать себе календарик (а также содержит некоторые другие полезные функции для работы с календарями).
calendar.Calendar(firstweekday=0) — класс календаря. firstweekday — первый день недели (0 — понедельник, 6 — воскресенье).
iterweekdays() — итератор дней недели, начиная с firstweekday.
itermonthdates(year, month) — итератор для месяца month года year. Возвращает все дни этого месяца (как объекты datetime.date), а также дни до и после этого месяца до полной недели.
itermonthdays2(year, month) — как itermonthdates, только дни возвращаются не как datetime.date объекты, а кортежи (номер дня, номер дня недели).
itermonthdays(year, month) — как itermonthdates, только дни возвращаются не как datetime.date объекты, а номера дней.
monthdatescalendar(year, month) — список недель в месяце. Неделя — список из 7 объектов datetime.date.
monthdays2calendar(year, month) — как monthdatescalendar, но объекты — кортежи (номер дня, номер дня недели).
monthdayscalendar(year, month) — как monthdatescalendar, но объекты — номера дней.
calendar.TextCalendar(firstweekday=0) — класс для генерации текстового календаря.
formatmonth(theyear, themonth, w=0, l=0) — возвращает календарь на месяц в виде строки, с шириной колонки w и высотой l.
prmonth(theyear, themonth, w=0, l=0) — печатает календарь на месяц.
formatyear(theyear, w=2, l=1, c=6, m=3) — возвращает календарь на год; из m колонок, шириной даты w, высотой недели l и количеством пробелов между месяцами c.
pryear(theyear, w=2, l=1, c=6, m=3) — печатает календарь на год.
calendar.HTMLCalendar(firstweekday=0) — класс для генерации HTML календаря.
formatmonth(theyear, themonth, withyear=True) — календарь на месяц в виде HTML таблицы. Если withyear True, номер года будет включен в заголовок.
formatyear(theyear, width=3) — календарь на год в виде HTML таблицы. width — количество месяцев в ряду.
formatyearpage(theyear, width=3, css=»calendar.css», encoding=None) — календарь на год в виде полноценной HTML страницы, с подключением файла css (который вы можете создать сами), и в кодировке encoding.
calendar.LocaleTextCalendar(firstweekday=0, locale=None) — позволяет создать текстовый календарь с названиями на родном языке.
calendar.LocaleHTMLCalendar(firstweekday=0, locale=None) — позволяет создать HTML календарь с названиями на родном языке.
Например, вот такой календарик получился у меня:
| Январь | ||||||
|---|---|---|---|---|---|---|
| Пн | Вт | Ср | Чт | Пт | Сб | Вс |
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 | 31 | ||
| Февраль | ||||||
|---|---|---|---|---|---|---|
| Пн | Вт | Ср | Чт | Пт | Сб | Вс |
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | ||
| Март | ||||||
|---|---|---|---|---|---|---|
| Пн | Вт | Ср | Чт | Пт | Сб | Вс |
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 | ||||||
| Апрель | ||||||
|---|---|---|---|---|---|---|
| Пн | Вт | Ср | Чт | Пт | Сб | Вс |
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | ||||
| Май | ||||||
|---|---|---|---|---|---|---|
| Пн | Вт | Ср | Чт | Пт | Сб | Вс |
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 | |
| Июнь | ||||||
|---|---|---|---|---|---|---|
| Пн | Вт | Ср | Чт | Пт | Сб | Вс |
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 | ||||||
| Июль | ||||||
|---|---|---|---|---|---|---|
| Пн | Вт | Ср | Чт | Пт | Сб | Вс |
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 | |||
| Август | ||||||
|---|---|---|---|---|---|---|
| Пн | Вт | Ср | Чт | Пт | Сб | Вс |
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
| Сентябрь | ||||||
|---|---|---|---|---|---|---|
| Пн | Вт | Ср | Чт | Пт | Сб | Вс |
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | |||||
| Октябрь | ||||||
|---|---|---|---|---|---|---|
| Пн | Вт | Ср | Чт | Пт | Сб | Вс |
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 | 31 | ||
| Ноябрь | ||||||
|---|---|---|---|---|---|---|
| Пн | Вт | Ср | Чт | Пт | Сб | Вс |
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| Декабрь | ||||||
|---|---|---|---|---|---|---|
| Пн | Вт | Ср | Чт | Пт | Сб | Вс |
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 | ||||
Также модуль calendar предоставляет несколько полезных функций:
calendar.setfirstweekday(weekday) — устанавливает первый день недели (0 — понедельник, 6 — воскресенье). Также предоставлены значения calendar.MONDAY, calendar.TUESDAY, calendar.WEDNESDAY, calendar.THURSDAY, calendar.FRIDAY, calendar.SATURDAY и calendar.SUNDAY.
calendar.firstweekday() — возвращает первый день недели.
calendar.isleap(year) — является ли год високосным.
calendar.leapdays(y1, y2) — количество високосных лет в последовательности от y1 до y2.
calendar.weekday(year, month, day) — день недели для этой даты.
calendar.monthrange(year, month) — день недели первого дня месяца и количество дней в этом месяце.
Для вставки кода на Python в комментарий заключайте его в теги
- Модуль csv - чтение и запись CSV файлов
- Создаём сайт на Django, используя хорошие практики. Часть 1: создаём проект
- Онлайн-обучение Python: сравнение популярных программ
- Книги о Python
- GUI (графический интерфейс пользователя)
- Курсы Python
- Модули
- Новости мира Python
- NumPy
- Обработка данных
- Основы программирования
- Примеры программ
- Типы данных в Python
- Видео
- Python для Web
- Работа для Python-программистов
- Сделай свой вклад в развитие сайта!
- Самоучитель Python
- Карта сайта
- Отзывы на книги по Python
- Реклама на сайте
17) Календарь на Python
Модуль Calendar в Python имеет класс календаря, который позволяет выполнять вычисления для различных задач на основе даты, месяца и года. Кроме того, классы TextCalendar и HTMLCalendar в Python позволяют редактировать календарь и использовать его в соответствии с вашими требованиями.
Давайте посмотрим, что мы можем сделать с календарем Python.
Шаг 1) Запустите код.
- Строка кода # 1: Мы начинаем с «календаря импорта», который будет импортировать все классы этого модуля.
- Строка кода # 3: c = calendar.TextCalendar (calendar.SUNDAY) говорит переводчику создать текстовый календарь. Начало месяца будет воскресенье. В Python вы можете отформатировать календарь, так как вы можете изменить день месяца, чтобы начать с
- Строка кода # 4: str = c.formatmonth (2025,1) Мы создаем календарь на 2025 год, месяц 1 – январь
- Строка кода # 5: print str напечатает вывод.
Давайте быстро изменим значение с воскресенья на четверг и проверим вывод
Шаг 2) Вы также можете распечатать Календарь в формате HTML, эта функция полезна для разработчиков, если они хотят внести какие-либо изменения в внешний вид календаря
Шаг 3) Циклы по дням месяца с помощью c.itermonthday (2025,4), он будет получать общее количество дней в этом месяце.
- Когда вы выполните код, чтобы получить общее количество дней для определенного месяца, скажем «апрель», вы получите 30 дней на выходе, но вы также увидите некоторые нули вместе с этими днями в начале, а иногда и в конце. ,
- Нули в выходных данных означают, что день недели находится в перекрывающемся месяце, что означает, что он не принадлежит этому месяцу.
- Эти нули появляются на выходе , потому что в вашем коде вы упоминали день (четверг), поэтому при вызове функции «c.itermonthdays», он начинает отсчет дни с четверга и ваш четверга не может начинаться с датой 1 – го апреля он может быть 28 – го или 29 – го марта, так что при выполнении кода он начнет отсчет дни с 28 – го марта и любые дней после этого до 1 – го апреля. Эти дни будут засчитываться как ноль, и в выходных данных вы увидите эти нули, и то же самое применимо к концу месяца.
- Таким образом, кроме даты 1-30 все даты из предыдущего, а также после месяца будут отображаться в выходных данных как нули.
Шаг 4) Вы можете получить данные из локальной системы, например, месяцы или дни недели и т. Д.
-
Вывод здесь показывает, что мы распечатали название месяца из локальной системы. Кроме того, вы также можете получить название дня недели, как показано ниже
Выходные данные будут зависеть от локальной системы. Предположим, что если ваша локальная система находится в некоторых других странах, она выдаст выходные данные в соответствии с локальными настройками этой страны. Здесь у нас есть месяцы, поэтому не будет никакой разницы, но если это будет неделя или день, она, безусловно, будет другой.
Шаг 5) Вы можете получить список определенного дня на целый год. Например, в каждый первый понедельник недели есть день аудита. Вы хотите знать дату первого понедельника для каждого месяца. Вы можете использовать этот код
- mycal = calendar.monthcalendar (2025, месяц) создаст календарь на месяц
- Установите переменные week1 и Week2 для первой и второй недели календаря
- Проверьте, содержит ли неделя 1 понедельник, установите день аудита
- В противном случае установите день аудита как первый понедельник на неделе 2
- Выходные данные показывают дату первого понедельника, который выпадает на этот месяц.
- Длина этого объекта Cal будет определенной длины в зависимости от того, сколько недель в этом месяце. В нашем случае это будет один или два, так как первый понедельник недели будет в первую неделю чаще всего, но если нет, то рассмотрим вторую неделю. Давайте посмотрим подробно, почему мы также рассматриваем вторую неделю.
- Здесь мы используем постоянный календарь понедельник, объект календаря дает вам константы, которые представляют воскресенье, понедельник, вторник и так далее, и так далее. Мы видели это ранее. Таким образом, если на первой неделе день, представленный константой Monday, не равен 0, помните, что нули означают дни, принадлежащие другому месяцу. Итак, в этом случае, если он равен нулю, это будет понедельник, который относится к предыдущему месяцу. Но если первый понедельник не равен 0, это означает, что мой день аудита будет в первой неделе. В противном случае, если это 0, тогда первый понедельник не в первой неделе месяца, он должен быть во второй.
- Итак, тогда я говорю «хорошо», установите мою переменную дня аудита равной понедельнику, представленному на второй неделе. Итак, день аудита вернется с тем, какой день будет для первой или второй недели.
Пример Python 2
import calendar # Create a plain text calendar c = calendar.TextCalendar(calendar.THURSDAY) str = c.formatmonth(2025, 1, 0, 0) print str # Create an HTML formatted calendar hc = calendar.HTMLCalendar(calendar.THURSDAY) str = hc.formatmonth(2025, 1) print str # loop over the days of a month # zeroes indicate that the day of the week is in a next month or overlapping month for i in c.itermonthdays(2025, 4): print i # The calendar can give info based on local such a names of days and months (full and abbreviated forms) for name in calendar.month_name: print name for day in calendar.day_name: print day # calculate days based on a rule: For instance an audit day on the second Monday of every month # Figure out what days that would be for each month, we can use the script as shown here for month in range(1, 13): # It retrieves a list of weeks that represent the month mycal = calendar.monthcalendar(2025, month) # The first MONDAY has to be within the first two weeks week1 = mycal[0] week2 = mycal[1] if week1[calendar.MONDAY] != 0: auditday = week1[calendar.MONDAY] else: # if the first MONDAY isn't in the first week, it must be in the second week auditday = week2[calendar.MONDAY] print "%10s %2d" % (calendar.month_name[month], auditday)
Пример Python 3
import calendar # Create a plain text calendar c = calendar.TextCalendar(calendar.THURSDAY) str = c.formatmonth(2025, 1, 0, 0) print(str) # Create an HTML formatted calendar hc = calendar.HTMLCalendar(calendar.THURSDAY) str = hc.formatmonth(2025, 1) print(str) # loop over the days of a month # zeroes indicate that the day of the week is in a next month or overlapping month for i in c.itermonthdays(2025, 4): print(i) # The calendar can give info based on local such a names of days and months (full and abbreviated forms) for name in calendar.month_name: print(name) for day in calendar.day_name: print(day) # calculate days based on a rule: For instance an audit day on the second Monday of every month # Figure out what days that would be for each month, we can use the script as shown here for month in range(1, 13): # It retrieves a list of weeks that represent the month mycal = calendar.monthcalendar(2025, month) # The first MONDAY has to be within the first two weeks week1 = mycal[0] week2 = mycal[1] if week1[calendar.MONDAY] != 0: auditday = week1[calendar.MONDAY] else: # if the first MONDAY isn't in the first week, it must be in the second week auditday = week2[calendar.MONDAY] print("%10s %2d" % (calendar.month_name[month], auditday))
Резюме:
- В Python вы можете отформатировать календарь так, как вы хотите, так как вы можете изменить день месяца, чтобы начать
- Распечатать календарь в формате HTML
- Получить данные из локальной системы, например, месяцы или будни
- Получить список определенного дня на целый год
Учебное пособие по Python CALENDAR с примером
Модуль календаря в Python имеет класс календаря, который позволяет выполнять вычисления для различных задач на основе даты, месяца и года. Кроме того, классы TextCalendar и HTMLCalendar в Python позволяют вам редактировать календарь и использовать его в соответствии с вашими требованиями.
Давайте посмотрим, что мы можем сделать с календарем Python.
Шаг 1) Запустите код.

- Строка кода № 1: Мы начинаем с «календаря импорта», который импортирует все классы этого модуля.
- Строка кода № 3: c= Calendar.TextCalendar(calendar.SUNDAY) сообщает интерпретатору о необходимости создания текстового календаря. Начало месяца будет в воскресенье. В Python вы можете форматировать календарь, начиная с изменения дня месяца.
- Строка кода № 4: str= c.formatmonth(2025,1) Создаём календарь на 2025 год, месяц 1 — январь.
- Строка кода № 5: print str распечатает выходные данные.
Давайте быстро изменим значение с воскресенья на четверг и проверим результат.

Шаг 2) Вы также можете распечатать календарь в формате HTML. Эта функция полезна для разработчиков, если они хотят внести какие-либо изменения во внешний вид календаря.

Шаг 3) Петли по дням месяца, используя c.itermonthday (2025,4), он получит общее количество дней в этом месяце.

- Когда вы выполняете код, чтобы получить общее количество дней в определенном месяце, например «Апрель», вы получите на выходе 30 дней, но вы также увидите несколько нулей вместе с этими днями в начале, а иногда и в конце. .
- Нули в выводе означают, что день недели находится в перекрывающемся месяце, то есть он не принадлежит этому месяцу.
- Эти нули появляются в выходных данных, потому что в вашем коде вы упомянули день (четверг), поэтому, когда вы вызываете функцию «c.itermonthdays», она начнет отсчет дней с четверга, и ваш четверг может не начинаться с даты 1. st апреля это может быть 28 th или 29 th марта, поэтому при выполнении кода он начнет отсчитывать дни с 28 th марта и в любые дни после этого до 1 st апреля. Эти дни будут считаться нулевыми, и в выводе вы увидите эти нули, и то же самое применимо к концу месяца.
- Таким образом, за исключением дат 1–30, все даты предыдущего и последующего месяца будут отображаться в выводе как нули.
Шаг 4) Вы можете получить данные из локальной системы, например, месяцы, дни недели и т. д.

-
Вывод здесь показывает, что мы распечатали название месяца из локальной системы. Аналогичным образом вы также можете получить название дня недели, как показано ниже.
Выходные данные будут зависеть от локальной системы. Предположим, что ваша локальная система относится к какой-то другой стране, тогда выходные данные будут соответствовать локальным настройкам этой страны. Здесь у нас есть месяцы, поэтому разницы не будет, но если это неделя или день, это, безусловно, будет отличаться.

Шаг 5) Вы можете получить список определенного дня за весь год. Например, день аудита приходится на каждый первый понедельник недели. Вы хотите знать дату первого понедельника каждого месяца. Вы можете использовать этот код

- mycal = Calendar.monthcalendar(2025,month) создаст календарь на месяц
- Установите переменные неделя1 и неделя2 в первую и вторую неделю календаря.
- Проверьте, содержит ли неделя 1 понедельник, установите день аудита.
- В противном случае установите день аудита как первый понедельник на неделе 2.
- Выходные данные показывают дату первого понедельника, выпадающего на этот месяц.
- Длина этого объекта Cal будет определенной в зависимости от количества недель в месяце. В нашем случае это будет один или два, так как первый понедельник недели чаще всего приходится на первую неделю, но если нет, то рассмотрим вторую неделю. Давайте посмотрим подробно, почему мы также рассматриваем вторую неделю.
- Здесь мы используем константу календаря Monday. Объект календаря предоставляет константы, обозначающие воскресенье, понедельник, вторник и т. д. и т. п. Мы видели это раньше. Итак, если на первой неделе день, представленный константой Monday, не равен 0, помните, что нули означают дни, принадлежащие другому месяцу. Итак, в данном случае, если оно равно нулю, это будет понедельник, принадлежащий предыдущему месяцу. Но если первый понедельник не равен 0, это означает, что мой день аудита будет в пределах первой недели. В противном случае, если это значение равно 0, то первый понедельник приходится не на первую неделю месяца, а на вторую.
- Итак, я говорю: «Хорошо, установите переменную дня аудита на понедельник, представленный второй неделей». Итак, день аудита вернется с любым днем первой или второй недели.
Пример Python 2
import calendar # Create a plain text calendar c = calendar.TextCalendar(calendar.THURSDAY) str = c.formatmonth(2025, 1, 0, 0) print str # Create an HTML formatted calendar hc = calendar.HTMLCalendar(calendar.THURSDAY) str = hc.formatmonth(2025, 1) print str # loop over the days of a month # zeroes indicate that the day of the week is in a next month or overlapping month for i in c.itermonthdays(2025, 4): print i # The calendar can give info based on local such a names of days and months (full and abbreviated forms) for name in calendar.month_name: print name for day in calendar.day_name: print day # calculate days based on a rule: For instance an audit day on the second Monday of every month # Figure out what days that would be for each month, we can use the script as shown here for month in range(1, 13): # It retrieves a list of weeks that represent the month mycal = calendar.monthcalendar(2025, month) # The first MONDAY has to be within the first two weeks week1 = mycal[0] week2 = mycal[1] if week1[calendar.MONDAY] != 0: auditday = week1[calendar.MONDAY] else: # if the first MONDAY isn't in the first week, it must be in the second week auditday = week2[calendar.MONDAY] print "%10s %2d" % (calendar.month_name[month], auditday)
Пример Python 3
import calendar # Create a plain text calendar c = calendar.TextCalendar(calendar.THURSDAY) str = c.formatmonth(2025, 1, 0, 0) print(str) # Create an HTML formatted calendar hc = calendar.HTMLCalendar(calendar.THURSDAY) str = hc.formatmonth(2025, 1) print(str) # loop over the days of a month # zeroes indicate that the day of the week is in a next month or overlapping month for i in c.itermonthdays(2025, 4): print(i) # The calendar can give info based on local such a names of days and months (full and abbreviated forms) for name in calendar.month_name: print(name) for day in calendar.day_name: print(day) # calculate days based on a rule: For instance an audit day on the second Monday of every month # Figure out what days that would be for each month, we can use the script as shown here for month in range(1, 13): # It retrieves a list of weeks that represent the month mycal = calendar.monthcalendar(2025, month) # The first MONDAY has to be within the first two weeks week1 = mycal[0] week2 = mycal[1] if week1[calendar.MONDAY] != 0: auditday = week1[calendar.MONDAY] else: # if the first MONDAY isn't in the first week, it must be in the second week auditday = week2[calendar.MONDAY] print("%10s %2d" % (calendar.month_name[month], auditday))
Итоги
- В Python вы можете форматировать календарь так, как вам хочется, поскольку вы можете изменить день начала месяца.
- Распечатайте календарь в формате HTML.
- Получите данные из локальной системы, например, месяцы или дни недели.
- Получить список определенного дня за весь год
- Онлайн-компилятор Python (редактор/интерпретатор/IDE) для запуска кода
- Учебное пособие по PyUnit: Платформа модульного тестирования Python (с примером)
- Как установить Python в Windows [Pycharm IDE]
- Hello World: создайте свою первую программу на Python
- Переменные Python: как определить/объявить типы строковых переменных