Python实现自动售货机分类选择、总价计算与支付功能开发咨询
Python自动售货机程序实现方案
原代码存在以下可优化点:
- 语法错误:字典键值对使用了中文单引号,变量名包含空格不符合Python命名规范
- 逻辑冗余:每个分类都要写重复的选购函数,维护成本高
- 缺少全局金额累加逻辑:选购商品后没有更新总金额
total - 流程不连贯:选购商品没有循环逻辑,选一次就中断
- 边界判断缺失:没有处理余额不足、输入无效值的重试逻辑
完整可运行代码
# 初始化分类与商品数据 main_menu = ["Coffees", "Espresso", "Latte", "Tea and Milk", "Food"] coffees_dict = {'Coffee': 2.10, 'Iced Coffee': 2.65, 'Cold Brew (seasonal)':3.95, 'Cafe Au Lait':2.45} espresso_dict = {'Americano':1.95, 'Iced Americano':2.45, 'Mochatella':4.25, 'Iced Mochatella':4.75, 'Cafe Caramel/Mocha':4.70, 'Iced Cafe Mocha/Caramel':4.20} latte_dict = {'Chai Latte':3.45, 'Iced Chai Latte':3.75} tea_and_milk_dict = {'Hot Tea':1.95, 'Hot Chocolate':1.75, 'Milk':1.50, 'Chocolate Milk':1.95, 'Soda':2.25} food_dict = {'Donut':1.25, 'Filled Donut':1.50, 'Apple Fritter':2.95, 'Cinnamon roll':2.95, 'Muffin':2.95, 'Scone':2.95} # 分类映射表,不用重复写判断逻辑 category_map = { "Coffees": coffees_dict, "Espresso": espresso_dict, "Latte": latte_dict, "Tea and Milk": tea_and_milk_dict, "Food": food_dict } total = 0 coins = 0.0 # 通用商品选择函数,适配所有分类 def select_item(category_dict): global total while True: print("\n当前分类商品列表:") for item, price in category_dict.items(): print(f"{item}: {price} AED") choice = input("请输入要购买的商品名,输入NONE返回分类页:").strip() if choice == "NONE": return if choice in category_dict: total += category_dict[choice] print(f"已添加{choice},当前总金额:{total:.2f} AED") continue_choice = input("是否继续选购当前分类商品?(YES/NO): ").strip().upper() if continue_choice != "YES": return else: print("输入无效,请输入正确的商品名") # 主分类菜单逻辑 def main_menu_func(): global total while True: print("\n===== 商品分类 =====") for cate in main_menu: print(cate) cate_choice = input("请选择商品分类,输入NONE结束选购:").strip() if cate_choice == "NONE": # 结算逻辑 if total == 0: print("您未选购任何商品,交易结束") return print(f"您的总消费金额为:{total:.2f} AED") if total > coins: print("余额不足,交易取消") return change = coins - total print(f"您支付了{coins:.2f} AED,找零:{change:.2f} AED") print("请取走您的商品和零钱,感谢惠顾") return if cate_choice in category_map: select_item(category_map[cate_choice]) else: print("输入无效,请输入正确的分类名") # 程序入口 if __name__ == "__main__": print('欢迎使用自动售货机,最多可投入3枚硬币') # 金额输入校验 while True: try: coins = float(input('请投入硬币:').strip()) break except ValueError: print("输入无效,请输入数字金额") # 货币类型校验 coin_type = input('是否为AED货币?请输入YES/NO:').strip().upper() if coin_type == "YES": print(f"您已投入{coins:.2f} AED,请开始选购商品") main_menu_func() else: print("本机器仅接受AED货币,交易结束")
实现功能说明
- 先验证货币类型,仅接受AED
- 循环展示商品分类,用户可多次选购不同分类下的商品
- 选购时展示对应分类下的所有商品和价格,输入商品名即可添加到购物车
- 分类选择页输入
NONE即可结束选购,自动展示总金额并计算找零 - 输入错误时会提示重试,不会直接中断程序
- 余额不足时会给出提示,终止交易
内容的提问来源于stack exchange,提问作者Mason Mount
相关产品推荐
相关产品推荐

