当前位置:首页>python>每天的事情总是忘?用Python做一个待办清单,自动保存不丢失

每天的事情总是忘?用Python做一个待办清单,自动保存不丢失

  • 2026-10-11 06:57:49
每天的事情总是忘?用Python做一个待办清单,自动保存不丢失

点击蓝字 关注我们

上一课学完递归之后,Tyree感觉自己已经掌握了Python的绝大部分基础语法。但他问了一个问题:“我能用这些语法做出一个真正能用的东西吗?”

他说得对。学完语法,不能只是做练习题。需要做一个真正能解决实际问题的工具。

今天的课程,我们用列表、文件读写、函数、循环、条件判断等知识,做一个待办清单程序。它能帮你记录每天要做的事,添加、查看、完成,关掉再打开数据还在。

1

功能设计

先想好这个程序要做什么。Tyree每天有这些需求:

1. 添加任务:想到一件事就记下来

2. 查看任务:看看还有哪些事没做

3. 完成任务:做完一件事就从清单里删掉

4. 退出:关掉程序后,数据还在,下次打开接着用

这四种操作对应了程序的四个功能。Tyree说:“就像手机里的便签,但这是我用代码自己写的。”

2

数据结构

程序需要存多个任务,用列表最合适。

todos = ["写作业", "练琴", "背单词"]

每个任务就是列表里的一项,是个字符串。添加任务就是往列表里 `append`,完成任务就是从列表里 `remove` 或 `pop`。

查看任务就是遍历列表,给每个任务加一个编号,方便用户操作。Tyree说:“编号不用存在列表里,在遍历的时候用 `enumerate` 临时生成就行。”

print(f"{i}. {task}")

3

加载和保存(文件读写)

程序关了之后,列表里的数据就没了。所以需要存到文件里。

为什么用文件?因为文件存在硬盘里,程序关了也不会丢。数据量小、读写简单,直接用文本文件就可以了。程序启动时从文件加载,退出时自动保存。

import os

def load_todos():

    todos = []

    if os.path.exists("todos.txt"):

        with open("todos.txt", "r") as f:

            for line in f:

                todos.append(line.strip())

    return todos

def save_todos(todos):

    with open("todos.txt", "w") as f:

        for item in todos:

            f.write(item + "\n")

解释:

- `os.path.exists()` 用来检查文件是否存在。第一次运行时没有文件,直接返回空列表,不会报错。

- `line.strip()` 去掉行末的换行符 `\n`。因为读进来的时候每行末尾都有换行,不处理的话任务名称后面会多出一个看不见的换行。

- 保存时,`item + "\n"` 让每个任务占一行,方便下次逐行读取。

4

添加任务

def add_todo(todos):

    task = input("请输入任务:")

    todos.append(task)

    print(f"已添加:{task}")

解释:

这个函数只做了三件事:让用户输入、追加到列表、打印提示。Tyree说:“存进列表只是暂时的,后面主程序退出时会统一保存到文件,所以这里不用单独写保存操作。”

如果用户输入为空怎么办?目前程序没有限制,空字符串也会被添加。可以把 `input` 改成 `while` 循环判断输入是否为空,但在当前版本里先保持简单。

5

查看任务

def show_todos(todos):

    if not todos:

        print("暂无任务")

        return

    print("\n===== 待办清单 =====")

    for i, task in enumerate(todos, 1):

        print(f"{i}. {task}")

    print("===================\n")

解释:

- `if not todos` 检查列表是否为空。空列表在条件判断中是 `False`。如果为空,打印“暂无任务”并直接 `return`,不继续执行后面的代码。

- `enumerate(todos, 1)` 的作用:`enumerate` 是Python内置函数,遍历列表时同时返回索引和值。

`1` 表示编号从1开始(默认从0开始)。这样用户看到的是从1开始的编号,更符合直觉。

6

完成任务

def complete_todo(todos):

    show_todos(todos)

    try:

        num = int(input("请输入要完成的任务编号:"))

        if 1 <= num <= len(todos):

            removed = todos.pop(num - 1)

            print(f"已完成:{removed}")

        else:

            print("编号无效")

    except ValueError:

        print("请输入数字")

解释:

- `show_todos(todos)` 先调用查看函数,让用户看到当前清单,再选择要完成哪一项。

-`try...except` 处理用户输入非数字的情况。如果用户输入“abc”,`int("abc")` 会报错,`except` 捕获后提示“请输入数字”,程序不会崩溃。

- `pop(num - 1)` 删除列表中指定位置的元素并返回它。为什么是 `num - 1`?因为用户看到的编号从1开始,但列表索引从0开始,所以需要减1。

- `removed` 保存了被删除的任务名称,用来打印“已完成:xxx”。Tyree说:“这样有成就感,知道具体完成了哪件事。”

主程序脚本:

def main():

    todos = load_todos()

    while True:

        print("\n1. 添加任务")

        print("2. 查看任务")

        print("3. 完成任务")

        print("4. 退出")

        choice = input("请选择(1-4):")

        if choice == "1":

            add_todo(todos)

        elif choice == "2":

            show_todos(todos)

        elif choice == "3":

            complete_todo(todos)

        elif choice == "4":

            save_todos(todos)

            print("已保存,再见!")

            break

        else:

            print("无效选择")

if __name__ == "__main__":

    main()

解释:

- `todos = load_todos()` 程序启动时,先把文件里的任务加载到内存。

- `while True` 一直循环,直到用户选择“退出”。

- 四个选项分别调用四个函数。

- 选择“退出”时,调用 `save_todos(todos)` 保存所有任务到文件,然后 `break` 跳出循环,程序结束。

- `if __name__ == "__main__":` 确保只有直接运行这个文件时才执行 `main()`,如果被其他文件导入则不会自动运行。

7

完整代码

把上面的各分组代码汇总在一起,就是完整代码啦。

运行后就可以添加备忘然后一项一项的加,添加后可以查看任务执行情况。

下面是运行后的截图,

挑战:

增加“标记任务优先级”功能,用字典存储任务+优先级(高/中/低)。

8

今天学到了什么

- 待办清单程序串联了列表、循环、条件判断、函数、文件读写这些基础语法

- 程序启动时从文件加载数据,退出时保存到文件

- `enumerate()` 让遍历列表时同时拿到索引和值

- `pop()` 删除指定位置的元素并返回它

- `try...except` 处理用户输入错误

- `os.path.exists()` 检查文件是否存在

- `if __name__ == "__main__":` 控制程序入口

好了,今天就到这,欢迎点赞关注收藏!

明天第90课:学生成绩管理系统——用字典和文件管理全班成绩

————热门推荐————

自学编程第40课:打包游戏成exe文件——发给朋友

自学编程第46课:Python写段代码让麦克风实时语音识别

少儿自学编程第45课:——从音频文件识别语音

自学编程第36课:太空避障——完整游戏设计与难度平衡

自学编程第7课:turtle画图入门画正方形五角形三角形

自学编程第6课:列表+循环+判断做一个学生成绩分析器

自学编程第51课:爬虫入门让Python帮你从网页“拿”数据

自学编程第一步:安装Python和Thonny 零基础图文教程

本系列教程持续更新,欢迎关注收藏

图‖文 宝月小鹿 转载须标明出处

点赞

收藏

分享

最新文章

随机文章