如何根据用户输入调用函数?

时间:2018-09-28 21:40:50

标签: python python-3.x function dictionary

我正在尝试获取用户输入,然后将其存储在列表中

现在我要做的是,根据该列表中的第[i]个值调用特定的函数

例如

my_list[0]的值为'a',然后我要调用我已经定义的function_a()

my_list[1]的值'b'存储在该索引处,然后我想再次调用function_b function_b已被定义

基本上,

我想查看该列表中的值是否与我的任何函数匹配,然后我要触发该函数

详细示例:

user_input : 'text'

list = []

for i in user_input:
    list.append[i]

所以我的列表变成了['t','e','x','t']

现在

我对每个字母都有特定的功能

(我想我应该有字典或键是字母,值是各自功能的东西,我不知道那是否就是phaaaasssibbble)

但是我想按照列表中的这些值调用这些函数

所以在这里我希望我的程序调用

function_t
function_e
function_x
function_t

3 个答案:

答案 0 :(得分:1)

这是一个非常简单的示例。您可以使用字母作为键,使用function object作为值来制作地图。即您不想调用地图中已经存在的函数。仅在用户调用它时调用它。

def a_func():
    print("calling a_func")

def b_func():
    print("calling b_func")

def c_func():
    print("calling c_func")

func_map = {'a': a_func, 'b':b_func, 'c':c_func}

while True:
    func_input = input("Enter a letter 'a' through 'c'!\n")

    if func_input.strip() == 'exit':
        print('goodbye! ')
        exit()

    if func_input.strip() in func_map.keys():
        func_map[func_input]()
    else:
        print("Sorry no function for that!")

以下是输出:

Enter a letter 'a' through 'c'!
a
calling a_func
Enter a letter 'a' through 'c'!
b
calling b_func
Enter a letter 'a' through 'c'!
c
calling c_func
Enter a letter 'a' through 'c'!
d
Sorry no function for that!
Enter a letter 'a' through 'c'!
exit
goodbye! 

答案 1 :(得分:0)

更好的是,这样的字典已经免费提供。如果您的脚本的全局名称空间中有一个函数:

def func_k():

然后在全局名称空间中

locals()['func_k']

将获得您的功能,并且

locals()['func_k']()

会调用它。给定letter=k

locals()['func_'+letter]()

也可以。最后,请注意字符串已经可以迭代。将所有这些与一些错误检查结合起来并得到:

for letter in input:
    try:
        locals()['func_'+letter]()
    except KeyError:
        print('-E-',letter,'is not a valid input!')

所有人都说过,请考虑@zvone的注释-如果该功能非常相似,则最有可能接受字母作为参数。

答案 2 :(得分:-3)

您可以像这样使用dict:

.container {
  height: calc(100vh - 50px);
  width: calc(100vh - 100px);
  padding: 20px;
}

.draggable {
  cursor: -webkit-grab;
  cursor: grab;
}

.uk-input,
.uk-textarea,
.uk-checkbox {
   margin-bottom: 10px;
}