首页 > 解决方案 > 使python函数输入一个列表

问题描述

我正在编写一个函数并想打开这个输入,

[], [], ["pepperoni", "pepperoni"], wings=[10, 20], drinks=["small"]

在函数 cost_calculator

问题是它不让我接受它,因为里面有翅膀和饮料这个词。尝试将其转换为列表会给我错误的语法。我也无法从输入中取出单词wings和drinks。我的代码:

def cost_calculator(x):
    cost=0
    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}
 pizza={[]:13.00}
 for i in x:
        if i in pizza:
            cost=cost+pizza[i]
        elif i in toppings:
            cost=cost+toppings[i]
        elif i in drinks:
            cost=cost+drinks[i]
        elif i in wings:
            cost=cost+wings[i]
        else:
            break
  return cost

输入时

cost_calculator([], [], ["pepperoni", "pepperoni"], wings=[10, 20], drinks=["small"])

它给了我

cost_calculator() got an unexpected keyword argument 'wings'

我需要使用 [] 来显示应该制作的比萨饼的价值

cost=cost+13.00

我怎样才能克服这个

标签: pythonpython-3.x

解决方案


不完全确定函数的参数是什么,但如果要使用关键字 args,请使用以下**语法:

所以,我想我理解 args 可以是什么(按此顺序):

  • 任意数量[],每个代表一个披萨
  • 一份浇头清单(显然这是可选的)
  • 可选的命名列表(翅膀、饮料)

所以我们可以使用可变数量的 args关键字 args

# Tuple of var args and a dictionary of keyword args
def cost_calculator(*args, **kwargs):
    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}

    cost = 0
    coupon_value = 0.0

    # args is a tuple of unnamed parameters
    for a in args:
        # [] has 0 length so it's a pizza
        if 0 == len(a):
            cost += 13.00
        # Otherwise it must be toppings
        else:
            cost += sum([toppings[x] for x in a if x in toppings])

    # Step through the keyword args
    for key,value in kwargs.items():
        if key == "drinks":
            cost += sum([drinks[x] for x in value if x in drinks])
        elif key == "wings":
            cost += sum([wings[x] for x in value if x in wings])
        elif key == "coupon":
            coupon_value = value
        else:
            break
    return cost * (1.0 - coupon_value)

c = cost_calculator([], [], ["pepperoni", "pepperoni"], wings=[10,10], drinks=["small"], coupon=0.1)
print(c)

推荐阅读