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

Python 3.6收银程序开发遇阻:菜单循环与嵌套列表问题求助

Python商店收银程序解决方案

嘿,我来帮你搞定这两个核心问题,顺便把你那个RetailItem类的小bug也修复掉~

一、先修复RetailItem类

你原来的类构造函数没把price、units这些参数传进去,根本没法初始化商品信息。我们把它改成能接收商品名称、价格、库存数量的版本:

class RetailItem:
    def __init__(self, item_name, price, units_in_inventory):
        self.item_name = item_name  # 商品名称
        self.price = price          # 商品单价
        self.units = units_in_inventory  # 库存数量

    # 加个方法方便打印商品信息
    def __str__(self):
        return f"商品:{self.item_name} | 单价:{self.price}元 | 库存:{self.units}件"

二、实现菜单循环直至顾客退出

用while循环配合选项判断,让程序一直显示菜单,直到用户选择退出:

核心逻辑示例(结合类的完整代码):

def main():
    # 初始化存储商品的容器
    inventory = []

    while True:
        # 打印菜单
        print("\n=== 商店收银系统 ===")
        print("1. 添加新商品")
        print("2. 查看所有商品")
        print("3. 结算收银")
        print("4. 退出程序")
        
        choice = input("请输入你的选择(1-4):")
        
        # 根据选择执行操作
        if choice == "1":
            name = input("请输入商品名称:")
            price = float(input("请输入商品单价:"))
            units = int(input("请输入库存数量:"))
            new_item = RetailItem(name, price, units)
            inventory.append(new_item)
            print(f"商品「{name}」已添加成功!")
        elif choice == "2":
            if not inventory:
                print("当前没有商品库存!")
            else:
                print("\n=== 商品库存列表 ===")
                for item in inventory:
                    print(item)
        elif choice == "3":
            total = 0.0
            print("\n=== 收银结算 ===")
            while True:
                item_name = input("请输入购买的商品名称(输入'完成'结束):")
                if item_name == "完成":
                    break
                found = False
                for item in inventory:
                    if item.item_name == item_name:
                        quantity = int(input(f"请输入购买「{item_name}」的数量:"))
                        if quantity > item.units:
                            print(f"库存不足,当前仅剩余{item.units}件!")
                        else:
                            total += item.price * quantity
                            item.units -= quantity
                            print(f"已添加{quantity}件「{item_name}」,当前小计:{total}元")
                        found = True
                        break
                if not found:
                    print("该商品不存在,请重新输入!")
            print(f"\n本次结算总金额:{total}元,感谢光临!")
        elif choice == "4":
            print("程序已退出,再见!")
            break
        else:
            print("输入无效,请重新输入1-4之间的数字!")

if __name__ == "__main__":
    main()

三、用嵌套列表存储商品全部信息

如果你不想用类,想用纯嵌套列表的方式,把inventory改成嵌套列表,每个子列表存储[商品名, 单价, 库存数量],修改后的核心部分:

def main():
    # 嵌套列表存储商品信息:[[商品名, 单价, 库存], ...]
    inventory = []

    while True:
        print("\n=== 商店收银系统 ===")
        print("1. 添加新商品")
        print("2. 查看所有商品")
        print("3. 结算收银")
        print("4. 退出程序")
        
        choice = input("请输入你的选择(1-4):")
        
        if choice == "1":
            name = input("请输入商品名称:")
            price = float(input("请输入商品单价:"))
            units = int(input("请输入库存数量:"))
            inventory.append([name, price, units])
            print(f"商品「{name}」已添加成功!")
        elif choice == "2":
            if not inventory:
                print("当前没有商品库存!")
            else:
                print("\n=== 商品库存列表 ===")
                for idx, item in enumerate(inventory, 1):
                    print(f"{idx}. 商品:{item[0]} | 单价:{item[1]}元 | 库存:{item[2]}件")
        elif choice == "3":
            total = 0.0
            print("\n=== 收银结算 ===")
            while True:
                item_name = input("请输入购买的商品名称(输入'完成'结束):")
                if item_name == "完成":
                    break
                found = False
                for item in inventory:
                    if item[0] == item_name:
                        quantity = int(input(f"请输入购买「{item_name}」的数量:"))
                        if quantity > item[2]:
                            print(f"库存不足,当前仅剩余{item[2]}件!")
                        else:
                            total += item[1] * quantity
                            item[2] -= quantity
                            print(f"已添加{quantity}件「{item_name}」,当前小计:{total}元")
                        found = True
                        break
                if not found:
                    print("该商品不存在,请重新输入!")
            print(f"\n本次结算总金额:{total}元,感谢光临!")
        elif choice == "4":
            print("程序已退出,再见!")
            break
        else:
            print("输入无效,请重新输入1-4之间的数字!")

if __name__ == "__main__":
    main()

两种方式各有优势:用类的方式更面向对象,代码可读性和扩展性更好;用嵌套列表的方式更轻量化,适合简单场景,你可以按需选择~

内容的提问来源于stack exchange,提问作者Karey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:53:52