【问题标题】:List not defined even when defined in earlier cases即使在较早的情况下已定义,列表也未定义
【发布时间】:2023-02-14 02:18:31
【问题描述】:
prompt = "    Type add, show, edit, complete or exit:       "


while True:

    user_action = input( prompt.strip())
    match user_action:
            case "add":
                todo = input("Enter a 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":
                file=open('todos.txt', "r")
                todos= file.readlines()
                file.close()
                    
                
                for index, item in enumerate(todos):
                    item= item.strip("\n")
                    row = f"{index+1}-{item.capitalize()}"
                    print(row)  
            
            case 'edit':
                number= input("Enter a number: ")
                print(number)
                new_todo= input("Enter new tod0:")
                todos[int(number)-1]= new_todo
                print(new_todo)
            case "complete":
                number = int(input("Number of the todo:"))
                row=todos.pop(int(number))
                print(row)
            case "exit":
                break
        # # case whatever:
        # #     print("wrong message!!! Baaaka")
            

print('Bye!')

在上面的代码中,当输入 new to dos 并使用 complete 时,出现如下错误:

 File "C:\Users\HP\OneDrive\Desktop\python apps\app1.py", line 40, in <module>
    row=todos.pop(int(number))
NameError: name 'todos' is not defined

n 上面的代码,当输入new to dos并使用complete时,显示如下错误:

 File "C:\Users\HP\OneDrive\Desktop\python apps\app1.py", line 40, in <module>
    row=todos.pop(int(number))
NameError: name 'todos' is not defined

【问题讨论】:

  • todos不是定义,直到您选择 addshowdisplay
  • 您可能应该定义 todos循环,在循环期间对列表(而不是文件)进行操作,并在循环后将列表写回文件。

标签: python


【解决方案1】:

由于todos是一个局部变量,它对更多的全局变量是未知的,当你在if语句中引用它时,你没有在引用之前做它,所以你试图访问一个局部变量多变的。因此,您应该将其设为全局,或在开始时定义它:

prompt = "    Type add, show, edit, complete or exit:       "
todos = []

... # rest of code

或者在你每次制作它之前先放 global :

global todos
todos = ... # whatever you put in here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-09
    • 2022-01-21
    • 2017-11-10
    相关资源
    最近更新 更多