Python如何向列表追加值不覆盖旧数据 兼容T大小写判断
问题修复方案
你的代码存在两个核心问题,对应修复方式如下:
- 旧数据被覆盖问题
每次程序启动时你都直接将zadania初始化为空列表,写入文件前从未读取过历史存储的数据,且wb文件打开模式会直接清空原文件内容,最终写入的只有本次运行新增的内容,旧数据会全部丢失。修复时需要在程序启动阶段优先读取已存在的pickle文件加载历史数据,仅当文件不存在时才初始化空列表。 - 大小写输入不兼容问题
获取用户输入的选择项后,先统一做首尾去空格、转大写(或转小写)处理,再进入判断逻辑,即可同时兼容大写T/N、小写t/n的输入,也能规避用户不小心输入前后空格导致的判断失效问题。
修正后的完整代码:
import pickle # 加载历史已存数据,文件不存在时初始化空列表 try: with open('zad', 'rb') as fp: zadania = pickle.load(fp) except FileNotFoundError: zadania = [] while True: # 统一处理输入,兼容大小写、前后空格 a = input("Do you want to add value? T/N").strip().upper() if a == 'T': new_item = input('Write what you want to add: ').strip() zadania.append(new_item) elif a == 'N': break else: print("Wrong value, please enter T or N") # 将包含旧数据+新数据的完整列表写入文件 with open('zad', 'wb') as fp: pickle.dump(zadania, fp)
注:原代码冗余的内层输入校验循环已移除,外层死循环会自动处理非法输入,逻辑更简洁。
内容的提问来源于stack exchange,提问作者bartlowej
相关产品推荐
相关产品推荐

