From b2793500fd3e6546385ca4191d72d1e7a1586184 Mon Sep 17 00:00:00 2001 From: Kaushal Bhattarai Date: Thu, 23 Oct 2025 22:10:31 -0500 Subject: [PATCH 1/4] Added priority feature to tasks --- todo.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/todo.py b/todo.py index a72fa61..1334d4f 100644 --- a/todo.py +++ b/todo.py @@ -2,9 +2,14 @@ class TodoApp: def __init__(self): self.tasks = [] - def add_task(self, task): - self.tasks.append({"task": task, "completed": False}) - print(f"Task '{task}' added!") + # Add a new priority feature for tasks when adding them + def add_task(self, task, priority="Medium"): + self.tasks.append({ + "task": task, + "priority": priority, + "completed": False + }) + print(f"Task '{task}' added with priority '{priority}'!") def remove_task(self, task_index): try: @@ -20,13 +25,14 @@ def mark_completed(self, task_index): except IndexError: print("Invalid task index.") + # Updated view to show priority and completion status def view_tasks(self): if not self.tasks: print("No tasks to show.") else: for idx, task in enumerate(self.tasks): status = "Completed" if task["completed"] else "Not Completed" - print(f"{idx}. {task['task']} - {status}") + print(f"{idx}. {task['task']} - {task['priority']} - {status}") def main(): @@ -41,9 +47,11 @@ def main(): print("5. Exit") choice = input("Choose an option: ") + # updated to handle priority when adding tasks if choice == '1': task = input("Enter task: ") - todo_app.add_task(task) + priority = input("Enter priority (High/Medium/Low): ").capitalize() + todo_app.add_task(task, priority) elif choice == '2': todo_app.view_tasks() try: From a8c2f8418d083d3816c8fec467048a189f581884 Mon Sep 17 00:00:00 2001 From: Kaushal Bhattarai Date: Thu, 20 Nov 2025 18:36:57 -0600 Subject: [PATCH 2/4] Added save/load functionality to persist tasks between sessions --- .gitignore | 3 +++ todo.py | 33 ++++++++++++++++++++++++++------- 2 files changed, 29 insertions(+), 7 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2353092 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +#ignore the runtime storage files +.vscode/ +tasks.json \ No newline at end of file diff --git a/todo.py b/todo.py index a72fa61..ca45b89 100644 --- a/todo.py +++ b/todo.py @@ -1,10 +1,16 @@ +import json +import os + class TodoApp: - def __init__(self): + def __init__(self, filename="tasks.json"): + self.filename = filename self.tasks = [] - - def add_task(self, task): - self.tasks.append({"task": task, "completed": False}) - print(f"Task '{task}' added!") + self.load_tasks() # Load tasks on start + + # Add priority feature to tasks + def add_task(self, task, priority="Medium"): + self.tasks.append({"task": task, "completed": False, "priority": priority}) # Default priority is Medium + print(f"Task '{task}' with priority '{priority}' added!") def remove_task(self, task_index): try: @@ -26,8 +32,19 @@ def view_tasks(self): else: for idx, task in enumerate(self.tasks): status = "Completed" if task["completed"] else "Not Completed" - print(f"{idx}. {task['task']} - {status}") + print(f"{idx}. {task['task']} - {status} - Priority: {task['priority']}") + + #json save and load functions when exit and start the app + def save_tasks(self): + with open(self.filename, "w") as f: + json.dump(self.tasks, f, indent=4) + print("Tasks saved!") + def load_tasks(self): + if os.path.exists(self.filename): + with open(self.filename, "r") as f: + self.tasks = json.load(f) + print(f"Loaded {len(self.tasks)} task(s) from {self.filename}") def main(): todo_app = TodoApp() @@ -43,7 +60,8 @@ def main(): if choice == '1': task = input("Enter task: ") - todo_app.add_task(task) + priority = input("Enter priority (High/Medium/Low): ") + todo_app.add_task(task, priority) elif choice == '2': todo_app.view_tasks() try: @@ -61,6 +79,7 @@ def main(): elif choice == '4': todo_app.view_tasks() elif choice == '5': + todo_app.save_tasks() # Save on exit print("Goodbye!") break else: From a896d0a3ec7a6a34c6a1a89a971d53472a44a3bc Mon Sep 17 00:00:00 2001 From: Kaushal Bhattarai Date: Thu, 20 Nov 2025 18:49:37 -0600 Subject: [PATCH 3/4] Added save/load functionality to persist tasks between sessions --- .gitignore | 2 +- todo.py | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 2353092..99f3a19 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ #ignore the runtime storage files -.vscode/ +.vscode/ tasks.json \ No newline at end of file diff --git a/todo.py b/todo.py index ca45b89..62da3dc 100644 --- a/todo.py +++ b/todo.py @@ -34,7 +34,7 @@ def view_tasks(self): status = "Completed" if task["completed"] else "Not Completed" print(f"{idx}. {task['task']} - {status} - Priority: {task['priority']}") - #json save and load functions when exit and start the app + # Save tasks to a JSON file def save_tasks(self): with open(self.filename, "w") as f: json.dump(self.tasks, f, indent=4) @@ -79,7 +79,8 @@ def main(): elif choice == '4': todo_app.view_tasks() elif choice == '5': - todo_app.save_tasks() # Save on exit + # Save on exit + todo_app.save_tasks() print("Goodbye!") break else: From 25c7cf8472c1d84dcbab86a81b84ed5dc1244f42 Mon Sep 17 00:00:00 2001 From: Kaushal Bhattarai Date: Thu, 20 Nov 2025 19:02:02 -0600 Subject: [PATCH 4/4] Update: json save/load functionality --- tasks.json | 7 +++++++ todo.py | 37 ++++++++++++++++++++++++------------- 2 files changed, 31 insertions(+), 13 deletions(-) create mode 100644 tasks.json diff --git a/tasks.json b/tasks.json new file mode 100644 index 0000000..4488a8c --- /dev/null +++ b/tasks.json @@ -0,0 +1,7 @@ +[ + { + "task": "Building web app", + "completed": false, + "priority": "high" + } +] \ No newline at end of file diff --git a/todo.py b/todo.py index 1334d4f..dc78d96 100644 --- a/todo.py +++ b/todo.py @@ -1,15 +1,16 @@ +import json +import os + class TodoApp: - def __init__(self): + def __init__(self, filename="tasks.json"): + self.filename = filename self.tasks = [] + self.load_tasks() # Load tasks on start - # Add a new priority feature for tasks when adding them + # Setting priority when adding a task def add_task(self, task, priority="Medium"): - self.tasks.append({ - "task": task, - "priority": priority, - "completed": False - }) - print(f"Task '{task}' added with priority '{priority}'!") + self.tasks.append({"task": task, "completed": False, "priority": priority}) + print(f"Task '{task}' with priority '{priority}' added!") def remove_task(self, task_index): try: @@ -25,15 +26,25 @@ def mark_completed(self, task_index): except IndexError: print("Invalid task index.") - # Updated view to show priority and completion status def view_tasks(self): if not self.tasks: print("No tasks to show.") else: for idx, task in enumerate(self.tasks): status = "Completed" if task["completed"] else "Not Completed" - print(f"{idx}. {task['task']} - {task['priority']} - {status}") + print(f"{idx}. {task['task']} - {status} - Priority: {task['priority']}") + + # Save tasks to a JSON file + def save_tasks(self): + with open(self.filename, "w") as f: + json.dump(self.tasks, f, indent=4) + print("Tasks saved!") + def load_tasks(self): + if os.path.exists(self.filename): + with open(self.filename, "r") as f: + self.tasks = json.load(f) + print(f"Loaded {len(self.tasks)} task(s) from {self.filename}") def main(): todo_app = TodoApp() @@ -47,11 +58,10 @@ def main(): print("5. Exit") choice = input("Choose an option: ") - # updated to handle priority when adding tasks if choice == '1': task = input("Enter task: ") - priority = input("Enter priority (High/Medium/Low): ").capitalize() - todo_app.add_task(task, priority) + priority = input("Enter priority (High/Medium/Low): ") # New priority input + todo_app.add_task(task, priority) elif choice == '2': todo_app.view_tasks() try: @@ -69,6 +79,7 @@ def main(): elif choice == '4': todo_app.view_tasks() elif choice == '5': + todo_app.save_tasks() # Save on exit print("Goodbye!") break else: