En Python, las instrucciones if, elif (contracción de «else and if») y else se usan para controlar el flujo de ejecución y tomar decisiones en un programa.
A diferencia de muchos otros lenguajes de programación, las versiones 3.9 y anteriores de Python no ofrecen una instrucción formal de tipo switch-case, y en su lugar usan varias instrucciones elif para cumplir un propósito similar.
Python 3.10 introduce una variante de instrucción switch-case denominada structural pattern matching, que se tratará por separado en otro concepto.
Las instrucciones condicionales usan expresiones que deben resolverse a True o False, ya sea devolviendo directamente un tipo bool o evaluándose como «truthy» o «falsy».
x = 10
y = 5
# The comparison '>' returns the bool 'True',
# so the statement is printed.
if x > y:
print("x is greater than y")
...
>>> x is greater than y
Cuando se combina con if, un bloque de código else opcional se ejecutará cuando la condición if original se evalúe como False:
x = 5
y = 10
# The comparison '>' here returns the bool 'False',
# so the 'else' block is executed instead of the 'if' block.
if x > y:
print("x is greater than y")
else:
print("y is greater than x")
...
>>> y is greater than x
elif permite varias evaluaciones o ramas.
x = 5
y = 10
z = 20
# The 'elif' statement allows for the checking of more conditions.
if x > y:
print("x is greater than y and z")
elif y > z:
print("y is greater than x and z")
else:
print("z is greater than x and y")
...
>>> z is greater than x and y
Las operaciones booleanas y las comparaciones pueden combinarse con condicionales para hacer comprobaciones más complejas:
>>> def classic_fizzbuzz(number):
if number % 3 == 0 and number % 5 == 0:
say = 'FizzBuzz!'
elif number % 5 == 0:
say = 'Buzz!'
elif number % 3 == 0:
say = 'Fizz!'
else:
say = str(number)
return say
>>> classic_fizzbuzz(15)
'FizzBuzz!'
>>> classic_fizzbuzz(13)
'13'
En este ejercicio vamos a desarrollar un sistema de control sencillo para un reactor nuclear.
Para que un reactor produzca potencia, debe encontrarse en un estado de criticidad. Si el reactor se encuentra en un estado por debajo de la criticidad, puede dañarse. Si el estado del reactor va más allá de la criticidad, puede sobrecargarse y provocar una fusión del núcleo. Queremos mitigar las posibilidades de una fusión del núcleo y gestionar correctamente el estado del reactor.
Las tres tareas siguientes están relacionadas con escribir código para mantener el estado ideal del reactor.
Lo primero que tiene que hacer un sistema de control es comprobar si el reactor está equilibrado en criticidad. Se dice que un reactor está equilibrado en criticidad si cumple las siguientes condiciones:
Implementa la función is_criticality_balanced(), que recibe como parámetros temperature medida en kelvin y neutrons_emitted, y devuelve True si se cumplen las condiciones de criticidad, y False si no.
>>> is_criticality_balanced(750, 600)
True
Una vez que el reactor ha empezado a producir potencia, hay que determinar su eficiencia. La eficiencia puede agruparse en 4 bandas:
green -> eficiencia del 80% o más,orange -> eficiencia inferior al 80%, pero de al menos el 60%,red -> eficiencia por debajo del 60%, pero aún del 30% o más,black -> eficiencia inferior al 30%.El valor porcentual se puede calcular como (generated_power/theoretical_max_power)*100, donde generated_power = voltage * current.
Ten en cuenta que el valor porcentual normalmente no es un número entero, así que asegúrate de utilizar correctamente las comparaciones < y <=.
Implementa la función reactor_efficiency(<voltage>, <current>, <theoretical_max_power>), con tres parámetros: voltage, current y theoretical_max_power.
Esta función debe devolver la banda de eficiencia del reactor: 'green', 'orange', 'red' o 'black'.
>>> reactor_efficiency(200,50,15000)
'orange'
Tu última tarea consiste en crear un mecanismo a prueba de fallos para evitar sobrecargas y fusiones del núcleo. Este mecanismo determinará si el reactor está por debajo, en o por encima del umbral de criticidad ideal. La criticidad se puede aumentar, reducir o detener insertando (o retirando) barras de control en el reactor.
Implementa la función fail_safe(), que recibe 3 parámetros: temperature medida en kelvin, neutrons_produced_per_second y threshold, y genera un código de estado para el reactor.
Si temperature * neutrons_produced_per_second < 90% de threshold, genera un código de estado 'LOW' que indica que hay que retirar las barras de control para producir potencia.
Si el valor temperature * neutrons_produced_per_second está dentro del 10% del threshold (es decir, entre un 0 y un 10% por debajo del umbral, en el umbral, o entre un 0 y un 10% por encima del umbral), el reactor está en criticidad y se debe generar el código de estado 'NORMAL', que indica que el reactor está en condiciones óptimas y que las barras de control están en una posición ideal.
Si temperature * neutrons_produced_per_second no está en los rangos indicados anteriormente, el reactor va a entrar en fusión del núcleo y se debe pasar el código de estado 'DANGER' para apagar el reactor de inmediato.
>>> fail_safe(temperature=1000, neutrons_produced_per_second=30, threshold=5000)
'DANGER'
Regístrate en Exercism para aprender y dominar Python con 17 conceptos146 ejercicios y mentoría humana real, todo gratis.