Demos / nocturnal (1).py
Basementup's picture
Upload nocturnal (1).py
b1a291b verified
import os
import json
FILE_NAME = "tasks.json"
tasks = []
def load_tasks():
"""Attempts to load tasks from the JSON file if it exists."""
global tasks
if os.path.exists(FILE_NAME):
try:
with open(FILE_NAME, 'r') as file:
tasks = json.load(file)
print(f"βœ… Tasks successfully loaded from {FILE_NAME}.")
except Exception as e:
print(f"❌ Error loading tasks: {e}")
tasks = []
else:
print(f"πŸ“„ No previous task file ({FILE_NAME}) found. Starting with an empty list.")
def save_tasks():
"""Saves the current list of tasks to the JSON file."""
try:
with open(FILE_NAME, 'w') as file:
json.dump(tasks, file, indent=4)
print(f"βœ… Tasks successfully saved to {FILE_NAME}.")
except Exception as e:
print(f"❌ Error saving tasks: {e}")
def add_task(task_description):
"""Adds a new task to the list with a 'completed' status."""
tasks.append({"task": task_description, "completed": False})
print(f"✨ Task added: '{task_description}'")
def view_tasks():
"""Displays all tasks with their index and status."""
if not tasks:
print("
πŸ“ Your To-Do List is empty. Time to add a task!")
return
print("
--- Current To-Do List ---")
for index, task in enumerate(tasks, start=1):
status = "βœ…" if task["completed"] else "❌"
print(f"{index}. [{status}] {task['task']}")
print("--------------------------")
def delete_task(task_number):
"""Deletes a task based on its number (index + 1)."""
try:
task_index = int(task_number) - 1
if 0 <= task_index < len(tasks):
deleted_task = tasks.pop(task_index)
print(f"πŸ—‘οΈ Deleted task: '{deleted_task['task']}'")
else:
print("❌ Invalid task number. Please try again.")
except ValueError:
print("❌ Invalid input. Please enter a number.")
def mark_completed(task_number):
"""Marks a task as completed based on its number (index + 1)."""
try:
task_index = int(task_number) - 1
if 0 <= task_index < len(tasks):
tasks[task_index]["completed"] = True
print(f"πŸŽ‰ Marked as completed: '{tasks[task_index]['task']}'")
else:
print("❌ Invalid task number. Please try again.")
except ValueError:
print("❌ Invalid input. Please enter a number.")
def main_menu():
"""Displays the main menu and handles user choices."""
load_tasks()
while True:
view_tasks()
print("
--- COMMANDS ---")
print("1: Add a new task")
print("2: Delete a task (by number)")
print("3: Mark a task as completed (by number)")
print("4: Save & Exit")
print("----------------")
choice = input("Select a command (1-4): ")
if choice == '1':
task_desc = input("Enter the task description: ")
if task_desc:
add_task(task_desc)
else:
print("Task description cannot be empty.")
elif choice == '2':
task_num = input("Enter the number of the task to delete: ")
delete_task(task_num)
elif choice == '3':
task_num = input("Enter the number of the task to mark as completed: ")
mark_completed(task_num)
elif choice == '4':
save_tasks()
print("πŸ‘‹ System shutting down. Goodbye!")
break
else:
print("❌ Invalid choice. Please select a number from 1 to 4.")
if __name__ == "__main__":
main_menu()