2014-02-17 37 views
0

我有这样的代码,效果很好。它的工作原理的方式,我必须键入功能,如足球的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),你必须去捕捉并处理这个异常(比如说,给用户打印'function not found') – piokuc

+0

谢谢,我的意思是当用户从导入的许多函数中键入查询,答案应在通过函数字典迭代后打印 – wakamdr