整数Input()变量以分配给函数

时间:2019-05-19 00:53:43

标签: python

我有一个调用函数的变量列表。这些变量的编号从1到5,每个整数应调用一个函数以收集所需的信息。选择变量的方法是通过控制台输入,即input(“ Select a Number”)

enter image description here

2 个答案:

答案 0 :(得分:0)

如果您想要一种将数字与函数关联的方法,我认为最简单的方法就是使用列表。列表正是这样做的...将对象与数字索引(列表中的位置)相关联。相对于其他方法,此方法的一个优点是,在列表中添加和删除函数时,您的代码不必更改,因为它可以将逻辑基于列表的长度。

下面是一个示例,该示例在给定数字作为输入的情况下调用特定函数:

def function1():
    print("I am function 1")

def function2():
    print("I am function 2")

def function3():
    print("I am function 3")

def function4():
    print("I am function 4")

def function5():
    print("I am function 5")

functions = [function1, function2, function3, function4, function5]

f = input("Enter a number between 1 and {} > ".format(len(functions)))
try:
    i = int(f)
    if i < 1 or i > len(functions):
        print("There's no function with number " + f)
    else:
        functions[i-1]()
except ValueError:
    print("Invalid Input")

您可以使用lambda(匿名)函数来更紧凑地执行相同的操作。由于您是按数字引用功能,因此它们不需要名称:

functions = [
    lambda: print("I am function 1"),
    lambda: print("I am function 2"),
    lambda: print("I am function 3"),
    lambda: print("I am function 4"),
    lambda: print("I am function 5")
]

f = input("Enter a number between 1 and {} > ".format(len(functions)))
try:
    i = int(f)
    if i < 1 or i > len(functions):
        print("There's no function with number " + f)
    else:
        functions[i-1]()
except ValueError:
    print("Invalid Input")

鉴于lambda会将您限制为一个表达式,并且我假设您需要更复杂的功能,所以我猜第一个版本就是您想要使用的版本。

答案 1 :(得分:0)

如果您只想在获取数字后执行功能,则可以尝试 switch 子句:-

def switch(i):
    py_switch = {
            1: lambda: function1(),
            2: lambda: function2(),
            3: lambda: function3(),
            4: lambda: function4(),
            5: lambda: function5(),
        }
    function = py_switch.get(i)
    function()

choice = int(input("Enter your choice = "))

switch(choice)

这类似于switch子句(可在C ++,Java等语言中找到),接受单个输入并根据输入值提供输出。

要实现比大多数程序中常见的普通if-else阶梯要难一些。