Загрузка данных
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 для следующей симуляции...")