2016-04-10 14 views
0

私はテキストの冒険をコーディングしています。ユーザーがエリアとそのエリアのオブジェクトを観察できるシステムを作成しました。辞書のキーの位置を検出する

たとえば、ユーザーがとしての領域を観察することができます。

「当たり障りのない、静かな砂漠をあなたはマウス、およびほうきを見ることができます。」

forループを使用する前に、番号の付いた項目のリストを作成します。

  1. 猫を取るか、観察
  2. マウスを取るか、観察

など

私はそれがテキストで表示されるように私は、各辞書のエントリに番号を割り当てることができる方法を知りたいです。

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

各キーの値が表示されますどのように多くのインスタンスオブジェクトのです。私のコードでは、各キーの辞書値から順に参照可能な値を持つことができますか?

ユーザーは、番号付きリストに対応する応答の番号を入力できる必要があります。彼らが「1」を選択すると、彼らは猫を観察することを選択し、そのオブジェクトの現在の領域に基づいて変化する「オブジェクト番号1」に基づいて変更することができる。

ユーザ暗い洞窟にあります.SAME辞書が「犬」に変更されている場合は、「オブジェクト番号1」になっている可能性があります。ユーザーは "1"を選択してCATの代わりに犬を観察できるはずです...

どのようにしてどのキーが辞書のどの位置にあるのかを検出できますか?

+0

ユーザが辞書を定義するのですか、それともプログラマによって初期化されていますか? –

+3

Dictエントリーは*ポジションを持っていません。キーの順序を表現したい場合は、通常それを別々に追跡することが最善です。 'collections.OrderedDict'がありますが、それは自分のルールでオーダーを管理しています。 – user2357112

+0

または[dict.items()](https://docs.python.org/3.5/library/stdtypes.html#dict.items)をご覧ください。 – bobsterman

答えて

1

ここには2種類のデータがあります。 1つは長期的な特性セット(オブジェクトのインスタンス数)であり、もう1つは非常に過渡的なインデックスであり、ユーザーがメニュー選択に使用するだけです。その2番目のユースケースをプロンプトを実行する関数に委譲します。関数に渡すシンプルなリストを使用して、インデックス自体を把握することができます。

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