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 个不同的函数来移动,它使用第一个单词来调用函数,然后使用“南”作为该函数中方向的参数。

4

3 回答 3

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])

本质上,我只是尝试用空格分割输入,并通过第一部分(movewaitlook ...)来决定命令的类型。第二部分用作参数。

于 2012-09-26T08:00:36.573 回答
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]()
于 2012-09-26T08:02:38.510 回答
0

对于这种类型的命令行处理,您可以轻松使用该cmd模块。它允许您通过创建方法来创建命令,例如do_<cmd>, 将行的其余部分作为参数。

如果您无法使用该cmd模块,则必须自己解析命令行。您可以使用command.split().

于 2012-09-26T08:01:12.130 回答