如何无数组/列表/集合保存循环输入?点餐系统订单重复问题求助
问题解决思路
你的问题根源在于只用单个变量保存订单信息,每次循环都会覆盖之前的数据,最终打印时只能显示最后一次输入的内容。由于系统最多支持3位顾客,直接为每位顾客单独声明变量即可解决,无需使用数组、列表等结构。
修改后的完整代码
strt = int(input("1: 点餐\n2: 退出\n")) if strt == 1: print("\n菜单:") print("主餐:\n ID 类型 价格") print( " 1 鸡肉 90.00\n 2 猪肉 105.00\n 3 鱼肉 120.00\n 4 牛肉 135.00" ) print("配菜:\n ID 类型 价格") print( " 1 蒸米饭 20.00\n 2 炒玉米 35.00\n 3 土豆泥 50.00\n 4 蒸蔬菜 65.00" ) print("饮品:\n ID 类型 价格") print( " 1 矿泉水 25.00\n 2 冰茶 35.00\n 3 苏打水 45.00\n 4 果汁 55.00" ) print( "请输入你要点餐的ID。如果该类别不需要点餐,请输入0。\n" ) cust = int(input("你的同行人数是多少? ")) ordr = 0 msoc = 0 pwno = 0 # 为每位顾客单独声明订单变量 main1, main2, main3 = 0, 0, 0 side1, side2, side3 = 0, 0, 0 drnk1, drnk2, drnk3 = 0, 0, 0 mprc1, mprc2, mprc3 = 0.0, 0.0, 0.0 sprc1, sprc2, sprc3 = 0.0, 0.0, 0.0 dprc1, dprc2, dprc3 = 0.0, 0.0, 0.0 mtot = 0.0 stot = 0.0 dtot = 0.0 while ordr != cust and cust <= 3: ordr = ordr + 1 print(f"\n第{ordr}份订单:") if ordr <= cust or msoc == 'n': # 根据当前订单号,将输入存入对应顾客的变量 if ordr == 1: main = int(input(" 主餐: ")) main1 = main if main == 1: mprc1 = 90.0 print(" 鸡肉") elif main == 2: mprc1 = 105.0 print(" 猪肉") elif main == 3: mprc1 = 120.0 print(" 鱼肉") elif main == 4: mprc1 = 135.0 print(" 牛肉") elif main == 0: print(" 无") side = int(input(" 配菜: ")) side1 = side if side == 1: sprc1 = 20.0 print(" 蒸米饭") elif side == 2: sprc1 = 35.0 print(" 炒玉米") elif side == 3: sprc1 = 50.0 print(" 土豆泥") elif side == 4: sprc1 = 65.0 print(" 蒸蔬菜") elif side == 0: print(" 无") drnk = int(input(" 饮品: ")) drnk1 = drnk if drnk == 1: dprc1 = 25.0 print(" 矿泉水") elif drnk == 2: dprc1 = 35.0 print(" 冰茶") elif drnk == 3: dprc1 = 45.0 print(" 苏打水") elif drnk == 4: dprc1 = 55.0 print(" 果汁") elif drnk == 0: dprc1 = 0.0 print(" 无") elif ordr == 2: main = int(input(" 主餐: ")) main2 = main if main == 1: mprc2 = 90.0 print(" 鸡肉") elif main == 2: mprc2 = 105.0 print(" 猪肉") elif main == 3: mprc2 = 120.0 print(" 鱼肉") elif main == 4: mprc2 = 135.0 print(" 牛肉") elif main == 0: print(" 无") side = int(input(" 配菜: ")) side2 = side if side == 1: sprc2 = 20.0 print(" 蒸米饭") elif side == 2: sprc2 = 35.0 print(" 炒玉米") elif side == 3: sprc2 = 50.0 print(" 土豆泥") elif side == 4: sprc2 = 65.0 print(" 蒸蔬菜") elif side == 0: print(" 无") drnk = int(input(" 饮品: ")) drnk2 = drnk if drnk == 1: dprc2 = 25.0 print(" 矿泉水") elif drnk == 2: dprc2 = 35.0 print(" 冰茶") elif drnk == 3: dprc2 = 45.0 print(" 苏打水") elif drnk == 4: dprc2 = 55.0 print(" 果汁") elif drnk == 0: dprc2 = 0.0 print(" 无") elif ordr == 3: main = int(input(" 主餐: ")) main3 = main if main == 1: mprc3 = 90.0 print(" 鸡肉") elif main == 2: mprc3 = 105.0 print(" 猪肉") elif main == 3: mprc3 = 120.0 print(" 鱼肉") elif main == 4: mprc3 = 135.0 print(" 牛肉") elif main == 0: print(" 无") side = int(input(" 配菜: ")) side3 = side if side == 1: sprc3 = 20.0 print(" 蒸米饭") elif side == 2: sprc3 = 35.0 print(" 炒玉米") elif side == 3: sprc3 = 50.0 print(" 土豆泥") elif side == 4: sprc3 = 65.0 print(" 蒸蔬菜") elif side == 0: print(" 无") drnk = int(input(" 饮品: ")) drnk3 = drnk if drnk == 1: dprc3 = 25.0 print(" 矿泉水") elif drnk == 2: dprc3 = 35.0 print(" 冰茶") elif drnk == 3: dprc3 = 45.0 print(" 苏打水") elif drnk == 4: dprc3 = 55.0 print(" 果汁") elif drnk == 0: dprc3 = 0.0 print(" 无") msoc = input("这份订单是否正确 (y/n)? ") if msoc == "y": pwno = input("继续下一份订单 (y/n)? ") if pwno == "y": continue elif pwno == "n": ordr = cust continue elif msoc == "n": ordr = ordr - 1 continue cncl = input("取消所有订单 (y/n)? ") if cncl == "y": print("") elif cncl == "n": xcld = input("从总价中排除某个菜品 (y/n)? ") if xcld == "y": frwo = int(input("来自哪份订单? ")) wiwe = int(input("要排除哪个菜品? ")) # 处理菜品排除逻辑 if frwo == 1: if wiwe == 1: mprc1 = 0.0 elif wiwe == 2: sprc1 = 0.0 elif wiwe == 3: dprc1 = 0.0 elif frwo == 2: if wiwe == 1: mprc2 = 0.0 elif wiwe == 2: sprc2 = 0.0 elif wiwe == 3: dprc2 = 0.0 elif frwo == 3: if wiwe == 1: mprc3 = 0.0 elif wiwe == 2: sprc3 = 0.0 elif wiwe == 3: dprc3 = 0.0 print(f"\n{str(cust)}人用餐订单") ordr = 0 while ordr != cust and cust <= 3: ordr = ordr + 1 print(f"第{ordr}份订单:") # 根据订单号读取对应顾客的订单数据 if ordr == 1: main = main1 mprc = mprc1 side = side1 sprc = sprc1 drnk = drnk1 dprc = dprc1 elif ordr == 2: main = main2 mprc = mprc2 side = side2 sprc = sprc2 drnk = drnk2 dprc = dprc2 elif ordr == 3: main = main3 mprc = mprc3 side = side3 sprc = sprc3 drnk = drnk3 dprc = dprc3 # 转换ID为菜品名称 if main == 1: main_name = "鸡肉" elif main == 2: main_name = "猪肉" elif main == 3: main_name = "鱼肉" elif main == 4: main_name = "牛肉" elif main == 0: main_name = "无" mprc = 0.0 if side == 1: side_name = "蒸米饭" elif side == 2: side_name = "炒玉米" elif side == 3: side_name = "土豆泥" elif side == 4: side_name = "蒸蔬菜" elif side == 0: side_name = "无" sprc = 0.0 if drnk == 1: drnk_name = "矿泉水" elif drnk == 2: drnk_name = "冰茶" elif drnk == 3: drnk_name = "苏打水" elif drnk == 4: drnk_name = "果汁" elif drnk == 0: drnk_name = "无" dprc = 0.0 # 累加总价 mtot += mprc stot += sprc dtot += dprc print(f"主餐: {main_name} 价格: {mprc}") print(f"配菜: {side_name} 价格: {sprc}") print(f"饮品: {drnk_name} 价格: {dprc}\n") print(f"主餐总价: {mtot}\n配菜总价: {stot}\n饮品总价: {dtot}") elif strt == 2: print("感谢使用本程序。")
关键改动说明
- 变量拆分:为1-3位顾客分别创建主餐、配菜、饮品的ID和价格变量,避免单变量覆盖数据。
- 订单存储逻辑:接收订单时,根据当前订单号将输入值存入对应顾客的变量中。
- 订单打印逻辑:打印时根据订单号读取对应顾客的变量,确保每个订单显示独立内容。
- 补充排除功能:实现了排除指定订单菜品的逻辑,修改对应菜品价格为0以保证总价计算正确。
内容的提问来源于stack exchange,提问作者ab2.5
相关产品推荐
相关产品推荐

