Загрузка данных


import random

class LiftSimulator:
    def __init__(self):
        self.failures = {
            "Разбитое зеркало": False,
            "Занято (перегруз)": False,
            "Зажат предмет в дверях": False,
            "Нет электричества": False,
            "Нажата кнопка 'Стоп' внутри": False
        }
        self.external_factors = {
            "Кто-то курит в кабине": False,
            "Разлита жидкость на полу": False,
            "В лифте громкая музыка": False,
            "Пассажир потерял сознание": False
        }

    def apply_random_failures(self):
        for key in self.failures:
            if random.random() < 0.1:
                self.failures[key] = True

        for key in self.external_factors:
            if random.random() < 0.1:
                self.external_factors[key] = True

    def reset_state(self):
        for key in self.failures:
            self.failures[key] = False
        for key in self.external_factors:
            self.external_factors[key] = False

    def check_if_can_move(self):
        critical_failures = ["Нет электричества", "Зажат предмет в дверях", "Нажата кнопка 'Стоп' внутри"]
        for fail in critical_failures:
            if self.failures[fail]:
                return False, f"КРИТИЧЕСКАЯ ОШИБКА: {fail}"
        return True, "Лифт исправен, движение разрешено"

    def print_table(self):
        print("\n" + "-" * 100)
        print(f"{'Тип':<25} {'Описание':<35} {'Активна':<10} {'Влияние на движение':<30}")
        print("-" * 100)
        
        for failure, status in self.failures.items():
            status_text = "ДА" if status else "НЕТ"
            influence = "Блокирует" if failure in ["Нет электричества", "Зажат предмет в дверях", "Нажата кнопка 'Стоп' внутри"] else "Не блокирует"
            print(f"{'Техническая неисправность':<25} {failure:<35} {status_text:<10} {influence:<30}")
        
        for factor, status in self.external_factors.items():
            status_text = "ДА" if status else "НЕТ"
            print(f"{'Внешний фактор':<25} {factor:<35} {status_text:<10} {'Не блокирует (дискомфорт)':<30}")
        
        print("-" * 100)

    def run_simulation(self):
        print("=" * 100)
        print("СИМУЛЯТОР ЛИФТА С ВЕРОЯТНОСТЬЮ ПОЛОМОК 10%")
        print("=" * 100)
        
        self.reset_state()
        self.apply_random_failures()
        
        self.print_table()
        
        can_move, reason = self.check_if_can_move()
        
        if can_move:
            print("\nРЕЗУЛЬТАТ: Лифт поедет")
            print(f"   Причина: {reason}")
            
            active_external = [f for f, s in self.external_factors.items() if s]
            if active_external:
                print("   Но присутствуют внешние факторы:")
                for factor in active_external:
                    print(f"      - {factor}")
                    
            active_failures_non_critical = [f for f, s in self.failures.items() if s and f not in ["Нет электричества", "Зажат предмет в дверях", "Нажата кнопка 'Стоп' внутри"]]
            if active_failures_non_critical:
                print("   Присутствуют некритичные неисправности:")
                for failure in active_failures_non_critical:
                    print(f"      - {failure}")
        else:
            print("\nРЕЗУЛЬТАТ: Лифт НЕ поедет")
            print(f"   Причина: {reason}")
        
        print("\n" + "=" * 100)

if __name__ == "__main__":
    simulator = LiftSimulator()
    
    for i in range(3):
        print(f"\n\nСИМУЛЯЦИЯ N {i+1}")
        simulator.run_simulation()
        if i < 2:
            input("\nНажмите Enter для следующей симуляции...")