Перемещение между комнатами с помощью словаря?

#python #python-3.x

#питон #python-3.x

Вопрос:

Я уже придумал код, чтобы это сработало. Единственная проблема, с которой я сталкиваюсь, заключается в том, как использовать словарь, а не просто делать кучу утверждений «если» с комментариями, которые должны соответствовать моим комментариям, а не словарю.

Я надеялся на тот же результат, что и в моем коде, но с использованием фактического сравнения ключей или/и значений для вариантов выбора наоборот.

 rooms = { 'Great Hall': {'South': 'Bedroom'}, 'Bedroom': {'North': 'Great Hall', 'East': 'Cellar'}, 'Cellar': {'West': 'Bedroom'} }  location = 'Great Hall' # Starting location for the player # print('n', *rooms[location].keys())  direction = '' # assigning a value for user input ensuring it starts blank   def instructions():  print("Welcome to the Milestone for Module 6.")  print("Current instructions are as follows.")  print("Type the right direction to go to the next room")  print("When you move onto the game it will assist you with the right direction")  print("You can type exit to leave the game after this menu")  print("press Enter to start the game")   instructions() input()   def main():  if location == "Great Hall":  print("Current Choice is South.")  elif location == "Bedroom":  print("Current Choice is North or East")  elif location == "Cellar":  print("Current Choice is West")   while direction != 'Exit':  print("nyou are currently held in", location) # Stating the current position player is in   choices = rooms[location].keys()  print("Which direction would you like to choose?")  main()  direction = input()  print("You entered", direction)   if location == 'Great Hall':  if direction == "South":  location = 'Bedroom'  elif direction == "Exit":  print()  else:  print("Wrong Input")  elif location == "Bedroom":  if direction == "North":  location = "Great Hall"  elif direction == "East":  location = "Cellar"  elif direction == "Exit":  print()  else:  print("Wrong input")  elif location == "Cellar":  if direction == "West":  location = "Bedroom"  elif direction == "Exit":  print()  else:  print("Wrong input")  

Комментарии:

1. Добро пожаловать в Stack Overflow. Я не верю, что у вас есть реальный вопрос; я верю, что вы уже знаете, как его решить, и я хотел бы вам это доказать. По вашим собственным словам, когда вы писали choices = rooms[location].keys() , как это работает ? Почему вы не написали, например if location == 'Great Hall': choices = {'South': 'Bedroom'}.keys() , и т. Д.? Как словарь помог вам if в тот раз избежать необходимости в утверждениях? Так почему бы просто не… сделать то же самое снова?

2. (С другой стороны: обратите внимание, как вы вычисляете choices , но на самом деле ничего с этим не делаете? Это почему? Попытайтесь вспомнить, когда вы писали эту строку кода, и вспомните свой мыслительный процесс в то время. Что вы хотели сделать с этой информацией?)

3.Эй, Карл, спасибо, что ответил на мой пост! Да , я заметил, что делал выбор и не обязательно включал словарь в код. Вот в чем проблема, с которой я сталкиваюсь. Я пытался сделать это раньше, но потом мне не удалось перевести термины из словаря в операторы if. Например, мне было интересно, есть ли способ сделать что-то вроде (psuedocode ниже) if location == .keys then possible choices , поэтому я имею в виду «меньше», если операторы используют словарь. Также как это назвать и сравнить в операторах if, потому что, когда я это делаю, это терпит неудачу.

Ответ №1:

Это один из способов заменить последовательные тесты функцией:

 rooms = { 'Great Hall': {'South': 'Bedroom'}, 'Bedroom': {'North': 'Great Hall', 'East': 'Cellar'}, 'Cellar': {'West': 'Bedroom'} }  def possible_directions(room):  print(f'Possible choices are: {" or ".join(rooms[room])}')  possible_directions('Bedroom')  

Выход:

 Possible choices are: North or East  

Комментарии:

1. Огромное спасибо. Мне было интересно, как я смогу привести значения словаря и ключи для сравнения с пользовательским вводом. Итак (psueodocode) if location == .key() then produce possible choices for new location

2. Итак, обратите внимание на rooms[room] часть кода, показанную выше? Ты понимаешь, что это значит? Что он делает?

3. Отдельно: когда вы создавали rooms в первую очередь, каково было ваше собственное понимание того, что это значит, и как это поможет вам решить общую проблему? По вашим собственным словам, что такое а dict и для чего оно полезно?

4. Насколько я понимаю, Карл, словарь-это своего рода «база данных», в которой вам разрешено хранить ключи и значения. Моя проблема в том, чтобы иметь возможность вызывать эти ключи и значения, связанные с их правильным размещением. Поэтому я пытался сократить условия if, потому что знаю, что это возможно, позволив python получить доступ к словарю и посмотреть, связаны ли правильные ключи с правильными значениями. Вместо того, чтобы записывать все ключи в кучу операторов if и вообще не использовать словарь.