Определить положение ключей словаря

Я пишу текстовое приключение и создал систему, в которой пользователь может наблюдать за областью и объектами в этой области.

Например, пользователь может наблюдать за областью как:

"Мягкая, тихая пустыня. Вы можете видеть кошку, мышь и метлу".

Он создает список элементов с номером перед каждым использованием цикла for.

  1. Взять или понаблюдать за кошкой
  2. Возьми или наблюдай за мышью

и т.п.

Я хочу знать, как я могу назначить номер для каждой записи dict, как это появляется в тексте.

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

Значение для каждого ключа - это количество экземпляров объекта. Как сделать так, чтобы в моем коде для каждого ключа было значение ASIDE из его словарного значения, чтобы можно было ссылаться по порядку?

Пользователь должен иметь возможность набирать номер своего ответа, соответствующий нумерованному списку. Если они выбирают "1", они выбирают наблюдать за кошкой, и это может измениться в зависимости от того, какой "объект номер 1" будет в этом словаре, который изменяется в зависимости от того, в какой области в данный момент находится пользователь.

Если пользователь находится в темной пещере, возможно, "объект номер 1" в этом ЖЕ словаре заменен на "собака". Пользователь должен иметь возможность выбрать "1" и наблюдать СОБАКУ вместо CAT...

Итак, как я могу определить, какой ключ находится в какой позиции словаря?

1 ответ

У вас есть два разных типа данных здесь. Один - это долгосрочный набор признаков (сколько экземпляров объекта появляется), а другой - очень кратковременный индекс, используемый только пользователем для выбора меню. Передайте этот второй вариант использования функции, которая выполняет запрос. Он может использовать простой список, который вы передаете функции и вычисляете саму индексацию.

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]))
Другие вопросы по тегам