Как вызвать функцию в зависимости от ввода пользователя? - PullRequest
0 голосов
/ 29 сентября 2018

Я пытаюсь получить пользовательский ввод и затем сохранить его в списке

. Теперь я хочу вызвать определенную функцию в зависимости от [i] -ого значения в этом списке

например

my_list[0] имеет значение 'a', тогда я хочу вызвать function_a(), который я уже определил

my_list[1], в котором хранится значение 'b'index, тогда я хочу вызвать 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 голосов
/ 29 сентября 2018

Вот довольно простой пример.Вы можете сделать карту с буквами в качестве ключей и 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! 
0 голосов
/ 29 сентября 2018

Даже лучше, если такой диктат уже доступен бесплатно.Если у вас есть функция в глобальном пространстве имен вашего скрипта:

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 - если эти функции очень похожи, то принятие буквы в качестве аргумента имеет больше смысла.

0 голосов
/ 29 сентября 2018

вы можете использовать dict следующим образом:

>>> def func_t():
...     return "I am T"
...
>>> def func_e():
...    return "I am E"
...
>>> def func_x():
...    return "I am X"
...
>>> my_dict = {'t':func_t(), 'e':func_e(), 'x':func_x()}
>>>
>>>
>>> my_dict.get('x')
'I am X'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...