Как сбросить словарь в Python 2 - PullRequest
0 голосов
/ 11 сентября 2018

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

1 Ответ

0 голосов
/ 11 сентября 2018

Словари Python не сохраняют историю, когда вы удаляете ключи из словаря, вы не можете позже «сбросить» его.Вам нужно будет просто воссоздать словарь или создать копию сначала .

Чтобы сделать что-либо, вам необходимо

  • Поместить определение словаря в функцию, и каждый раз, когда вам нужно запустить, вызывайте функцию, чтобы создать словарь снова.
  • или создайте копию с помощью dict.copy() каждый раз, когда вы запускаете игру, чтобы у вас был свежий словарь для редактирования.Удалите ключи из копии, а не из оригинала.

Лично я бы не стал редактировать словарь.Вместо этого я создал бы список всех названий комнат (ключей словаря), затем перетасовал бы этот список один раз и брал из него последнее значение каждый раз, когда вам нужна случайная комната, с random.shuffle()и list.pop().

Это имеет два преимущества:

  • Больше не нужно создавать словарь.Теперь вы создаете новый список.(Не такое большое преимущество).Это в основном похоже на вышеописанную опцию «сначала создать копию», но копия меньше.
  • Вы должны перетасовать только один раз.Перемешанный список также дает вам номера в случайном порядке и гарантирует, что вы также не получите дубликаты.Списки имеют порядок и остаются перемешанными, а словари - нет.

Это выглядело бы так:

# new game
roomnames = list(roomdescriptions)  # copy the names of the rooms dictionary
random.shuffle(roomnames)

# picking the next room
if not roomnames:
    # reaching the boss level!
else:
    # take the next random room name, and get the room description for it
    nextroom = roomdescriptions[roomnames.pop()]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...