https://pastein.ru/t/f-s
скопируйте уникальную ссылку для отправки
Загрузка данных
from collections import defaultdict
from datetime import datetime, timedelta
from docx import Document
from docx.shared import Pt, RGBColor
routine_data = {
"после сна": [],
"вечером": [],
"дополнительно": defaultdict(lambda: defaultdict(list)), # Для дней недели и специальных недель
"перед сном": []
}
def main_menu():
while True:
print("\nГлавное меню:")
print("1. Добавить рутину в категорию")
print("2. Экспортировать рутину в Word")
print("3. Выход")
action = input("Введите номер действия: ")
if action == "1":
add_routine_menu()
elif action == "2":
export_routine_to_word()
elif action == "3":
print("Выход...")
break
else:
print("Неверный ввод. Попробуйте снова.")
def add_routine_menu():
while True:
print("\nВыберите категорию:")
print("1. после сна")
print("2. вечером")
print("3. дополнительно")
print("4. перед сном")
print("0. Назад")
category = input("Введите номер категории: ")
if category == "1":
add_to_category("после сна")
elif category == "2":
add_to_category("вечером")
elif category == "3":
add_additional_routine()
elif category == "4":
add_to_category("перед сном")
elif category == "0":
break
else:
print("Неверный ввод. Попробуйте снова.")
def add_to_category(category):
print(f"\nДобавление рутин в категорию '{category}'. Введите по одной на строку. Для завершения нажмите Enter на пустой строке.")
while True:
task = input("Задание: ")
if task.strip():
routine_data[category].append(task.strip())
else:
break
def add_additional_routine():
while True:
print("\nВыберите подкатегорию для 'дополнительно':")
print("1. Добавить рутину по понедельникам")
print("2. Добавить рутину по вторникам")
print("3. Добавить рутину по средам")
print("4. Добавить рутину по четвергам")
print("5. Добавить рутину по пятницам")
print("6. Добавить рутину по субботам")
print("7. Добавить рутину по воскресеньям")
print("8. Добавить рутину на каждую вторую неделю года")
print("9. Добавить рутину на каждую третью неделю года")
print("10. Добавить рутину на каждую четвёртую неделю года")
print("0. Назад")
subcategory = input("Введите номер подкатегории: ")
if subcategory == "0":
break
elif subcategory in map(str, range(1, 8)):
day = ["понедельник", "вторник", "среда", "четверг", "пятница", "суббота", "воскресенье"][int(subcategory) - 1]
add_to_additional(day)
elif subcategory in ["8", "9", "10"]:
week_option = {"8": "вторая", "9": "третья", "10": "четвёртая"}[subcategory]
add_weekly_additional(week_option)
else:
print("Неверный ввод. Попробуйте снова.")
def add_to_additional(day):
print(f"\nДобавление рутины на '{day}'. Введите по одной на строку. Для завершения нажмите Enter на пустой строке.")
while True:
task = input("Задание: ")
if task.strip():
routine_data["дополнительно"]["еженедельно"][day].append(task.strip())
else:
break
def add_weekly_additional(week_option):
while True:
print(f"\nВыберите день недели для добавления рутины ({week_option} неделя):")
print("1. Понедельник")
print("2. Вторник")
print("3. Среда")
print("4. Четверг")
print("5. Пятница")
print("6. Суббота")
print("7. Воскресенье")
print("0. Назад")
day_option = input("Введите номер дня: ")
if day_option == "0":
break
elif day_option in map(str, range(1, 8)):
day = ["понедельник", "вторник", "среда", "четверг", "пятница", "суббота", "воскресенье"][int(day_option) - 1]
print(f"\nДобавление рутины на '{day}' ({week_option} неделя). Введите по одной на строку. Для завершения нажмите Enter на пустой строке.")
while True:
task = input("Задание: ")
if task.strip():
routine_data["дополнительно"][week_option][day].append(task.strip())
else:
break
else:
print("Неверный ввод. Попробуйте снова.")
def export_routine_to_word():
print("\nЭкспорт рутины в Word...")
file_name = input("Введите название файла (без расширения): ")
start_date = input("Введите начальную дату (в формате ДД.М.ММММ): ")
end_date = input("Введите конечную дату (в формате ДД.М.ММММ): ")
try:
start_date = datetime.strptime(start_date, "%d.%m.%Y")
end_date = datetime.strptime(end_date, "%d.%m.%Y")
document = Document()
style = document.styles["Normal"]
style.font.name = "Calibri"
style.font.size = Pt(12)
style.font.color.rgb = RGBColor(0, 0, 0)
current_date = start_date
while current_date <= end_date:
day_name = current_date.strftime("%A")
day_name_russian = {
"Monday": "понедельник",
"Tuesday": "вторник",
"Wednesday": "среда",
"Thursday": "четверг",
"Friday": "пятница",
"Saturday": "суббота",
"Sunday": "воскресенье"
}[day_name]
month_name_russian = {
"January": "января",
"February": "февраля",
"March": "марта",
"April": "апреля",
"May": "мая",
"June": "июня",
"July": "июля",
"August": "августа",
"September": "сентября",
"October": "октября",
"November": "ноября",
"December": "декабря"
}[current_date.strftime("%B")]
date_header = f"{current_date.day} {month_name_russian} ({day_name_russian})"
paragraph = document.add_paragraph()
run = paragraph.add_run(date_header)
run.bold = True
document.add_paragraph() # Пустая строка после даты
for category, tasks in routine_data.items():
if category == "дополнительно":
weekly_tasks = tasks.get("еженедельно", {}).get(day_name_russian, [])
week_number = (current_date.isocalendar()[1] - 1) % 4 + 1
week_label = ["первая", "вторая", "третья", "четвёртая"][week_number - 1]
special_tasks = tasks.get(week_label, {}).get(day_name_russian, [])
tasks = weekly_tasks + special_tasks
if tasks:
category_paragraph = document.add_paragraph()
category_run = category_paragraph.add_run(category)
category_run.bold = True
for task in tasks:
document.add_paragraph(task)
document.add_paragraph() # Пустая строка после категории
current_date += timedelta(days=1)
document.save(f"{file_name}.docx")
print(f"Рутина успешно экспортирована в '{file_name}.docx'.")
except Exception as e:
print(f"Ошибка: {e}")
if __name__ == "__main__":
main_menu()