Python实现食堂订单结算:列表访问、输入处理与金额累加方法
学院食堂点餐账单程序实现
实现思路
- 菜单展示:遍历菜单列表,为每个菜品分配从1开始的编号,方便用户输入选择
- 用户输入处理:循环接收用户输入,直到用户直接回车结束;解析输入的编号和数量,处理格式错误、无效编号等异常情况
- 账单计算:用字典存储用户点单的菜品及数量,实时累加总数量和总金额
- 账单输出:按指定格式打印点单明细和最终总计
完整代码
# 定义菜单 menu = [("Samosa", 15), ("Idli", 30), ("Maggie", 50), ("Dosa", 70), ("Tea", 10), ("Coffee", 20), ("Sandwich", 35), ("ColdDrink", 25)] # 打印菜单 print("=== 学院食堂菜单 ===") for idx, (item, price) in enumerate(menu, start=1): print(f"{idx}. {item}: Rs {price}") # 初始化账单数据 order = {} total_items = 0 total_amount = 0 print("\n请输入菜品编号和数量(如:3 1),直接回车结束点餐:") while True: user_input = input().strip() # 用户直接回车,结束点餐流程 if not user_input: break # 拆分输入内容 parts = user_input.split() if len(parts) != 2: print("输入格式错误,请输入「编号 数量」,例如:3 1") continue try: item_num = int(parts[0]) - 1 # 转换为列表索引(Python列表从0开始) quantity = int(parts[1]) except ValueError: print("请输入有效的数字编号和数量") continue # 检查菜品编号是否有效 if item_num < 0 or item_num >= len(menu): print(f"无效的菜品编号,请输入1到{len(menu)}之间的数字") continue item_name, item_price = menu[item_num] # 更新点单记录 if item_name in order: order[item_name] += quantity else: order[item_name] = quantity # 累加总计数据 total_items += quantity total_amount += quantity * item_price # 打印最终账单 print("\n=== 您的账单 ===") for item, qty in order.items(): item_price = next(p for n, p in menu if n == item) print(f"{item}, {qty}, Rs {qty * item_price}") print(f"\nTOTAL, {total_items} items, Rs {total_amount}")
关键部分说明
- 列表访问:使用
enumerate(menu, start=1)生成从1开始的菜品编号,用户输入的编号减1即可对应列表的索引,通过menu[item_num]直接获取菜品名称和单价。 - 用户输入处理:通过
strip()去除输入首尾空格,判断空输入结束循环;用split()拆分输入内容,捕获ValueError处理非数字输入,同时校验编号范围避免越界访问列表。 - 金额累加:用字典
order存储每个菜品的点单数量,每次输入有效时更新总数量和总金额,最后遍历字典计算每个菜品的小计并输出。
内容的提问来源于stack exchange,提问作者zacknight
相关产品推荐
相关产品推荐

