手把手教你用 Python 写一个终端待办清单工具,告别花哨的 App

4 阅读3分钟

用最简单的代码,管理你每天要做的事。

不知道你有没有这样的感觉:手机上装了一堆待办清单 App,功能越来越复杂,反而懒得打开了。
作为一个开发者,我更愿意用终端 + 纯文本的方式来管理任务——简单、快速、没有干扰。

今天我就用 Python 写一个极简的终端待办工具,支持:

  • 查看待办列表
  • 添加任务
  • 完成任务(删除)
  • 数据持久化(存到本地 JSON 文件)

全程不到 50 行代码,非常适合新手练习文件操作和命令行交互。


1. 设计思路

我们用一个 tasks.json 文件来存储任务列表,每个任务是一个字典:

json

[
    {"id": 1, "name": "写一篇掘金文章", "done": false},
    {"id": 2, "name": "散步30分钟", "done": true}
]

程序启动后,让用户输入命令:

  • list 显示所有任务
  • add <任务名> 添加任务
  • done <id> 标记任务为完成
  • exit 退出

2. 代码实现

创建 todo.py,代码如下:

python

import json
import os

TASKS_FILE = "tasks.json"

def load_tasks():
    if not os.path.exists(TASKS_FILE):
        return []
    with open(TASKS_FILE, "r", encoding="utf-8") as f:
        return json.load(f)

def save_tasks(tasks):
    with open(TASKS_FILE, "w", encoding="utf-8") as f:
        json.dump(tasks, f, ensure_ascii=False, indent=2)

def show_tasks(tasks):
    if not tasks:
        print("✨ 暂无任务,快去添加吧!")
        return
    for task in tasks:
        status = "✅" if task["done"] else "⏳"
        print(f"{status} [{task['id']}] {task['name']}")

def add_task(tasks, name):
    new_id = max([t["id"] for t in tasks], default=0) + 1
    tasks.append({"id": new_id, "name": name, "done": False})
    save_tasks(tasks)
    print(f"✔ 已添加任务:{name}")

def complete_task(tasks, task_id):
    for task in tasks:
        if task["id"] == task_id:
            task["done"] = True
            save_tasks(tasks)
            print(f"🎉 完成任务:{task['name']}")
            return
    print("❌ 未找到该编号的任务")

def main():
    tasks = load_tasks()
    print("📋 终端待办工具 (输入 help 查看命令)")
    while True:
        cmd = input("> ").strip()
        if cmd == "list":
            show_tasks(tasks)
        elif cmd.startswith("add "):
            name = cmd[4:].strip()
            if name:
                add_task(tasks, name)
            else:
                print("请填写任务内容")
        elif cmd.startswith("done "):
            try:
                task_id = int(cmd[5:].strip())
                complete_task(tasks, task_id)
            except ValueError:
                print("请输入正确的任务编号")
        elif cmd == "help":
            print("可用命令:list, add <任务名>, done <编号>, exit")
        elif cmd == "exit":
            print("👋 再见!")
            break
        else:
            print("未知命令,输入 help 查看帮助")

if __name__ == "__main__":
    main()

3. 使用效果

运行 python todo.py,然后就可以愉快地管理任务了:

text

📋 终端待办工具 (输入 help 查看命令)
> add 学习掘金小册
✔ 已添加任务:学习掘金小册
> add 整理笔记
✔ 已添加任务:整理笔记
> list
⏳ [1] 学习掘金小册
⏳ [2] 整理笔记
> done 1
🎉 完成任务:学习掘金小册
> list
✅ [1] 学习掘金小册
⏳ [2] 整理笔记
> exit
👋 再见!

所有任务会自动保存在 tasks.json 中,下次打开依然存在。


4. 扩展思路

你可以根据自己的需求继续增强这个工具:

  • 添加 截止日期 字段,支持按时间排序
  • 增加 编辑任务 功能
  • 用 argparse 做成更规范的命令行工具
  • 同步到云端(比如接入 GitHub Gist)

这个小工具虽然简单,但涵盖了文件 I/O、JSON 处理、命令行交互等基础知识点,很适合作为 Python 初学者的练手项目。