import random
import pandas as pd
from tabulate import tabulate
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 generate_report_table(self):
data = []
for failure, status in self.failures.items():
data.append({
"Тип": "Техническая неисправность",
"Описание": failure,
"Активна": "ДА" if status else "НЕТ",
"Влияние на движение": "Блокирует" if failure in ["Нет электричества", "Зажат предмет в дверях", "Нажата кнопка 'Стоп' внутри"] else "Не блокирует"
})
for factor, status in self.external_factors.items():
data.append({
"Тип": "Внешний фактор",
"Описание": factor,
"Активна": "ДА" if status else "НЕТ",
"Влияние на движение": "Не блокирует (дискомфорт)"
})
return pd.DataFrame(data)
def run_simulation(self):
print("=" * 80)
print("СИМУЛЯТОР ЛИФТА С ВЕРОЯТНОСТЬЮ ПОЛОМОК 10%")
print("=" * 80)
self.reset_state()
self.apply_random_failures()
df = self.generate_report_table()
print(tabulate(df, headers='keys', tablefmt='grid', showindex=False))
print("\n" + "-" * 80)
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}")
else:
print("\nРЕЗУЛЬТАТ: Лифт НЕ поедет")
print(f" Причина: {reason}")
print("\n" + "=" * 80)
if __name__ == "__main__":
simulator = LiftSimulator()
for i in range(3):
print(f"\nСИМУЛЯЦИЯ N {i+1}")
simulator.run_simulation()
if i < 2:
input("\nНажмите Enter для следующей симуляции...")