Задание
Разработать на языке Python программу, которая будет генерировать календарь и сохранять его в файл.
Функционал программы
Функционал данной программы очень простой. Программа генерирует календарь за выбранный год и месяц и сохраняет его в текстовый файл.
Фрагмент программного кода
# Генерация календарей import datetime # Задвем константы DAYS = ('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday') MONTHS = ('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December') print('Calendar Maker') while True: # Цикл для запроса у пользователя года print('Enter the year for the calendar:') response = input('> ') if response.isdecimal() and int(response) > 0: year = int(response) break print('Please enter a numeric year, like 2023.') while True: # Цикл для запроса у пользователя месяца. print('Enter the month for the calendar, 1-12:') response = input('> ') if not response.isdecimal(): print('Please enter a numeric month, like 3 for March') continue month = int(response) if 1 <= month <= 12: break print('Please enter a number from 1 to 12.') def getCalendarFor(year, month): calText = '' # calText содержит строковое значение с календарем # Размещаем месяц и год вверху календаря calText += (' ' * 34) + MONTHS[month - 1] + ' ' + str(year) + '\n' calText += '...Sunday.....Monday....Tuesday...Wednesday...' \ 'Thursday...Friday...Saturday...\n' # Горизонтальная линия-разделитель недель weekSeparator = ('+----------' * 7) + '+\n' # Пустые строки содержат по десять пробелов между разделителями дней | blankRow = ('| ' * 7) + '|\n' # Получаем первую дату месяца. (Модуль datetime берет на себя # все сложные нюансы календарных вычислений ) currentDate = datetime.date(year, month, 1) # Отнимаем от currentDate по дню, пока не дойдем до воскресенья. # (weekday() возвращает для воскресенья 6, а не 0.) while currentDate.weekday() != 6: currentDate -= datetime.timedelta(days=1) while True: # Проходим в цикле по всем неделям в месяце calText += weekSeparator dayNumberRow = '' # dayNumberRow - cстрока с метками номеров дней for i in range(7): dayNumberLabel = str(currentDate.day).rjust(2) dayNumberRow += '|' + dayNumberLabel + (' ' * 8) currentDate += datetime.timedelta(days=1) # Переходим к следующему дню dayNumberRow += '|\n' # Добавляем вертикальную линию после субботы # Добавляем в текст календаря строку с номерами дней и 3 пустых строки calText += dayNumberRow for i in range(3): calText += blankRow # (!) Попробуйте заменить 3 на 5 или 10 # Проверяем, закончили ли мы обработку месяца if currentDate.month != month: break # Добавляем горизонтальную линию в самом низу календаря calText += weekSeparator return calText calText = getCalendarFor(year, month) print(calText) # Выводим календарь # Сохраняем календарь в текстовом файле calendarFilename = 'calendar_{}_{}.txt'.format(year, month) with open(calendarFilename, 'w') as fileObj: fileObj.write(calText) print('Saved to ' + calendarFilename)
Скриншот архива с проектом
Пояснения по запуску программы
Запустить PyCharm, открыть проект, запустить код на выполнение.
admin