python タスク

import os
import json
from datetime import datetime

class Task:
    def __init__(self, description, deadline=None, completed=False):
        self.description = description
        self.deadline = deadline
        self.completed = completed

    def to_dict(self):
        return {
            "description": self.description,
            "deadline": self.deadline.strftime("%Y-%m-%d %H:%M") if self.deadline else None,
            "completed": self.completed
        }

    @classmethod
    def from_dict(cls, task_dict):
        deadline_str = task_dict.get("deadline")
        deadline = datetime.strptime(deadline_str, "%Y-%m-%d %H:%M") if deadline_str else None
        return cls(task_dict["description"], deadline, task_dict["completed"])

class TaskList:
    def __init__(self, filename):
        self.filename = filename
        self.tasks = []
        self.load_tasks()

    def load_tasks(self):
        if os.path.exists(self.filename):
            with open(self.filename, 'r') as file:
                task_data = json.load(file)
                self.tasks = [Task.from_dict(task_dict) for task_dict in task_data]

    def save_tasks(self):
        with open(self.filename, 'w') as file:
            task_data = [task.to_dict() for task in self.tasks]
            json.dump(task_data, file, indent=4)

    def add_task(self, description, deadline_str=None):
        deadline = datetime.strptime(deadline_str, "%Y-%m-%d %H:%M") if deadline_str else None
        task = Task(description, deadline)
        self.tasks.append(task)
        self.save_tasks()
        print("タスクを追加しました")

    def edit_task(self, task_index, description=None, deadline_str=None):
        if 1 <= task_index <= len(self.tasks):
            task = self.tasks[task_index - 1]
            if description:
                task.description = description
            if deadline_str:
                task.deadline = datetime.strptime(deadline_str, "%Y-%m-%d %H:%M") if deadline_str else None
            self.save_tasks()
            print("タスクを編集しました")
        else:
            print("無効なタスク番号です")

    def display_tasks(self):
        if not self.tasks:
            print("タスクはありません")
        else:
            print("タスク一覧:")
            for i, task in enumerate(self.tasks, 1):
                status = "完了" if task.completed else "未完了"
                deadline = task.deadline.strftime("%Y-%m-%d %H:%M") if task.deadline else "なし"
                print(f"{i}. [{status}] {task.description} (締切: {deadline})")

    def mark_task_completed(self, task_index):
        if 1 <= task_index <= len(self.tasks):
            task = self.tasks[task_index - 1]
            task.completed = True
            self.save_tasks()
            print(f"タスク '{task.description}' を完了にしました")
        else:
            print("無効なタスク番号です")

    def delete_task(self, task_index):
        if 1 <= task_index <= len(self.tasks):
            deleted_task = self.tasks.pop(task_index - 1)
            self.save_tasks()
            print(f"タスク '{deleted_task.description}' を削除しました")
        else:
            print("無効なタスク番号です")

def main():
    filename = "tasks.json"
    task_list = TaskList(filename)

    while True:
        print("\n操作を選択してください:")
        print("1. タスクを追加")
        print("2. タスクを編集")
        print("3. タスク一覧を表示")
        print("4. タスクを完了にする")
        print("5. タスクを削除する")
        print("6. 終了")

        choice = input("選択 (1/2/3/4/5/6): ")

        if choice == '6':
            break
        elif choice == '1':
            description = input("新しいタスクの説明を入力してください: ")
            deadline_str = input("締切日時 (YYYY-MM-DD HH:MM) を入力してください (未入力可): ")
            task_list.add_task(description, deadline_str)
        elif choice == '2':
            task_list.display_tasks()
            task_index = int(input("編集するタスクの番号を入力してください: "))
            description = input("新しい説明を入力してください (未入力で変更なし): ")
            deadline_str = input("新しい締切日時 (YYYY-MM-DD HH:MM) を入力してください (未入力で変更なし): ")
            task_list.edit_task(task_index, description, deadline_str)
        elif choice == '3':
            task_list.display_tasks()
        elif choice == '4':
            task_list.display_tasks()
            task_index = int(input("完了にするタスクの番号を入力してください: "))
            task_list.mark_task_completed(task_index)
        elif choice == '5':
            task_list.display_tasks()
            task_index = int(input("削除するタスクの番号を入力してください: "))
            task_list.delete_task(task_index)
        else:
            print("無効な選択です")

if __name__ == "__main__":
    main()

投稿者: chosuke

趣味はゲームやアニメや漫画などです

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です