2017-04-19 9 views
0

私は2.7から始まって辞書を使っているPythonを学んでいて、キーが呼び出されると自分のプログラムで関数を実行したかったのです。ネット上でかなり見えましたが、どちらかが関連していないか、単に理解していない可能性があります。以下は私が好きなゲームの1つを使って学ぶためにコンセプトとして始めたことです。以下は辞書からプログラム内の関数を呼び出す

私が現在、午前どこのより正確な表現である:ちょうど...私はなど、値を変更する、などの印刷文字列として辞書を使用するときに動作するように基本的なものを得ている

myDict = { 
    'descript': "This is some text to be printed", 
    'NORTH': northOfHouse (not sure if this is correct format) 
    } 

def westOfHouse(): 

    print myDict['descript] 

    if action == ('n' or 'north'): 
     myDict['NORTH]() (Not sure about proper format) 
    else: 
     print "there is no path in that direction 

ありません関数の実行方法の取得それはあなたがしようとしているものの非常に単純化されたデモとして

+1

あなたはどのようなエラーを取得していますか? – Astrom

+1

[Python:辞書を使用して実行する関数を選択する]の重複している可能性があります(http://stackoverflow.com/questions/9168340/python-using-a-dictionary-to-select-function-to-execute) – FamousJameous

+0

あなたは、辞書を作成するときに現在 'myDef' *を呼び出しています。実際には' myDict ['key']() 'のようなものが必要ですか? – jonrsharpe

答えて

1

、以下を見て:

def northOfHouse(): 
    print "north" 
    action = raw_input() 
    myDict[action]() 
def westOfHouse(): 
    print "west" 
    action = raw_input() 
    myDict[action]() 

myDict = { 
    "WEST": westOfHouse, 
    "NORTH": northOfHouse 
} 

action = raw_input() 
myDict[action]() 

私は2つの機能(northOfHousewestOfHouse)を定義していまず。これらの機能のそれぞれは、場所を印刷して新しい入力を求めるだけです。彼らは次に、二項で与えられた入力に対して関数を呼び出そうとします。

次の私は(私は関数を呼び出していないよということに注意してください)キー"WEST""NORTH"を参照する正しい関数を使用して、私の場合には、辞書を定義します。これらは、適切なmyDict["WEST"]()またはmyDict["NORTH"]()を使用して呼び出すことができます。

"NORTH""WEST"を入力して、適切な関数が呼び出されていることを確認することができます。これは、適切な入力検証を含めることで、再帰的には、提供されたコードのように、再帰の深さのエラーはあまりにも長い間あなたを傷つけるでしょう)。私がお勧めしたい

もう一つは、あなたが次へと移動することができる場所の現在の位置が決定し、そのように、各機能から辞書を返すことです:

def northOfHouse(): 
    print "You're in the NORTH of the house\nYou can go 'WEST'" 
    myDict = { 
     "WEST": westOfHouse 
    } 
    return myDict 

def westOfHouse(): 
    print "You're in the WEST of the house\nYou can go 'NORTH'" 
    myDict = { 
     "NORTH": northOfHouse 
    } 
    return myDict 

currentMoves = northOfHouse() 
while 1: 
    action = raw_input() 
    if(action in currentMoves): 
     currentMoves = currentMoves[action]() 
    else: 
     print "Invalid Input" 

Try Here on repl.it

+0

私がこれを上手く構築すればするほど、巨大なものにそれを作りたいと思うほどですが、クラスとネストされた辞書はこの質問の対象外です。 –

+0

ありがとう、ニック、それは働いた。また、私の定義の下で辞書を動かすことで、northOfhouseの値を定義することができました。 – Darwin

+0

@ダーウィン、私はあなたのコードの残りの構造についてはわかっていませんでしたが、それは問題であった可能性があります。あなたの問題を解決すれば答えを受け入れることを忘れないでください。 –

関連する問題