import random
# ------------------------------
# Верхние и нижние пределы
# ------------------------------
limits = {
"weight": {"min": 0, "max": 250}, # кг
"speed": {"min": -1.0, "max": 1.0}, # м/с
"voltage": {"min": 342, "max": 418}, # В
"matrix_energy": {"min": 1, "max": 15} # условная энергия
}
# ------------------------------
# Сильные критерии лифта
# ------------------------------
strong_criteria = {
"overload": False, # True = перегрузка
"doors_closed": True, # True = двери закрыты
"maintenance_ok": True, # True = техническое состояние
"call_button_pressed": True
}
# ------------------------------
# Слабые критерии (не влияют)
# ------------------------------
weak_criteria = {
"light_on": True,
"music_playing": False
}
# ------------------------------
# Матрица принятия решений (по сильным критериям)
# True = лифт может ехать
decision_matrix = {
(False, True, True, True): True,
(True, True, True, True): False,
(False, False, True, True): False,
(False, True, False, True): False,
}
# ------------------------------
# Функция подъема лифта
# ------------------------------
def lift_move(weight, speed, voltage, doors_closed, matrix_energy, strong, weak, is_minus_day=False):
# Проверка пределов
weight_ok = limits["weight"]["min"] <= weight <= limits["weight"]["max"]
speed_ok = limits["speed"]["min"] <= speed <= limits["speed"]["max"]
voltage_ok = limits["voltage"]["min"] <= voltage <= limits["voltage"]["max"]
doors_ok = doors_closed
matrix_ok = (limits["matrix_energy"]["min"] <= matrix_energy <= limits["matrix_energy"]["max"]) and not is_minus_day
# Проверка матрицы по сильным критериям
key = tuple(strong[c] for c in ["overload", "doors_closed", "maintenance_ok", "call_button_pressed"])
if key in decision_matrix:
can_move = decision_matrix[key]
if can_move:
move_status = "Лифт успешно поехал!"
else:
move_status = "Проблема! Лифт не может ехать по матрице."
else:
move_status = "Комбинация сильных критериев не найдена в матрице!"
# Вывод состояния каждого параметра
print(f"Вес: {'ok' if weight_ok else 'error'}")
print(f"Скорость: {'ok' if speed_ok else 'error'}")
print(f"Напряжение: {'ok' if voltage_ok else 'error'}")
print(f"Двери закрыты: {'yes' if doors_ok else 'error'}")
print(f"Энергия матрицы: {'energy plus' if matrix_ok else 'energy minus'}")
print(f"Слабые критерии: {weak}")
print(move_status)
print("-" * 40)
return weight_ok and speed_ok and voltage_ok and doors_ok and matrix_ok and can_move
# ------------------------------
# Пример случайного тестирования
# ------------------------------
for i in range(5):
# Случайные параметры
weight = random.randint(200, 300)
speed = random.uniform(-2.0, 2.0)
voltage = random.randint(340, 420)
doors_closed = random.choice([True, False])
matrix_energy = random.randint(0, 20)
lift_move(weight, speed, voltage, doors_closed, matrix_energy, strong_criteria, weak_criteria)