Python新手进阶经典案例:从零实现一个To-Do-List(待办事项)工具

admin 2026-06-30 06:45:25 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 该文档是Python编程入门教程,指导新手从零实现命令行待办事项工具。核心内容包括使用列表和字典管理任务数据,实现CRUD操作功能,提供完整可运行代码示例,并指出常见错误及解决方法。文档还建议后续扩展方向如持久化存储和图形化界面开发。 综合评分: 83 文章分类: 其他


cover_image

Python新手进阶经典案例:从零实现一个To-Do-List(待办事项)工具

原创

Crossin先生 Crossin先生

Crossin的编程教室

2026年6月24日 17:08 江苏

在小说阅读器读本章

去阅读

大家好,欢迎来到 Crossin 的编程教室。

刚学完 Python 的基础语法(变量、列表、循环、函数),很多小伙伴都会陷入一个迷茫期:“语法我好像都看懂了,但怎么一到自己写项目,大脑就一片空白呢 ?”

学了语法不会做项目,那是缺乏一个把知识点串起来的“抓手”。今天 Crossin 带大家来做个几乎每个程序员入门都绕不开的经典练手项目——To-Do-List(待办事项管理工具)。

这个项目虽然小,但它能帮你一口气把数据的存储、增删改查逻辑、用户交互这些基本功全部打通。

  1. To-Do-List 的底层逻辑

在动手前,别把这个工具想得太复杂,在计算机眼里,它其实就是一个“智能列表”:

  • 任务内核 = 一个列表(List):整个待办清单就是一个大箱子,里面放着一条条任务。
  • 单个任务 = 一个带标签的字典(Dict):比如 {“task”: “背10个单词”, “done”: False}。task 是内容,done 代表是否完成。
  • 核心操作 = 经典的 CRUD:添加任务(Create)、查看任务(Read)、勾选完成(Update)、删除任务(Delete)。

是不是瞬间清晰了?接下来,我们就用纯 Python 把逻辑一步步变成现实。

  1. 核心功能模块拆解

接下来我们将采用模块化拆解,一步步来凑齐这个工具的核心拼图:

2.1. 数据初始化与查看任务

首先,我们需要一个容器来装任务,并且能把它们整齐地打印出来。

如果是已完成的任务,前面打个 [X],未完成的打个 [ ]

# 1. 初始化一个空列表来装所有任务todo_list = []
# 2. 查看任务的函数def show_tasks():    if not todo_list:        print("\n当前暂无待办事项,快去添加一个吧!")        return
    print("\n====== 我的待办清单 ======")    # enumerate 可以同时获取索引(从1开始)和任务内容    for index, item in enumerate(todo_list, 1):        # 根据 done 的状态决定打勾还是留空        status = "[X]" if item["done"] else "[ ]"        print(f"{index}. {status} {item['task']}")    print("==========================")

2.2. 添加、完成与删除任务

有了容器,接下来就是对里面的数据进行增、改、删了。

# 添加任务def add_task(task_name):    # 每条任务都是一个字典,默认未完成    new_task = {"task": task_name, "done": False}    todo_list.append(new_task)    print(f"成功添加任务:{task_name}")
# 标记任务完成def complete_task(index):    # 程序员数数从0开始,用户输入从1开始,所以要减1    todo_list[index - 1]["done"] = True    print(f"任务 {index} 已标记为完成!")
# 删除任务def delete_task(index):    removed = todo_list.pop(index - 1)    print(f"已成功删除任务:{removed['task']}")
  1. 完整交互代码

有了上面的功能块,我们用一个 while True 循环把它们缝合在一起,配上用户输入提示,一个完整的命令行工具就诞生了!

这里我们额外加入一些异常处理,防止用户瞎输入导致程序崩溃。

把下面的代码保存为一个 .py 文件,直接运行即可:

todo_list = []
def show_tasks():    if not todo_list:        print("\n当前暂无待办事项,快去添加一个吧!")        return    print("\n====== 我的待办清单 ======")    for index, item in enumerate(todo_list, 1):        status = "[X]" if item["done"] else "[ ]"        print(f"{index}. {status} {item['task']}")    print("==========================")
while True:    show_tasks()    print("\n请输入操作指令:1.添加任务  2.完成任务  3.删除任务  4.退出程序")    choice = input("请选择 (1/2/3/4): ").strip()
    if choice == "1":        task_name = input("请输入要添加的任务内容: ").strip()        if task_name:            new_task = {"task": task_name, "done": False}            todo_list.append(new_task)            print(f"成功添加任务:{task_name}")        else:            print("任务内容不能为空!")
    elif choice in ["2", "3"]:        if not todo_list:            print("当前清单为空,无法操作!")            continue
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;try:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; num =&nbsp;int(input(f"请输入要操作的任务序号 (1-{len(todo_list)}): "))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;if&nbsp;1&nbsp;<= num <=&nbsp;len(todo_list):&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;if&nbsp;choice ==&nbsp;"2":&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; todo_list[num -&nbsp;1]["done"] =&nbsp;True&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;print(f"任务&nbsp;{num}&nbsp;已标记为完成!")&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;else:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; removed = todo_list.pop(num -&nbsp;1)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;print(f"已成功删除任务:{removed['task']}")&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;else:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;print("输入的序号不在范围内,请重新输入!")&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;except&nbsp;ValueError:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;print("请输入有效的数字序号!")
&nbsp; &nbsp;&nbsp;elif&nbsp;choice ==&nbsp;"4":&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;print("感谢使用,再见!")&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;break&nbsp; &nbsp;&nbsp;else:&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;print("无效的指令,请重新输入!")
  1. 新手错误避坑

写这类管理工具时,有些隐形坑很容易让人抓狂,写的时候一定要注意“避坑”:

4.1. 类型不匹配:明明输入了序号,程序却一直提示错误。

input() 接收到的所有内容默认都是字符串(比如 ‘1’)。必须用 int() 函数强转成整数,才能用来做列表的索引或数字对比。

4.2. 索引越界(IndexError):输入了一个过大的数字,程序直接闪退报错。

列表的长度是动态的。在将用户输入的序号作为索引去拿数据前,必须先用 1 <= num <= len(todo_list) 进行判断,避免越界。

4.3. 中文输入法导致语法错误(SyntaxError)

代码里的冒号 :、中括号 [] 必须全是英文半角字符。新手写代码 80% 的报错都是因为不小心切到了中文输入法。

  1. 总结与扩展

编程能力的提高是需要不断练习的,看懂≠学会。与其反复找教程学习,不如亲手打开 IDE,实现一个能成功添加、删除、完成任务的 To-Do-List 工具。

在这个骨架的基础上,你还可以给它添砖加瓦,例如:

  • 持久化存储:引入 json 模块,把任务保存到本地文件,这样下次打开程序时,之前写的任务不会消失。
  • 图形化界面:尝试用 Python 自带的 tkinter 库给它套上一个可视化的外壳。

还想了解什么编程知识点或者开发案例,可以来评论区留言。

如果本文对你有帮助,欢迎点赞、评论、转发。你们的支持是我更新的动力~


添加微信 crossin123,加入编程教室共同学习~

感谢转发点赞的各位~


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:Crossin的编程教室 Crossin先生 Crossin先生《Python新手进阶经典案例:从零实现一个To-Do-List(待办事项)工具》

评论:0   参与:  0