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
相关产品推荐
相关产品推荐

