如何从python中的变量参数访问值的特定类型?

时间:2019-07-07 18:39:59

标签: python-3.x

我正在编写一个接受客户下订单的函数,该函数应检查菜单中是否存在所请求的项目,我正在将该订单传递给可变参数,因为每个菜单都会有所不同,所以我该如何检查菜单中是否提供了所需的菜肴?

menu = ('Veg Roll', 'Noodles', 'Fried Rice', 'Soup')

def place_order(*item_tuple):
    if item_tuple in menu:
        print("Available")
    else
        print("Item not Available")


place_order("Veg Roll","Noodles")


Sample Input:("Veg Roll","Noodles")
Sample Output:Available Available

3 个答案:

答案 0 :(得分:0)

您只需要做

def place_order(*item_tuple):
    for item in item_tuple:
        if item in menu:
            print("Available")
        else:
            print("Item not Available")

如果您担心可用打印之间的间隔,可以将行更改为print("Available", end=" ")

答案 1 :(得分:0)

API

您已经定义了一个好奇的API。 最好定义def place_order(items),不要使用*星号, 并要求调用者提供一个元组:

place_order(('Veg Roll', 'Noodles'))

算法

您要独立测试每个项目:

def item_available(item):
    return item in menu

def items_available(items):
    return all(map(item_available, items))

def place_order(items):
    if not items_available(items):
        print("At least one item is not ", end="")
    print("Available")

此外,如果菜单变大 那么使用set而不是tuple对其建模会更快。

答案 2 :(得分:0)

您只需要遍历列表中的项目即可。

def place_order(*item_tuple):
    for i in item_tuple:
        if item_tuple in menu:
            print("Available")
        else
            print("Item not Available")

甚至更多pythonic

def place_order(*item_tuple):
    [print(f"{'Available' if i in menu else 'Item not available'}") for i in item_tuple]