You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Todo应用中“add”功能失效问题求助

Python Todo应用中“add”功能失效问题求助

嘿,我完全懂这种明明逻辑看起来没问题但功能就是不工作的抓狂感!让我帮你拆解下你的“add”功能没反应的原因,以及怎么修复。

问题根源

你当前的代码逻辑是从输入的同一行里直接提取待办内容——也就是需要用户输入类似 add 买牛奶 这样的完整指令,程序才会把“买牛奶”添加到列表里。但你的操作是只输入了 add,这时候 user_action[4:] 会得到一个空字符串,程序确实执行了添加操作,但只是往文件里加了个空内容,所以你看起来没变化,循环又回到输入提示,就会误以为“什么都没发生”。

更关键的是,你预期的流程应该是:输入 add → 程序提示输入待办内容 → 保存到文件,但你的代码里根本没有“提示用户输入待办内容”这一步!

修复后的完整代码

我把逻辑改成符合你预期的流程,还顺便优化了一些细节(比如错误捕获、提示语通顺度):

while True:
    user_action = input("Please write add, edit, show, complete or exit: ")
    user_action = user_action.strip()

    if user_action == "add":  # 改成精确匹配,避免错误触发
        todo = input("Enter the todo you want to add: ")
        # 读取现有待办列表
        with open("app.txt", "r") as file:
            todos = file.readlines()
        # 添加新待办,记得加换行符避免内容粘连
        todos.append(todo + "\n")
        # 写回文件
        with open("app.txt", "w") as file:
            file.writelines(todos)
    elif "show" in user_action:
        with open("app.txt", "r") as file:
            todos = file.readlines()
        for index, item in enumerate(todos):
            item = item.strip("\n")
            row = f"{index +1}-{item}"
            print(row)
    elif "edit" in user_action:
        try:
            number = int(user_action[5:])
            number = number -1
            with open("app.txt", "r") as file:
                todos = file.readlines()
            new_todo = input("Enter the new todo: ")
            todos[number] = new_todo + "\n"
            with open("app.txt", "w") as file:
                file.writelines(todos)
        except (IndexError, ValueError):
            print("Please use the correct format, e.g., edit 1")
    elif "complete" in user_action:
        try:
            number = int(user_action[9:])
            with open("app.txt", "r") as file:
                todos = file.readlines()
            index = number -1
            todo_to_remove = todos[index].strip("\n")
            todos.pop(index)
            with open("app.txt", "w") as file:
                file.writelines(todos)
            message = f"Todo {todo_to_remove} has been completed and deleted from your list!"
            print(message)
        except (IndexError, ValueError):
            print("Please use the correct format, e.g., complete 2")
    elif user_action == "exit":
        break
    else :
        print("Please enter one of the indicated commands: add, edit, show, complete or exit")

print("Goodbye, I hope to see you soon!")

主要修改点

  1. 调整add逻辑:改成输入add后,单独弹出提示让用户输入待办内容,完全符合你的预期流程。
  2. 精确匹配指令:把if "add" in user_action改成user_action == "add",避免输入类似“addxyz”这种包含add的错误指令也触发添加逻辑。
  3. 添加换行符:新待办内容后加\n,确保每个待办单独占一行,不会和文件里的最后一条内容粘连。
  4. 错误捕获:给edit和complete模块加了try-except,当用户输入格式错误(比如非数字、数字超出待办列表范围)时,会给出友好提示,而不是直接崩溃。
  5. 修正拼写错误:把提示语里的“right”改成正确的“write”,让指令提示更清晰。

备注:内容来源于stack exchange,提问作者Sneed5484

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 10:23:02