Python购物清单开发求助:Zip对象更新及函数重构问题
问题解决方案
问题1:新增商品无法打印的修复
你提前创建的data = zip(new_item, price_item)是一次性迭代器,且是在列表为空时生成的。后续向new_item和price_item添加元素后,这个旧zip对象不会自动同步更新。
修复方式:每次需要打印购物清单时,重新基于最新的列表生成zip对象,不要复用之前的data变量。
问题2:添加逻辑迁移至函数
把添加商品的逻辑封装到alternativ_1函数中,让它返回用户输入的商品名称和价格,再在主循环中调用该函数,将返回值追加到对应列表即可。
修改后的完整代码示例
from tabulate import tabulate new_item = [] price_item = [] # 封装添加商品的逻辑 def alternativ_1(): add_item = input('name? ') summ = int(input('sum: ')) return add_item, summ def selection_2(): # 查看清单时,基于最新的列表生成zip对象 current_shopping_list = zip(new_item, price_item) print(tabulate(current_shopping_list, headers=["商品名称", "价格"])) while True: # 补充操作选择的输入逻辑(原代码缺失) selection = int(input("请选择操作:1.添加商品 2.查看清单 3.退出\n")) if selection == 1: # 调用函数获取输入,追加到列表 item, price = alternativ_1() new_item.append(item) price_item.append(price) elif selection == 2: selection_2() elif selection == 3: print("退出程序") break else: print("无效选项,请重新输入")
你之前尝试的代码无效的原因
flatlist = zip(*data)不会起作用,因为:
- 初始的
data是基于空列表生成的zip对象,本身没有任何内容; - zip对象是一次性迭代器,迭代一次后就会耗尽,无法重复使用;
- zip对象本身没有
append方法,flatlist.append(add_item)是错误写法。
内容的提问来源于stack exchange,提问作者Xerxes Google
相关产品推荐
相关产品推荐

