如何使用单个列表实现Python程序保存并查看上一次输入的个人信息
如何使用单个列表实现Python程序保存并查看上一次输入的个人信息
我明白你的困扰啦!你现在的代码里,看似把之前的信息存在了previous变量里,但实际上因为Python的列表是引用类型,previous = information这行代码并没有真正复制一份列表,只是让previous和information指向了内存里同一个列表对象。所以当你更新information的内容时,previous也会跟着改变,自然看不到之前的输入了。
不需要创建多个重复结构的列表,我们只需要在保存旧信息的时候做一个列表的拷贝,就能解决这个问题。另外,尽量少用全局变量,让代码更清晰易维护,我给你修改一下代码:
def input_information(): print("Enter your name") name = input() print("Enter your favorite subject") subject = input() print("Enter your height") height = input() print("Enter your country") country = input() # 返回新的信息列表 return [name, subject, height, country] # 获取第一次输入的信息 information = input_information() print(f"Here is your basic social information about yourself: {information} \n") # 保存第一次的信息,这里用列表切片实现拷贝 previous_information = information[:] print("Do you wanna input new information? y/n") choice = input().lower() if choice == "y": # 获取新的信息,直接覆盖原information变量 information = input_information() print(f"Here is your basic social information about yourself: {information} \n") print("Do you wanna see your previous information? y/n") ac_choice = input().lower() if ac_choice == "y": print(previous_information) else: print("Thank you.")
关键修改点说明:
- 把输入逻辑封装成函数并返回列表,去掉了全局变量,代码结构更干净。
- 保存旧信息时用了
information[:],这是Python里创建列表拷贝的简单方式,这样previous_information就会是一个全新的列表,和原information互不影响。 - 用
lower()处理输入,避免用户输入大写的Y/N导致判断失效,程序更健壮。
这样你就只用了两个结构一致的列表(一个存当前信息,一个存上一次的),完全没有冗余问题,还完美实现了保存并查看上一次输入的需求。
备注:内容来源于stack exchange,提问作者dale lapuz20
相关产品推荐
相关产品推荐

