在前几节课中,我们学习了编程的核心概念,如变量、数据类型、条件判断、循环和函数,是时候将这些知识组合起来,构建一个真正能解决实际问题的程序了。

代码入门教程29)
(图片来源网络,侵删)

我们将通过一个经典的项目——“待办事项列表” (To-Do List)——来学习如何组织代码,并使用一个简单但功能强大的数据结构:列表


教程 29: 构建你的第一个交互式应用 - 待办事项列表

学习目标

  1. 理解什么是“列表”(List)数据结构。
  2. 学习如何对列表进行添加、删除、查看等操作。
  3. 掌握如何将用户输入与程序逻辑结合。
  4. 完成一个可以独立运行的小型交互式程序。

第一步:什么是“列表”?

想象一下你的购物清单,上面有“牛奶”、“鸡蛋”、“面包”,这个清单就是一个“列表”,在编程中,列表也是类似的,它是一个可以存放多个项目的容器。

列表的特点:

  • 有序: 项目按添加的顺序排列。
  • 可变: 可以随时添加、删除或修改列表中的项目。
  • 可以包含不同类型的数据: 虽然通常列表里放的是相同类型的数据(比如都是字符串),但技术上也可以混合。

在Python中,我们用方括号 [] 来创建一个列表,项目之间用逗号 分隔。

代码入门教程29)
(图片来源网络,侵删)
# 创建一个空的待办事项列表
todo_list = []
# 创建一个包含一些初始项目的列表
initial_tasks = ["学习Python", "去超市购物", "给妈妈打电话"]
todo_list = initial_tasks
print("我的初始待办事项列表是:", todo_list)

第二步:为列表添加项目

一个待办事项列表最基本的功能就是能添加新的任务,我们可以使用列表的 .append() 方法。

# .append() 方法会在列表的末尾添加一个新项目
todo_list.append("完成今天的代码练习")
print("添加任务后:", todo_list)

第三步:查看列表中的所有项目

这个功能很简单,我们只需要直接打印列表变量即可。

print("\n--- 当前所有待办事项 ---")
for task in todo_list:
    print(f"- {task}")

这里我们用了一个 for 循环来遍历列表中的每一项,并用 f-string 让输出更美观。


第四步:标记任务为已完成并删除

当任务完成后,我们应该能从列表中移除它,我们可以使用 .remove() 方法,它会删除列表中第一个匹配的项目。

代码入门教程29)
(图片来源网络,侵删)
# 假设 "去超市购物" 已经完成了
task_to_remove = "去超市购物"
if task_to_remove in todo_list:
    todo_list.remove(task_to_remove)
    print(f"\n'已删除: {task_to_remove}'")
else:
    print(f"\n'任务 {task_to_remove} 不在列表中。'")
print("删除任务后:", todo_list)

注意: 在使用 .remove() 之前,最好先用 if item in list: 检查一下,否则如果列表中没有这个项目,程序会报错。


第五步:整合所有功能 - 创建交互式程序

让我们把所有功能整合起来,创建一个可以和用户交互的程序,我们将使用一个 while 循环来保持程序运行,直到用户选择退出。

完整代码

# 1. 初始化一个空的待办事项列表
todo_list = []
# 2. 创建一个主循环,让程序持续运行
while True:
    # 3. 显示菜单选项
    print("\n--- 我的待办事项列表 ---")
    print("1. 查看所有任务")
    print("2. 添加新任务")
    print("3. 删除已完成任务")
    print("4. 退出程序")
    # 4. 获取用户的选择
    choice = input("请输入你的选择 (1/2/3/4): ")
    # 5. 根据用户的选择执行相应的操作
    if choice == '1':
        # 查看所有任务
        print("\n--- 所有任务 ---")
        if not todo_list:
            print("当前没有任务,去添加一个吧!")
        else:
            for index, task in enumerate(todo_list): # 使用enumerate可以同时获取索引和值
                print(f"{index + 1}. {task}")
    elif choice == '2':
        # 添加新任务
        new_task = input("请输入要添加的新任务: ")
        if new_task: # 确保用户没有输入空内容
            todo_list.append(new_task)
            print(f"'{new_task}' 已成功添加!")
        else:
            print("任务不能为空!")
    elif choice == '3':
        # 删除任务
        if not todo_list:
            print("当前没有任务可以删除。")
        else:
            print("\n--- 当前任务列表 ---")
            for index, task in enumerate(todo_list):
                print(f"{index + 1}. {task}")
            try:
                task_num_to_remove = int(input("请输入要删除的任务编号: "))
                # 检查编号是否有效
                if 1 <= task_num_to_remove <= len(todo_list):
                    # 获取要删除的任务名称
                    task_to_remove = todo_list[task_num_to_remove - 1]
                    # 从列表中删除
                    todo_list.pop(task_num_to_remove - 1) # .pop() 可以通过索引删除
                    print(f"'{task_to_remove}' 已被删除。")
                else:
                    print("无效的编号,请重新输入。")
            except ValueError:
                print("请输入有效的数字编号!")
    elif choice == '4':
        # 退出程序
        print("\n感谢使用,再见!")
        break  # break 会跳出 while 循环,程序结束
    else:
        # 处理无效输入
        print("无效的选择,请输入 1, 2, 3 或 4。")

代码解析

  1. todo_list = []: 创建一个空列表,用来存放所有待办事项。
  2. while True:: 这是一个无限循环,它会一直运行,直到我们主动 break
  3. input(...): 这个函数会暂停程序,等待用户在键盘上输入内容,并按回车,用户输入的内容会被作为字符串返回。
  4. if/elif/else 结构: 根据用户输入的 choice 来决定执行哪一段代码。
  5. enumerate(todo_list): 这是一个非常方便的函数,它在遍历列表时,不仅返回列表中的元素,还会返回该元素的索引(从0开始),这样我们就能为每个任务编号了。
  6. try...except ValueError: 这是一个“错误处理”结构,我们尝试将用户输入的编号转换为整数 (int()),如果用户输入的不是数字(比如输入了 "abc"),程序就会抛出 ValueError 异常。except 块会捕获这个错误,并提示用户输入有效数字,从而防止程序崩溃。
  7. todo_list.pop(index): 这是另一种删除列表元素的方法,它通过元素的索引来删除,并且会返回被删除的元素,在这里我们用它来根据用户选择的编号来删除任务。
  8. break: 当用户选择 '4' 时,break 语句会立即终止 while 循环,程序结束。

总结与展望

恭喜你!你已经成功构建了你的第一个功能完整的交互式应用程序,这个项目虽然简单,但它涵盖了编程中非常核心的几个概念:

  • 数据结构 (列表)
  • 循环 (while, for)
  • 条件判断 (if/elif/else)
  • 用户交互 (input)
  • 错误处理 (try/except)

下一步可以做什么?

你可以尝试为这个程序增加更多功能,

  • 标记任务为“已完成”:增加一个状态,[ ] 学习Python[x] 学习Python
  • 编辑任务:允许用户修改已有的任务内容。
  • 将任务保存到文件:这样即使程序关闭,下次打开时任务列表依然存在。
  • 为任务设置优先级:高”、“中”、“低”。

编程的乐趣就在于不断迭代和改进你的作品,继续探索,你会发现编程的世界充满无限可能!