Sentencias condicionales
Es necesario aclarar que el flujo de ejecución de un programa es el orden que sigue un programa al ejecutar las instrucciones. Normalmente este flujo en los lenguajes de programación es línea por línea desde arriba hacia abajo, como si de leer una carta se refiere. Ahora bien, las sentencias condicionales en un lenguaje de programación son estructuras de control en donde se evalúa la condicion booleana TRUE de una expresión y a continuación ejecuta un bloque de código. En caso de no ser TRUE conduce flujo del programa hacia otra parte del bloque de código dentro de la estructura de control.
Codicional IF
La palabra reservada IF se usa para dar inicio a la estructura de sentencias condicionales.
La sintaxis de una instrucción condicional IF es de la siguiente manera:
IF <condición a evaluar>:
<instrucciones en caso de ser TRUE>
...
<última instrucción del bloque IF>
<instrucción fuera del bloque IF>
La estructura básica de una sentencia IF se puede ver en el siguiente ejemplo práctico:
El resultado de la ejecución del código anterior es:
Esta parte del código sólo se ejecuta en caso de ser TRUE
De no haber arrojado TRUE la evaluación de la sentencia condicional IF, no se hubiera mostrado por pantalla la frase "Esta parte del código sólo se ejecuta en caso de ser TRUE", ya que el programa nunca hubiera permitido que el flujo de programa hubiera tomado esa dirección.
Es importante destacar que luego de la condición a evaluar se debe colocar dos puntos (:) y el bloque de código. Además el sangrado que se deja luego de los dos puntos le indica al intérprete de Python cual es el bloque de código a ejecutar en caso de que la condición evaluada en la sentencia IF devuelva TRUE.
Si deseamos realizar otra acción diferente en caso de que la condición a evaluar arroje false se debe usar la sentencia de bifurcación ELSE:. Respetando de igual manera la colocación de los dos puntos (:) y el sangrado del bloque de código correspondiente en la bifurcación ELSE. Veamos un ejemplo donde deseamos evaluar si el usuario ingresa un valor positivo o negativo. Para esto nos valdremos de la función de entrada INPUT() la cual recibe por teclado un valor y lo devuelve. Básicamente su funcionamiento es que la ejecución del código se detiene ante una instrucción INPUT() y queda a la espera de la introducción de un valor por teclado y se presione la tecla enter. Es importante destacar que cualquier valor introducido a través de la instrucción INPUT() es considerado como texto, es por ello que es necesario recurrir a la función INT() para convertir en valor entero la cadena ingresada por teclado. En este caso lo vamos a enviar a una variable llamada n, quedando el código de la siguiente manera:
El resultado del código anterior si ingresamos el número 4 sería:
Ingrese un numero: 4
4 es un valor positivo (mayor que cero)
Ahora evaluemos el resultado si ingresamos el número -20. El resultado sería:
Ingrese un numero: -20
-20 es un valor negativo (menor que cero)
Como podemos comprobar hasta ahora el código funciona. El flujo del programa toma una ruta u otra dependiendo del valor ingresado por el usuario (si es positivo o negativo).
Como es natural uno podría preguntarse ¿Podría funcionar el programa si en lugar de usar la sentencia de bifurcación ELSE se usara otra sentencia IF separada que evaluara si el valor ingresado fuera negativo?. Pues la respuesta es que en realidad sí, pero hay una razón de peso para usar las sentencias de bifurcación y es por la cual fueron creadas en primer lugar.
Primero que nada comprobemos si en realidad funcionaría usando 2 sentencias condicionales IF en lugar de una sentencia IF con su bifurcación ELSE:
El código quedaría de la siguiente manera:
Ingresando el valor 5 da el siguiente resultado:
Ingrese un numero: 5
5 es un valor positivo (mayor que cero)
Ingresando el valor -5 arroja lo siguiente:
Ingrese un numero: -5
-5 es un valor negativo (menor que cero)
Nota importante:
Como podemos ver sí funciona, pero programar de esta manera resulta en una mala práctica ya que en realidad estamos forzando al intérprete de Python a evaluar dos veces la misma condición, mientras que en una sola instrucción condicional IF con su respetiva sentencia de bifurcación ELSE, Python esta evaluando solo 1 vez la condición y tomando una ruta u otra dependiendo del resultado si es TRUE o FALSE. En un programa tan simple como este no se aprecia la diferencia de rendimiento, pero en un programa mucho mas complejo con muchas condiciones a evaluar si que se puede notar la caída de rendimiento y ralentización del programa. A fines de desarrollar buenos hábitos de programación ésta es una práctica que se debe evitar, se deben usar las instrucciones de bifurcación dentro de las sentencias condicionales en todo momento que sea posible por sencilla que sea la tarea que se desee realizar.
Veamos otro ejemplo práctico, en este caso vamos a crear un programa que llame a una función la cual devuelva una cadena indicando si un alumno esta aprobado o reprobado dependiendo de su nota final. El criterio es que la nota por debajo de 10, es decir de 0 a 9 inclusive, equivale a reprobado.
Resultado ingresando 15:
***** Programa de notas de alumnos *****
Introduzca la nota final del alumno: 15
El alumno está Aprobado
Resultado ingresando 9:
***** Programa de notas de alumnos *****
Introduzca la nota final del alumno: 9
El alumno está Reprobado
Como podemos apreciar la estructura de control de flujo condicional IF esta funcionando perfectamente.
Otra forma de evaluar las condiciones: la palabra reservada NOT.
En la vida diaria, uno podría hacerse la mismas pregunta pero de diferentes maneras, por ejemplo para decir si esta lloviendo podría decirse: "Está lloviendo". Con lo cual se está afirmando rotundamente que efectivamente cae agua del cielo. Sin embargo también esta misma afirmación podría hacerse con una negación: "No deja de caer agua" y con esta afirmación categórica efectivamente estamos afirmando que esta lloviendo. Como podemos ver se puede llegar a la misma conclusión lógica tanto afirmando como negando una condición.
En la programación en general y por supuesto también en Python, se puede evaluar la condición negada obteniendo la respuesta booleana contraria a si se hubiera evaluado la condición sin la negación. En todo caso la lógica de programación permitirá conducir el flujo del programa de manera correcta dependiendo de las condiciones evaluadas y las respuestas booleanas obtenidas por el intérprete.
Para negar una condición se utiliza la palabra reservada NOT, simplemente se antepone a la condición a evaluar y ésta devolverá la condición booleana contrariaa la que arrojaría normalmente al evaluarse.
Veamos un ejemplo práctico para aclarar un poco el panorama:
Este código equivaldría a preguntarse en nuestro lenguaje humano Si la variable 'n' no es mayor que cero muestra por pantalla el valor de la variable 'n' y escribe que es un valor negativo (menorque cero).
El código anterior funcionaría en la mayoría de los casos como podemos ver con las siguientes pruebas introduciendo una variedad de valores:
Prueba con -45
Ingrese un numero: -45
-45 es un valor negativo (menor que cero)
Prueba con -3
Ingrese un numero: -3
-3 es un valor negativo (menor que cero)
Prueba con 12
Ingrese un numero: 12
(al ingresar 12 no hubo resultados ya que luego de la sentecia condicional no hay código sino mas bien termina el programa, y esto es correcto ya que el programa no esta arrojando ninguna información errónea)
Prueba con 0
Ingrese un numero: 0
0 es un valor negativo (menor que cero)
Esto sí es un error, ya que la evaluación de la variable, cuyo valor es cero, no es mayor que cero, sino mas bien igual a cero. Con lo cual la evaluación si cero no es mayor que cero, (cosa que es cierta), llevara el flujo del programa al bloque de código que le indica al computador que muestre el mensaje diciendo que 0 es un valor negativo (cosa que obviamente no es cierta, ya que el cero no es ni positivo ni negativo, sino neutral o simplemente cero). Tampoco sirve evaluar la condición contraria, es decir escribir el código de la siguiente manera:
ya que sí funcionaría para los números diferentes a cero, pero en este caso si es igual a cero el programa no haría nada, tal como si fuera un número negativo. Aunque en este caso el programa al menos no emite un mensaje equivocado, estamos dejando de evaluar algunas condiciones que, dependiendio del uso, aplicación y circunstancia del programa, podrían ser muy utiles o incluso indispensables, haciendo que la omisión de estas condiciones conduzcan a un fallo del sistema o aún peor, a la salida de información errónea.
Veamos esto en la práctica:
Prueba con 4
Ingrese un numero: 4
4 es un valor positivo (mayor que cero)
Prueba con 8
Ingrese un numero: 8
8 es un valor positivo (mayor que cero)
Prueba con 0
Ingrese un numero: 0
(Al ingresar 0 no hubo resultados ya que la condición 0 mayor que 0 arroja FALSE por lo tanto no ejecuta el bloque de código, saltando hasta que al encontrar el final del programa termina sin mas)
Como se dijo antes aunque al menos esta vez el programa no mostró ningún mensaje equivocado, aunque si se omitió la posibilidad que el usuario ingresara 0 que es diferente a un valor positivo o negativo. Cabe preguntarse ¿Cómo direccionar de manera óptima el flujo del programa evaluando una condición con 3 posibles resultados? En este caso evaluar si el usuario ha ingresado un valor mayor a cero, menor a cero o igual a cero. Pues como ya se ha dicho antes, lo más óptimo sería usar la menor cantidad de evaluaciones posibles para hace el mismo trabajo. Para esto nos valdremos de las sentencias de bifurcación ELIF
Sentencia de bifurcación ELIF
La sentencia de bifurcación ELIF permite evaluar una o mas condiciones luego del IF, de la siguiente manera
IF condicion a evaluar:
este bloque se ejecuta en caso de ser TRUE la condicion del IF
ELIF otra condición a evaluar:
este bloque se ejecuta si no entró al primero pero si devuelve TRUE en esta sentencia ELIF
ELSE:
este bloque se ejecuta en caso que no sean TRUE ninguna de las condiciones anteriores
La instrucción ELSE se podría traducir como "y si no es verdad", lo cual hace que se ingrese por esta instrucción de bifurcación si todas las anteriores dieron como resultado FALSE en su evaluación de la condición.
Es importante destacar aunque parezca obvio, que la instrucción IF puede estar sola, pero las instrucciones ELSE y ELIF necesitan una instrucción IF que las anteceda.
Veamos un ejemplo práctico y sencillo:
Los 3 posibles resultados son:
Prueba con 4
Ingrese un numero: 4
4 es un valor positivo (mayor que cero)
Comentarios
Publicar un comentario