2012-09-26 157 views
0

我已經使用字典來允許用戶輸入內容,但下一個問題是使用第二個字作爲被調用函數的參數。目前,我有:使用輸入作爲字典調用的函數的參數

def moveSouth(): 
    Player.makeMove("south") 
def moveNorth(): 
    Player.makeMove("north") 
def moveEast(): 
    Player.makeMove("east") 
def moveWest(): 
    Player.makeMove("west") 

function_dict = {'move south':moveSouth, 'wait':wait, 'sleep':sleep, 
       'move north':moveNorth, 'move':move, 'look':look, 
       'move east':moveEast, 
       'move west':moveWest} 

而要獲得輸入:

command = input("> ") 
command = command.lower() 
try: 
    function_dict[command]() 
except KeyError: 
    i = random.randint(0,3) 
    print(responses[i]) 

然而,而不是必須有4個不同的功能,使一招,我希望會有辦法以便當用戶輸入「向南移動」時,它使用第一個字調用該功能,然後使用「南」作爲該功能中方向的參數。

+0

爲什麼你定義'moveWest'和其他呢? –

回答

1

split()輸入然後分別通過每個部分。

command = input("> ") 
user_input = command.lower().split() 
command = user_input[0] 
if len(user_input) > 1: 
    parameter = user_input[1] 
    function_dict[command](parameter) 
else: 
    function_dict[command]() 
+0

'睡眠失敗' –

+0

@PierreGM今天早上我的感受。添加了一張支票。 – deadly

+0

我知道這種感覺... –

1

如何:

command = input("> ") 
command_parts = command.lower().split(" ") 
try: 
    if len(command_parts) == 2 and command_parts[0] == "move": 
     Player.makeMove(command_parts[1]) 
    else: 
     function_dict[command_parts[0]]() 
except KeyError: 
    i = random.randint(0,3) 
    print(responses[i]) 

基本上我只是嘗試用空格分割的輸入和由第一部分(移動等待決定命令的類型。 ..)。第二部分用作參數。

0

對於這種類型的命令行處理,您可以輕鬆使用cmd模塊。它允許您通過創建類似do_<cmd>的方法來創建命令,其餘行作爲參數。

如果你不能使用cmd模塊,你將不得不自己解析命令行。你可以使用command.split()來做到這一點。