Python基于列表实现简易待办事项列表代码
在Python初学阶段,实现一个命令行待办事项列表(To-Do List)是熟悉基础数据结构与程序控制流的经典练习。本文将利用Python内置的列表(list)作为核心存储容器,搭配while循环和条件分支结构,构建一个具备查看、添加、删除功能的轻量控制台待办工具,并深入分析列表的索引映射与边界处理细节。
一、为什么选择列表与核心操作原理解析
Python的列表是一种有序、可变的序列容器。待办事项列表的核心操作包括添加新事项、按次序展示事项以及按序号删除指定事项。列表自带的方法天然支持这些操作:
- 添加事项:调用
todos.append(item)将新任务追加到序列末尾,时间复杂度为 \(O(1)\)。 - 遍历查看:使用内置函数
enumerate(todos, start=1)产生从1开始的自然序号,符合人类日常阅读习惯,同时对应底层从0开始的内存索引。 - 删除事项:调用
todos.pop(index)移除指定索引位置的元素,后续元素会自动向前平移补位。
图1:Python列表在内存中的有序存储结构与用户界面序号映射关系
二、程序流程设计与逐步实现
待办事项程序需要一个持续运行的交互循环。用户进入主界面后,程序打印菜单并等待用户指令;执行对应动作后,再次显示菜单,直到用户明确输入退出命令。
图2:待办事项交互循环与控制流转示意图
1. 完整实现代码
以下是使用Python实现的控制台待办事项列表完整可运行代码。代码包含了输入清洗、序号越界校验和异常输入捕获机制。
# todo_list.py
def main():
todos = []
while True:
print("\n===== 简易待办事项管理 =====")
print("1. 查看待办事项")
print("2. 添加待办事项")
print("3. 删除待办事项")
print("4. 退出程序")
print("=============================")
choice = input("请输入操作指令编号 (1-4): ").strip()
if choice == "1":
if not todos:
print("【提示】当前清单为空,暂无待办事项。")
else:
print("\n--- 当前待办事项 ---")
for index, item in enumerate(todos, start=1):
print(f"{index}. {item}")
elif choice == "2":
new_item = input("请输入要添加的待办内容: ").strip()
if new_item:
todos.append(new_item)
print(f"【成功】已添加待办: {new_item}")
else:
print("【警告】待办内容不能为空,已取消添加。")
elif choice == "3":
if not todos:
print("【提示】清单为空,无可删除事项。")
continue
print("\n--- 当前待办事项 ---")
for index, item in enumerate(todos, start=1):
print(f"{index}. {item}")
user_input = input("请输入要删除的事项编号: ").strip()
if not user_input.isdigit():
print("【错误】请输入有效的正整数编号。")
continue
target_num = int(user_input)
if 1 <= target_num <= len(todos):
removed_item = todos.pop(target_num - 1)
print(f"【成功】已删除事项: {removed_item}")
else:
print(f"【错误】编号超出版范围,请输入 1 到 {len(todos)} 之间的数字。")
elif choice == "4":
print("感谢使用,程序已安全退出。")
break
else:
print("【错误】无效指令,请输入菜单对应的数字 1 到 4。")
if __name__ == "__main__":
main()
代码关键点说明:
strip()方法去除了首尾空格,避免用户仅输入空格导致存入空字符串。user_input.isdigit()在类型转换前判断字符串是否由全数字组成,有效防止抛出ValueError异常中断程序。todos.pop(target_num - 1)将用户的展示序号转换为合法的列表内部索引,并在删除的同时返回被删除项供反馈提示。
三、关键方案对比:纯字符串列表 vs 字典对象列表
在基础场景下,使用纯字符串列表存储事项十分简洁直观;但在真实应用中,事项往往伴随“完成状态”(未完成 / 已完成)。不同数据结构的设计对功能拓展性有直接影响。
图3:纯字符串列表与字典对象列表在结构复杂度与功能扩展性上的权衡对比
| 对比维度 | 纯字符串列表 (当前实现) | 字典列表 (进阶扩展) |
|---|---|---|
| 数据结构示例 | ["买菜", "整理文件"] |
[{"task": "买菜", "done": False}] |
| 内存开销 | 极低,仅存储字符串引用 | 适中,每个元素为一个字典对象 |
| 状态标记能力 | 弱(需直接修改字符串前缀) | 强(直接切换布尔字段 done) |
| 适用教学阶段 | 刚掌握序列与基础循环控制 | 学习字典操作、数据建模与JSON存储 |
四、控制台运行交互示例
运行上述脚本后,在终端中的典型交互过程如下所示:
# 启动程序并添加第一条待办事项
===== 简易待办事项管理 =====
1. 查看待办事项
2. 添加待办事项
3. 删除待办事项
4. 退出程序
=============================
请输入操作指令编号 (1-4): 2
请输入要添加的待办内容: 学习Python基础列表
【成功】已添加待办: 学习Python基础列表
# 继续添加并查看清单
请输入操作指令编号 (1-4): 2
请输入要添加的待办内容: 练习命令行循环代码
【成功】已添加待办: 练习命令行循环代码
请输入操作指令编号 (1-4): 1
--- 当前待办事项 ---
1. 学习Python基础列表
2. 练习命令行循环代码
# 删除第一项并退出
请输入操作指令编号 (1-4): 3
--- 当前待办事项 ---
1. 学习Python基础列表
2. 练习命令行循环代码
请输入要删除的事项编号: 1
【成功】已删除事项: 学习Python基础列表
请输入操作指令编号 (1-4): 4
感谢使用,程序已安全退出。
五、知识梳理与进阶扩展路径
通过基于列表的简易待办事项项目,我们完整串联了序列操作、用户交互、输入过滤与程序分支控制。为了在后续学习中平滑过渡到工业级开发,可以从输入防御、数据持久化及面向对象三个层次进行拓展。
图4:待办事项系统所涉及的核心Python知识点与后续拓展全景路线
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













