Python实现清单增删功能时买家删除操作失效问题排查
买家删除功能失效排查与修复
核心问题点
- 买家删除方法
remove2逻辑错误:当前实现未执行字典键删除操作,仅对已存在的买家值做字符串转换后重新写回字典,不存在的买家反而会被新增到字典中,完全不符合删除需求 - 数据持久化逻辑缺陷:连续两次调用
json.dump向同一文件写入两个独立字典,会生成不符合JSON规范的文件内容;加载时连续两次json.load会导致车辆、买家数据读取错位 - 类属性定义不规范:
cars、buyers直接定义为类属性,多实例场景下会出现全局数据污染 - 交互逻辑bug:菜单提示退出选项为
exit,但判断条件写为avsluta;选择save选项时未加括号调用方法,实际不会触发保存 - 买家添加方法
add2存在冗余逻辑,无实际增量更新作用
修复后代码
import json import os.path class Inventory: def __init__ (self): # 实例属性初始化,避免类属性污染 self.cars = {} self.buyers = {} self.load() def add(self,key,qty): q = 0 if key in self.cars: v = self.cars[key] q = v + qty else: q = qty self.cars[key] = q print(f'added {qty} {key}: total = {self.cars[key]}') def add_buyer(self,buy): # 修复冗余逻辑,直接新增买家 self.buyers[buy] = buy print(f'added buyer: {buy}') def remove_buyer(self,buy): # 正确执行删除逻辑 if buy in self.buyers: del self.buyers[buy] print(f'removed buyer: {buy}') else: print(f'buyer {buy} not exists') def remove(self,key,qty): q = 0 if key in self.cars: v = self.cars[key] q = v - qty if q < 0: q = 0 self.cars[key] = q print(f'removed {qty} {key}: total = {self.cars[key]}') def display(self): print("=== Car Inventory ===") for key, value in self.cars.items(): print(f'{key} = {value}') print("\n=== Buyer List ===") for buy_id, buy_name in self.buyers.items(): print(f'{buy_name}') def save(self): print('saving information...') with open('inventory4.txt', 'w') as f: # 合并为单个JSON对象存储,避免格式错误 json.dump({ "cars": self.cars, "buyers": self.buyers },f) print('information saved!') def load(self): print('loading information...') if not os.path.exists('inventory4.txt'): print('nothing to load!') return with open('inventory4.txt', 'r') as f: # 读取单个JSON对象后拆分赋值 data = json.load(f) self.cars = data.get("cars", {}) self.buyers = data.get("buyers", {}) print('Information Loaded!') def main(): inv = Inventory() while True: print('\nWrite your choice...\n') action = input('Choice:\nadd car, remove car, add buyer, remove buyer, list, save, exit: ') # 修复退出选项匹配 if action == 'exit': break if action == 'add car' or action == 'remove car': key = input('Add/remove specific car: ') qty = int(input('Quantity: ')) if action == 'add car': inv.add(key,qty) if action == 'remove car': inv.remove(key,qty) if action == 'add buyer' or action == 'remove buyer': buyer_name = input('Add/remove buyer: ') if action == 'add buyer': inv.add_buyer(buyer_name) if action == 'remove buyer': inv.remove_buyer(buyer_name) if action == 'list': print('____________________________________\n') inv.display() print('____________________________________\n') if action == 'save': # 修复方法调用,加括号 inv.save() inv.save() if __name__ == "__main__": main()
关键修复说明
- 重写买家删除方法:使用
del关键字从买家字典中移除对应键,删除前做存在性校验,不存在时给出提示 - 重构持久化逻辑:将车辆、买家数据封装为单个字典做JSON序列化,读取时一次性解析后拆分赋值,避免JSON格式错误
- 修正交互逻辑:匹配菜单的
exit退出选项,修复save操作的方法调用问题 - 调整属性定义:将车辆、买家字典移到
__init__方法内作为实例属性,避免多实例数据共享问题 - 优化输出格式:列表展示时区分车辆、买家模块,输出更清晰
内容的提问来源于stack exchange,提问作者big_python123
相关产品推荐
相关产品推荐

