Загрузка данных


version = "1.2"  # создаем переменную с версией программы
tasks = {}  # делаем пустой словарик для задач чтобы программа не ругалась если файл пустой

try:  # пишем проверку если вдруг файла еще нет на компе
    with open("test.txt", "r", encoding="utf-8") as f:  # открываем наш файл с текстом для чтения
        txt = f.read()  # считываем весь текст из файла в одну большую строчку

        if txt.strip():
            exec(txt, globals())  # если в файле есть текст то превращаем его в код питона

except FileNotFoundError:
    pass  # если файла вообще не было то просто идем дальше

task_list = list(tasks.keys())  # вытаскиваем все имена задач в отдельный список для нумерации

print(f"TASK-менеджер v{version}. Команды: СТОП, СПИСОК, ДОБАВИТЬ, СТАТУС, УДАЛИТЬ")  # выводим приветствие

while True:  # запускаем бесконечный цикл чтобы программа не закрывалась сама
    cmd = input("\nКоманда: ").strip().upper()  # просим команду у пользователя и делаем буквы большими

    if cmd == "СТОП":  # если ввели СТОП то надо сохраниться и выйти
        with open("test.txt", "w", encoding="utf-8") as f:
            f.write(f"tasks={tasks}")  # записываем наш словарь прямо текстом в файл

        print("Сохранено в txt. Выход...")
        break  # пишем что все ок и ломаем цикл командой break

    elif cmd == "СПИСОК":  # если просят показать список задач
        task_list = list(tasks.keys())  # обновляем список имен чтобы номера не перепутались

        if not task_list:
            print("Список пуст!")  # если задач нет то так и пишем
        else:  # а если задачи есть то выводим их
            for i, name in enumerate(task_list, 1):
                print(f"{i}. [{'✓' if tasks[name] else ' '}] {name}")  # циклом выводим номер галочку если тру и имя

    elif cmd == "ДОБАВИТЬ":  # если хотят добавить новую задачу
        name = input("Название задачи: ").strip()  # просим ввести имя задачи

        if name and name not in tasks:
            tasks[name] = False  # добавляем в словарь со статусом фолс (не выполнено)
            task_list.append(name)
            print("Добавлено!")

    elif cmd == "СТАТУС":  # если надо поменять статус у задачи
        num = input("Номер задачи для переключения: ").strip()  # просим номер задачи на экране

        if num.isdigit() and 0 < int(num) <= len(task_list):  # проверяем что это точно число и оно есть в списке
            name = task_list[int(num) - 1]  # отнимаем 1 так как в питоне списки с нуля
            tasks[name] = not tasks[name]  # меняем тру на фолс или наоборот
            print(f"Статус '{name}' изменен!")
        else:
            print("Неверный номер!")  # если ввели фигню то пишем ошибку

    elif cmd == "УДАЛИТЬ":  # если хотят удалить задачу
        num = input("Номер задачи для удаления: ").strip()  # просим номер задачи которую надо стереть

        if num.isdigit() and 0 < int(num) <= len(task_list):  # проверяем число это или нет и подходит ли по размеру
            name = task_list.pop(int(num) - 1)  # вырезаем из списка номеров
            del tasks[name]  # полностью удаляем из основного словаря
            print(f"Задача '{name}' удалена!")
        else:
            print("Неверный номер!")  # если номер не подошел выводим это на экран