You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 15:15:41