You need to enable JavaScript to run this app. Python实现自动售货机分类选择、总价计算与支付功能开发咨询
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 23:36:08