在日常生活中,待办事项应用是我们管理任务和时间的好帮手。今天,我们将用Python实现一个简单的命令行待办事项应用。这个应用将支持添加任务、删除任务、查看任务列表和标记任务为已完成的功能。通过这个项目,你可以学习到如何处理用户输入、操作文件以及实现基本的功能逻辑。
一、项目需求
我们的待办事项应用需要实现以下功能:
-
添加任务:用户可以输入任务内容并将其添加到任务列表中。
-
查看任务列表:用户可以查看所有任务,包括已完成的任务。
-
删除任务:用户可以通过任务编号删除某个任务。
-
标记任务为已完成:用户可以将某个任务标记为已完成。
-
持久化存储:任务列表需要保存到文件中,以便在程序重新启动时恢复。
二、项目实现
1. 数据结构设计
我们需要一个数据结构来存储任务列表。每个任务可以是一个字典,包含以下字段:
-
id
:任务的唯一标识符。 -
description
:任务的描述。 -
completed
:布尔值,表示任务是否已完成。
任务列表可以是一个列表,存储所有任务的字典。
2. 文件存储
我们将使用JSON格式将任务列表保存到文件中。JSON是一种轻量级的数据交换格式,非常适合用于存储和读取任务数据。
3. 功能实现
以下是完整的代码实现:
Python复制
import json
import os
# 定义任务文件路径
TASK_FILE = "tasks.json"
# 加载任务列表
def load_tasks():
if os.path.exists(TASK_FILE):
with open(TASK_FILE, "r") as file:
return json.load(file)
return []
# 保存任务列表
def save_tasks(tasks):
with open(TASK_FILE, "w") as file:
json.dump(tasks, file, indent=4)
# 添加任务
def add_task(description):
tasks = load_tasks()
task_id = len(tasks) + 1
tasks.append({"id": task_id, "description": description, "completed": False})
save_tasks(tasks)
print(f"Task added: {description}")
# 查看任务列表
def view_tasks():
tasks = load_tasks()
if not tasks:
print("No tasks found.")
return
for task in tasks:
status = "Done" if task["completed"] else "Pending"
print(f"{task['id']}. [{status}] {task['description']}")
# 删除任务
def delete_task(task_id):
tasks = load_tasks()
tasks = [task for task in tasks if task["id"] != task_id]
save_tasks(tasks)
print(f"Task with ID {task_id} deleted.")
# 标记任务为已完成
def complete_task(task_id):
tasks = load_tasks()
for task in tasks:
if task["id"] == task_id:
task["completed"] = True
break
save_tasks(tasks)
print(f"Task with ID {task_id} marked as completed.")
# 主函数
def main():
while True:
print("\nTodo App")
print("1. Add Task")
print("2. View Tasks")
print("3. Delete Task")
print("4. Complete Task")
print("5. Exit")
choice = input("Enter your choice: ")
if choice == "1":
description = input("Enter task description: ")
add_task(description)
elif choice == "2":
view_tasks()
elif choice == "3":
task_id = int(input("Enter task ID to delete: "))
delete_task(task_id)
elif choice == "4":
task_id = int(input("Enter task ID to mark as completed: "))
complete_task(task_id)
elif choice == "5":
print("Exiting...")
break
else:
print("Invalid choice. Please try again.")
if __name__ == "__main__":
main()
4. 代码解析
数据存储
-
使用
json
模块将任务列表保存到文件中。每次程序启动时,从文件加载任务列表。 -
如果文件不存在,则初始化一个空的任务列表。
功能实现
-
添加任务:为每个任务生成唯一的
id
,并将其添加到任务列表中。 -
查看任务列表:遍历任务列表,显示每个任务的状态和描述。
-
删除任务:通过任务
id
从任务列表中移除任务。 -
标记任务为已完成:通过任务
id
查找任务并将其completed
字段设置为True
。
用户交互
-
使用
input()
函数获取用户输入。 -
提供一个简单的菜单,让用户选择操作。
三、运行和测试
-
将代码保存为
todo_app.py
。 -
在命令行中运行程序:
bash复制
python todo_app.py
-
按照菜单提示操作,添加任务、查看任务列表、删除任务和标记任务为已完成。
四、扩展功能
-
任务优先级:为每个任务添加优先级字段,并在查看任务时按优先级排序。
-
任务分类:支持为任务添加分类标签,便于管理不同类型的任务。
-
定时提醒:结合
datetime
模块,为任务设置提醒时间,并在到期时提醒用户。 -
图形界面:使用
tkinter
或其他GUI库为应用添加图形界面。
五、总结
通过这个简单的命令行待办事项应用,我们学习了如何处理用户输入、操作文件以及实现基本的功能逻辑。这个项目不仅可以帮助你巩固Python编程的基础知识,还可以扩展到更复杂的任务管理系统。希望你喜欢这个项目,并在实践中不断探索和学习!