2016-04-10 12 views
0

Ich bin ein Text-Abenteuer, und ich habe ein System erstellt, wo der Benutzer einen Bereich und die Objekte in der Umgebung beobachten kann.Position der Wörterbuchschlüssel erkennen

Zum Beispiel kann ein Benutzer einen Bereich beobachten, wie:

„Eine milde, ruhige Wüste Sie können eine Katze sehen, eine Maus und einen Besen.“

Es erstellt eine Liste der Elemente mit einer Nummer vor jeder Verwendung einer for-Schleife.

  1. Nehmen oder beobachten Katze
  2. Nehmen oder beobachten Maus

usw.

Ich möchte wissen, wie ich eine Nummer, die jedem dict Eintrag zuweisen können, wie es im Text erscheint.

{"cat":1, "mouse":1, "broom":1}

Der Wert für jeden Schlüssel ist, wie viele Instanzen des Objekts angezeigt wird. Wie lasse ich meinen Code zulassen, dass jeder Schlüssel einen Wert ASIDE von seinem Wörterbuchwert hat, um in der Reihenfolge referenziert werden zu können?

Der Benutzer sollte in der Lage sein, die Nummer seiner Antwort entsprechend der nummerierten Liste einzugeben. Wenn sie '1' wählen, wählen sie die Katze, und das kann sich ändern, je nachdem, was "Objekt Nummer 1" in diesem Wörterbuch ist, welches sich ändert in welchem ​​Bereich sich der Benutzer gerade befindet.

Wenn der Benutzer ist in einer dunklen Höhle, vielleicht "Gegenstand Nr. 1" in diesem GLEICHEN Wörterbuch wird zu "Hund" geändert. Der Benutzer sollte in der Lage sein, "1" zu wählen und einen DOG anstelle eines CAT zu beobachten ...

Also, wie kann ich erkennen, welcher Schlüssel in welcher Position eines Wörterbuchs ist?

+0

definiert der Benutzer das Wörterbuch oder wird es vom Programmierer initialisiert? –

+3

Dict-Einträge haben keine * Positionen. Wenn Sie eine Reihenfolge der Schlüssel darstellen möchten, ist es normalerweise am besten, das separat zu verfolgen. Es gibt 'collections.OrderedDict', aber das verfolgt die Reihenfolge nach eigenen Regeln, über die Sie nicht viel Kontrolle haben. – user2357112

+0

oder Sie könnten sich [dict.items()] (https://docs.python.org/3.5/library/stdtypes.html#dict.items) ansehen – bobsterman

Antwort

1

Sie haben hier zwei verschiedene Arten von Daten. Der eine ist ein langfristiger Satz von Merkmalen (wie viele Instanzen des Objekts erscheinen) und der andere ist ein sehr vorübergehender Index, der nur vom Benutzer für eine Menüauswahl verwendet wird. Delegieren Sie den zweiten Anwendungsfall an eine Funktion, die die Aufforderung ausführt. Es kann eine einfache Liste verwenden, die Sie an die Funktion übergeben und die Indexierung selbst herausfinden.

item_database = {"cat":1, "mouse":1, "broom":1} 

def multiprompt(base, *items): 
    """Prompt for a list of items and return the item selected""" 
    while 1: 
     for index, item in enumerate(items, 1): 
      print("{}. {} {}".format(index, base, item)) 
     try: 
      choice = int(input("Select number: ")) 
      if choice < 1 or choice > len(items): 
       raise ValueError() 
      return items[choice-1] 
     except ValueError: 
      print("Error, try again") 

choice = multiprompt("Take or observe", "cat", "mouse", "broom") 
print("You chose {} which as count {}".format(choice, 
    item_database[choice])) 
Verwandte Themen