2014-02-17 4 views
0

У меня есть этот код, который хорошо работает. Он работает таким образом, что я должен ввести функцию, такую ​​как soccer для того, чтобы модуль games.soccer был активным, тогда я могу ввести запрос, такой как «последние баллы», снова после того, как я закрою это, тогда введите autocare для этого. . Мне нужна помощь в кодировании способа просто ввести запрос, например «последние оценки» .. то это будет перебирать все импортируемые функции в словаре воспроизведения, чтобы найти answer.Here это кодКак перебрать все импортированные функции

import games 
import clauseq11 
PLAY = { 
    'soccer': games.soccer, 
    'nba': games.nba, 
    'autorace': games.autorace, 
    'search_name': clauseq11.search_name, 
    'answer_neg1': clauseq11.answer_neg1, 
    } 

while True: 
    question = input('Please enter your question: ').lower() 
    if not question: 
     break 
    for key, func in PLAY.items():    
     if key in question: 
      func() 
      break 
    else: 
     print('Sorry I do not have an answer! :(') 
+0

Просьба уточнить вашу проблему или добавить дополнительные сведения, чтобы точно указать, что вам нужно. Как это написано в настоящее время, трудно точно сказать, что вы просите. См. Страницу [Как задать страницу] (http://stackoverflow.com/help/how-to-ask) для получения помощи в разъяснении этого вопроса. – jonrsharpe

ответ

1

Я думаю, то, что вы ищете, это способ получить имя функции от пользователя и выполнить функцию с этим именем, если она существует в модуле, который вы импортировали. Вот все, что вам нужно реализовать:

Пример модуля t.py:

def foo(): print 'foo here!' 
def bar(): print 'bar here!' 

Импорт модуля:

In [1]: import t 

Узнайте, какие функции ваш модуль имеет:

In [2]: print dir(t) 
['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'bar', 'foo'] 

Выполните функцию в вашем модуле, которая имеет заданное имя:

In [3]: getattr(t, 'foo')() 
foo here! 
+0

спасибо! функции должны отвечать (печатать) на запрошенный запрос. Моя головная боль связана с тем же запросом, чтобы перебирать функции до тех пор, пока правильный ответ не будет – wakamdr

+1

Я не совсем уверен, что вы имеете в виду, но на самом деле вам не нужно перебирать функции. Вы просто предполагаете, что функция есть и попытаться вызвать ее. Если его нет (скажем, пользователь сделал опечатку), будет выбрано исключение (KeyError), которое вам нужно поймать и обработать (скажем, «функция печати не найдена» пользователю. – piokuc

+0

Спасибо, что я имел в виду, когда пользователь вводит запрос из многих импортируемых функций, ответ должен быть напечатан после итерации через словарь функций – wakamdr

Смежные вопросы