Python新手第一课:写一个可用的待办清单小程序

举报
yd_230986563 发表于 2026/10/29 00:34:18 2026/10/29
【摘要】 很多人第一次学 Python,不是卡在语法,而是卡在不知道写什么能马上用起来。今天就用一个待办清单,把列表、循环、条件判断和文件读写串起来,全程只用标准库,不用安装任何第三方包,写完就能在自己的电脑上每天使用。先说核心思路。待办事项本质上就是一个字符串列表:添加是往列表里放一项,列出是按编号逐条打印,完成是按编号删掉一项,退出前把列表写回文件,下次打开还能接着用。这里用 JSON 文件保存,...

很多人第一次学 Python,不是卡在语法,而是卡在不知道写什么能马上用起来。今天就用一个待办清单,把列表、循环、条件判断和文件读写串起来,全程只用标准库,不用安装任何第三方包,写完就能在自己的电脑上每天使用。

先说核心思路。待办事项本质上就是一个字符串列表:添加是往列表里放一项,列出是按编号逐条打印,完成是按编号删掉一项,退出前把列表写回文件,下次打开还能接着用。这里用 JSON 文件保存,比纯文本更稳妥,因为事项里即使有逗号、换行也不会被误拆成多条。

代码如下:

import json, os

FILE = "todos.json"

def load():
    if os.path.exists(FILE):
        return json.load(open(FILE, encoding="utf-8"))
    return []

def save(todos):
    json.dump(todos, open(FILE, "w", encoding="utf-8"), ensure_ascii=False, indent=2)

def show(todos):
    if not todos:
        print("目前没有待办事项。")
        return
    for i, item in enumerate(todos, 1):
        print(f"{i}. {item}")

todos = load()
while True:
    cmd = input("\n命令:add 添加 / list 列出 / done 完成 / quit 退出:").strip()
    if cmd == "add":
        text = input("待办内容:").strip()
        if text:
            todos.append(text)
    elif cmd == "list":
        show(todos)
    elif cmd == "done":
        show(todos)
        try:
            todos.pop(int(input("完成第几项:")) - 1)
        except (ValueError, IndexError):
            print("编号不对,请重新输入。")
    elif cmd == "quit":
        save(todos)
        print("已保存,下次再见。")
        break
    else:
        print("不认识的命令,请试试 add、list、done、quit。")

有几个新手容易踩的坑,值得单独提醒。第一,输入编号时要先转成整数,再减一,因为列表下标从零开始,而我们给用户看的编号从一开始;转换失败或越界时用 try 捕获,不要让程序直接崩溃。第二,添加前用 strip 去掉首尾空格,避免出现看起来空白的待办。第三,读写文件都要写 encoding=“utf-8”,否则中文在 Windows 上很容易乱码。第四,退出时一定要调用保存函数,否则这一轮的修改只留在内存里,关掉程序就丢了。

跑起来之后,可以先给自己定三个小练习:把 list 单独抽成函数,把 done 的编号校验写得更友好,或者给每条待办加一个优先级字段。等这三个练习都做完,你就已经摸到了真实小程序的骨架:数据结构负责存,循环负责交互,文件负责持久化。下一步再学字典、函数参数和异常处理,就会顺很多。

建议把这段代码保存为待办清单脚本,在终端里用 Python 运行该脚本。先加两件今天真正要做的事,再用 done 完成一件,亲手走通添加、列出、完成、保存这一圈,比背十页语法管用。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。