Оптимизируйте код

введите сюда описание изображения

print('Добро пожаловать в игру Лабиринт')
print('Чтобы выбрать куда направится,введите одно слово из заключенных в кавычки')
room = 1
while room > 0:
    if room == 1:
        print('Вы находитесь в пещере на развилке. Вы можете пойти «налево», «направо» или «прямо».')
        direction = input()
        while direction != 'налево' and direction != 'прямо' and direction != 'направо':
            direction = input()
        if direction == 'налево':
            print('Вы пошли налево.')
            room = 2
        elif direction == 'прямо':
            print('Вы увидели пирата,который прятал своё сокровище.')
            room = -1
        elif direction == 'направо':
            print('Вы зашли в тёмную комнату,через некоторое время вы упали к тоннелям')
            room = -1
    elif room == 2:
        print('Вы выберете «левый» или «правый»? Или повернёте «назад»?')
        direction = input()
        while direction != 'левый' and direction != 'правый' and direction != 'назад':
            direction = input()
        if direction == 'левый':
            print('Вы вернулись в тёмную комнату')
            room = -1
        elif direction == 'правый':
            print('Вы смело вошли в правый тоннель. Но за ней вас поджидал пират,который вас убил')
            room = -2
        elif direction == 'назад':
            print('Вы отправились к начальной развилке.')
            room = 1

Код задачи (работающий), просто улучшите код, т.к. я думаю что слишком переусложнил его и можно сделать намного проще


Ответы (1 шт):

Автор решения: Stanislav Volodarskiy

Всегда мечтал написать текстовую игру. Вы всё сделали правильно. Можно отделить данные от кода. Код во всех комнатах одинаков, отличаются только текстовые сообщения, выбираемые действия и номера комнат. Соберите комнаты в единый словарь, который описывает весь игровой мир. Функция navigate в цикле выводит приглашение и вводит ответ пользователя. Если ответ соответствует ключу словаря actions, то печатается реакция и функция возвращает номер следующей комнаты:

def navigate(prompt, actions):
    while True:
        print(prompt)
        direction = input()
        if direction in actions:
            message, next_room = actions[direction]
            print(message)
            return next_room

rooms = {
    1: (
        'Вы находитесь в пещере на развилке. Вы можете пойти «налево», «направо» или «прямо».',
        {
            'налево': ('Вы пошли налево.', 2),
            'прямо': ('Вы увидели пирата, который прятал своё сокровище.', -1),
            'направо': ('Вы зашли в тёмную комнату, через некоторое время вы упали к тоннелям', -1)
        }
    ),
    2: (
        'Вы выберете «левый» или «правый»? Или повернёте «назад»?',
        {
            'левый': ('Вы вернулись в тёмную комнату.', -1),
            'правый': ('Вы смело вошли в правый тоннель. Но за ней вас поджидал пират,который вас убил', -2),
            'назад': ('Вы отправились к начальной развилке.', 1)
        }
    )
}


print('Добро пожаловать в игру Лабиринт')
print('Чтобы выбрать куда направится,введите одно слово из заключенных в кавычки')
room = 1
while room in rooms:
    prompt, actions = rooms[room]
    room = navigate(prompt, actions)
→ Ссылка