48. Estados

Crea un sistema de gestión de estados para una entidad (por ejemplo, un personaje de juego o un dispositivo) que pueda pasar de un estado a otro bajo ciertas condiciones.

La función debe aceptar el estado actual de la entidad y una "acción" o "evento". Debe devolver el nuevo estado de la entidad basado en una tabla de transición de estados predefinida. No se permite la mutación directa del estado.

# Ejemplo de tabla de transición de estados
# (estado_actual, evento) -> nuevo_estado
transiciones = {
    ("Apagado", "Encender"): "Encendido",
    ("Encendido", "Apagar"): "Apagado",
    ("Encendido", "Suspender"): "Suspendido",
    ("Suspendido", "Reanudar"): "Encendido",
    ("Encendido", "Reiniciar"): "Encendido", # Se queda encendido pero se reinicia
    ("Apagado", "Reiniciar"): "Encendido"
}

def transicion_estado(estado_actual: str, evento: str, tabla_transiciones: dict) -> str:
    # Tu código aquí
    pass

# Ejemplo de uso
# estado_inicial = "Apagado"
# estado_1 = transicion_estado(estado_inicial, "Encender", transiciones) # "Encendido"
# estado_2 = transicion_estado(estado_1, "Suspender", transiciones) # "Suspendido"
# estado_3 = transicion_estado(estado_2, "Reanudar", transiciones)   # "Encendido"
# estado_4 = transicion_estado(estado_3, "Apagar", transiciones)       # "Apagado"
# estado_invalido = transicion_estado(estado_4, "Reanudar", transiciones) # "Apagado" (no hay transición definida)

Ratoncito

Implementa la función transicion_estado para que determine el nuevo estado basándose en la tabla de transiciones. Si no hay una transición definida para el estado_actual y el evento, debe devolver el estado_actual sin cambios.

Dragón

Extiende el sistema para que las transiciones puedan ejecutar "acciones" secundarias (por ejemplo, imprimir un mensaje, registrar un evento) al realizar una transición. También, considera un sistema donde ciertos eventos solo sean válidos si se cumple una "condición" adicional (por ejemplo, "Encender" solo si la batería no está baja).

This work is under a Attribution-NonCommercial-NoDerivatives 4.0 International license.

Will you buy me a coffee?

Visitors in real time

You are alone: 🐱