0

ユーザーが何かを入力できるようにするために辞書を使用しましたが、次の問題は、呼び出された関数のパラメーターとして 2 番目の単語を使用することです。現時点では、私は持っています:

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 つの異なる関数を使用する必要があるのではなく、ユーザーが「move south」と入力したときに最初の単語を使用して関数を呼び出し、次に「south」を使用する方法があることを望んでいました。その関数の方向のパラメーター。

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 ...) で決定しようとします。2 番目の部分はパラメーターとして使用されます。

于 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 に答える