Реализуйте программу, имитирующую работу лифта в многоэтажном здании.

Храните этаж и состояние дверей в объекте лифта, а разбор команд отделите от изменения состояния. Диапазон этажей и начальное положение передавайте параметрами.

Короткий ответ

Что ответить на собеседовании

Храните этаж и состояние дверей в объекте лифта, а разбор команд отделите от изменения состояния. Диапазон этажей и начальное положение передавайте параметрами.

Подробный разбор

Ответ с пояснениями

Условие

Реализуйте программу, имитирующую работу лифта в многоэтажном здании. Программа должна обрабатывать команды пользователя и выводить результаты их выполнения.

Программа должна быть поддерживаемой и расширяемой.

Требования:

  1. Программа должна начинаться с вывода текущего этажа лифта и перевода строки.
  2. Программа должна запрашивать ввод пользователя и обрабатывать команды, которые она умеет выполнять.
  3. Программа должна выводить ответ выполненной команды, текущий этаж лифта и перевод строки.
  4. Программа должна реализовывать следующие команды: 4.1. помощь: выводить список доступных команд одной строкой в виде: "Доступные команды: [список команд в виде строк разделенных запятыми]". 4.2. ехать на <этаж>: при наличии такого этажа в здании переместить лифт на этот этаж и вывести "Лифт прибыл на <этаж> этаж". При отсутствии такого этажа вывести "Этаж не существует". 4.3. открыть: открыть двери лифта и вывести "Двери лифта открыты". 4.4. закрыть: закрыть двери лифта и вывести "Двери лифта закрыты". 4.5. выход: завершить интерактивную сессию. 4.6. при вводе любой другой строки не совершать никаких действий и вернуться к запросу ввода команды.

Ответ

Храните этаж и состояние дверей в объекте лифта, а разбор команд отделите от изменения состояния. Диапазон этажей и начальное положение передавайте параметрами.

Минимальный пример: этажи 1…floors, старт на первом. Поездка закрывает двери — это явно выбранное правило, которого нет в условии.

class Elevator:
    def __init__(self, floors):
        if floors < 1:
            raise ValueError('floors must be positive')
        self.floors, self.floor, self.opened = floors, 1, False

    def move(self, floor):
        if not 1 <= floor <= self.floors:
            return 'Этаж не существует'
        self.opened, self.floor = False, floor
        return f'Лифт прибыл на {floor} этаж'

    def door(self, opened):
        self.opened = opened
        return 'Двери лифта открыты' if opened else 'Двери лифта закрыты'

def run(floors):
    elevator = Elevator(floors)
    help_text = 'Доступные команды: помощь, ехать на <этаж>, открыть, закрыть, выход'
    actions = {
        'помощь': lambda: help_text,
        'открыть': lambda: elevator.door(True),
        'закрыть': lambda: elevator.door(False),
    }
    print(elevator.floor)
    while True:
        try:
            command = input().strip()
        except EOFError:
            break
        if command == 'выход':
            break
        if command in actions:
            result = actions[command]()
        elif command.startswith('ехать на '):
            try:
                floor = int(command[len('ехать на '):])
            except ValueError:
                continue
            result = elevator.move(floor)
        else:
            continue
        print(result)
        print(elevator.floor)

Неизвестная команда не меняет состояние и не печатает ответ. Параметр floors задаётся вызывающим кодом; асинхронное движение и очередь вызовов в условии не требуются.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее