2016-10-14 50 views
-1

所以,我想要一個簡單的小應用程序,用戶可以在其中輸入命令及其參數,然後Python將其轉換爲定義的函數及其參數。例如:Python:如何獲取用戶命令?

 
define foo(x,y) 
    bar = x ** y 
    print bar 

然後,在一個命令行界面,如果用戶輸入foo 2 3,我希望程序要認識到和打印結果,8

音符的另外的是,它應該能夠檢測整型參數,字符串參數和浮點參數,而不需要用戶指定。如果輸入foo red 1 2.2,則它可以將red,12.2的全部識別爲字符串arg,整數arg和浮點數arg foo

研究返回sys.argv命令,但我無法環繞它。

基本上,我試圖在一種語言內開發一種語言。幫幫我?

+1

你的路徑通過危險的道路和'eval'。回頭的時候,你仍然可以:P –

+1

@AndrasDeak不完全,請參閱[這裏](http://stackoverflow.com/q/7936572/5647260) – Li357

+0

嗯,你可以使用調度字典:'fundict = { 'foo':foo}',那麼你只需解析輸入並調用'fundict [funname](* args)' –

回答

0

的常用方法做了功能部件是使用一個查找表:

def double(a): 
    return a * 2 

def halve(b): 
    return b/2 

functions = { 
    'double': double, 
    'halve': halve, 
    ... 
} 

然後假設你有f用戶輸入函數名稱:

if f in functions: 
    func_to_call = functions[f] 
else: 
    print 'unknown function %s' % f 

要確定ARG是一個float,int或string,使用一系列try/excepts:

try: 
    float_value = float(user_input) 
except ValueError: 
    # nope, it wasn't a float... 
    float_value = None 

try: 
    int_value = int(user_input) 
except ValueError: 
    # nope, it wasn't an int... 
    int_value = None 

if float_value is None and int_value is None: 
    # must be a string... 
0

有幾種方法通過字符串來訪問函數名稱。

我推薦這種方式。文件commands.py - 模塊的命令:

def foo(x,y) 
    bar = x ** y 
    print bar 

def fuu(x,y) 
    bar = x << y 
    print bar 

文件main.py - 從這裏開始:

import commands 
def nocmd(*a): 
    print('where is no such command') 

cmd,a,b = input('>>').split() 
a,b = float(a),float(b) #in this moment need to check user input 
getattr(commands,cmd,nocmd)(a,b) 

運行python3 main.py

而且對象可以按名稱與locals()[name]globals()[name]被retrived