2017-04-19 4 views
0

Ich lerne Python, beginnend mit 2.7 und arbeite mit einem Wörterbuch, wollte eine Funktion in meinem Programm ausführen, wenn der Schlüssel aufgerufen wird. Sah im Netz ziemlich viel aus, aber beide sind nicht verwandt oder verstehen einfach nicht. Im Folgenden habe ich begonnen, ein Konzept zu entwickeln, während ich eines meiner Lieblingsspiele zum Lernen nutze.Aufruf einer Funktion in einem Programm aus einem Wörterbuch

Nachfolgend finden Sie eine genauere Darstellung von wo ich bin zur Zeit an:

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 

Ich habe die grundlegenden Dinge bekommen ein Wörterbuch wie Drucken Strings zu arbeiten, bei der Verwendung, Werte ändern, etc ... einfach nicht wie man Funktionen ausführt.

+1

welche Fehler erhalten Sie? – Astrom

+1

Mögliches Duplikat von [Python: Verwenden eines Wörterbuchs zum Auswählen der auszuführenden Funktion] (http://stackoverflow.com/questions/9168340/python-using-a-dictionary-to-select-function-to-execute) – FamousJameous

+0

Rufen Sie zur Zeit 'myDef' * beim Erstellen des Wörterbuchs auf *, wollten Sie eigentlich etwas wie' myDict ['key']() '? – jonrsharpe

Antwort

1

Als sehr vereinfachte Demo von dem, was es Sie zu tun versuchen, sehen Sie die folgenden Schritte aus:

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

Zuerst habe ich zwei Funktionen definiert (northOfHouse und westOfHouse). Jede dieser Funktionen druckt einfach dort und fragt nach einer neuen Eingabe. Sie werden dann versuchen, die Funktion für die gegebene Eingabe im Diktat aufzurufen.

Weiter definiere ich das Wörterbuch, in meinem Fall mit den Tasten "WEST" und "NORTH" zu Referenz die richtigen Funktionen (beachten Sie, dass ich nicht die Funktionen aufrufen). Diese können dann wie gewohnt mit den entsprechenden myDict["WEST"]() oder myDict["NORTH"]() aufgerufen werden.

Mit diesem ist es möglich, "NORTH" und "WEST" einzugeben und zu sehen, dass die entsprechende Funktion aufgerufen wird. Dies kann natürlich erweitert werden, was Sie tun möchten (mit der Einbeziehung der entsprechenden Eingabevalidierung und Ausführung dieser Anweisungen auf einer Schleife statt rekursiv natürlich wie mit dem Code zur Verfügung gestellt, werden Rekursion Tiefe Fehler Sie nach zu lange verfolgen).

Eine andere Sache, die ich empfehlen würde, ist ein Wörterbuch aus jeder Funktion zurückzukehren, auf diese Weise die aktuelle Position bestimmt, wo Sie zum nächsten bewegen können:

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

Je mehr ich darauf aufbaue, desto mehr will ich es einfach in etwas Riesiges einbauen, aber ich denke, Klassen und verschachtelte Wörterbücher sind etwas über den Rahmen dieser Frage hinaus. –

+0

Danke Nick A, das hat funktioniert. Durch Verschieben des Wörterbuchs unter meine Definitionen konnte der Wert northOfhouse definiert werden. – Darwin

+0

@ Darwin, ich war mir nicht sicher über die Struktur des Rests Ihres Codes, aber ja, das könnte ein Problem sein, vergessen Sie nicht, die Antwort zu akzeptieren, wenn es Ihr Problem gelöst hat. –

Verwandte Themen