我正在尝试使用以下代码中给出的案例显示将现有的待办事项保存在我的 txt 文件中:
while True:
user_action = input("Type add, show:")
user_action = user_action.strip()
match user_action:
case 'add':
todo = input("Enter any todo:") + "\n"
file = open('todos.txt', 'r')
todos = file.readlines()
file.close()
todos.append(todo)
file = open('todos.txt', 'w')
file.writelines(todos)
file.close()
case 'show' | 'display':
for index, item in enumerate(todos):
print(f"{index + 1}. {item}")
我已经将现有的“待办事项”保存在我的 txt 文件中,但在运行代码并使用命令 ' show',我的IDE给出以下错误:
Traceback (most recent call last):
File "c:\\Ayan\\coding\\paid course.vscode\\udemy.py", line 20, in \<module\>
for index, item in enumerate(todos):
^^^^^
NameError: name 'todos' is not defined
该错误的出现是因为变量
todos
只在
'add'
case 中被定义,但在
'show'
或
'display'
case 中没有被定义。这就是说,
'show'
或
'display'
case 访问不了
'add'
case 中定义的
todos
变量。
为了解决该问题,需要在循环外定义
todos
变量。这样一来,它在所有 case 中都可用。以下为修改后的代码:
todos = [] # 在循环外初始化 todos 列表
while True:
user_action = input("Type add, show:")
user_action = user_action.strip()
match user_action:
case 'add':
todo = input("Enter any todo:") + "\n"
file = open('todos.txt', 'r')
todos = file.readlines() # 从文件中读取待办事项
file.close()
todos.append(todo)
file = open('todos.txt', 'w')
file.writelines(todos)
file.close()
case 'show' | 'display':
# 现在 todos 在这里可见
for index, item in enumerate(todos):
print(f"{index + 1}. {item}")
通过这些修改,代码就可以在
'show'
或
'display'
case 中访问
todos
变量,从而显示从文件中读取的待办事项。