You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python cost_calculator函数含wings/drinks关键字参数报错求解

解决cost_calculator函数参数不匹配与输入处理问题

首先,咱们先明确你遇到的两个核心问题:

  • 函数定义只接受一个位置参数,但调用时传入了多个位置参数+关键字参数(wings、drinks),导致参数不匹配报错
  • 用[]作为字典键是无效的(列表是不可哈希类型,不能当字典键),而且原代码的遍历逻辑没法正确处理多参数和关键字参数

下面是修改后的完整代码,完全适配你给定的输入格式:

def cost_calculator(*args, **kwargs):
    cost = 0.00
    # 定义各类商品的价格映射
    drinks = {"small": 2.00, "medium": 3.00, "large": 3.50, "tub": 3.75}
    wings = {10: 5.00, 20: 9.00, 40: 17.50, 100: 48.00}
    toppings = {"pepperoni": 1.00, "mushroom": 0.50, "olive": 0.50, "anchovy": 2.00, "ham": 1.50}
    base_pizza_cost = 13.00

    # 处理所有位置参数(包括基础披萨、配料列表)
    for item in args:
        if item == []:
            # 空列表代表基础披萨,加对应成本
            cost += base_pizza_cost
        elif isinstance(item, list):
            # 如果是配料列表,遍历每个配料累加价格
            for topping in item:
                if topping in toppings:
                    cost += toppings[topping]
        # 额外支持单个配料直接传入的情况(比如直接传"pepperoni"而非列表)
        elif item in toppings:
            cost += toppings[item]

    # 处理关键字参数:wings
    if "wings" in kwargs:
        wing_quantities = kwargs["wings"]
        if isinstance(wing_quantities, list):
            for qty in wing_quantities:
                if qty in wings:
                    cost += wings[qty]

    # 处理关键字参数:drinks
    if "drinks" in kwargs:
        drink_sizes = kwargs["drinks"]
        if isinstance(drink_sizes, list):
            for size in drink_sizes:
                if size in drinks:
                    cost += drinks[size]

    return round(cost, 2)  # 保留两位小数,符合金额格式

关键修改点说明:

  • 参数定义改为*args, **kwargs:
    *args会捕获所有传入的位置参数(比如你调用时的[]、[]、["pepperoni", "pepperoni"]),打包成一个元组;**kwargs会捕获所有关键字参数(比如wings=[10,20]、drinks=["small"]),打包成一个字典,完美适配你的输入格式。
  • 替换无效的pizza字典:
    原来用{[]:13.00}是错误的(列表是不可哈希类型,不能作为字典键),现在直接判断item == []来识别基础披萨,累加对应成本。
  • 遍历处理列表类型的参数:
    不管是位置参数里的配料列表,还是关键字参数里的wings数量、drinks尺寸列表,都逐个遍历元素,匹配对应价格累加,支持多个同类商品的计算。
  • 金额格式化:
    最后用round(cost,2)确保返回的金额是两位小数,符合实际货币的显示需求。

测试你的输入:

调用cost_calculator([], [], ["pepperoni", "pepperoni"], wings=[10, 20], drinks=["small"]),计算过程如下:

  • 两个基础披萨:13*2 = 26
  • 两份pepperoni配料:1*2 = 2
  • 10个+20个 wings:5+9 =14
  • 一杯small饮料:2
  • 总成本:26+2+14+2 = 44.00,函数会返回44.0

这样就完全解决了你的参数报错和输入处理问题,而且不需要修改任何输入格式。

内容的提问来源于stack exchange,提问作者Anvesh Sunkara

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:16:16