3. Control de Flujo: Condicionales

Contenidos

  1. Control de Secuencia: Instrucción if
  2. Construcción de Condiciones
  3. Control de Secuencia: Instrucciones if - else y elif
  4. Ejercicios

3.1 Control de Secuencia: Instrucción If

En el capítulo 1 vimos el concepto de algoritmo para definir una serie de pasos que deberá realizar el computador cuando sigue las instrucciones de nuestro programa. Estos pasos se realizan en forma secuencial: uno después del otro. No obstante, muchas veces queremos ejecutar uno o más pasos sólo si se cumpla una cierta condición. Si no se cumple, le diremos al programa que no haga nada o que realice otros pasos diferentes. Es como tomar una decisión: seguimos un camino u otro alternativo dependiendo de la evaluación de una cierta condición que nos permite decidir.

En programación, esto se conoce como control de flujo o control de secuencia y utilizaremos la instrucción if para hacerlo en Python. Veamos ahora el ejemplo 3.1. Supongamos que nos piden hacer un programa para determinar si un número entero que leemos desde el teclado, es par.

Ejemplo 3.1

En este ejemplo mostraremos el uso básico del if. Hay que hacer un programa que pida un número al usuario y compruebe si es par. El programa debe imprimir el mensaje “Era par!” en el caso de que el número haya sido par.

Podemos observar en este ejemplo, que la condición se escribe con una instrucción que tiene tres elementos: comienza con la palabra reservada if, sigue una condición (numero % 2 == 0) y termina con dos puntos (:). A continuación, la instrucción print está indentada (sangría, desplazada hacia la derecha) para indicar que se ejecuta solo si la condición es verdadera. Veremos prontamente las reglas para escribir las condiciones.

Figura 3.1
Figura 3.1. Sintaxis de la instrucción if en Python.

En la figura 3.1 se muestra la sintaxis (gramática) más básica de la instrucción if, con un camino que se ejecuta o no se ejecuta dependiendo de la condición. Acuérdate, que el símbolo # indica que lo que viene a continuación en esa línea es solo un comentario (para claridad de lectura) que Python no lee. Es vital aquí el desplazamiento (indentación) hacia la derecha de las instrucciones que se ejecutarán si la evaluación de la condición del if resulta en verdadero. En consecuencia, las instrucciones 1, 2 y 3 no se ejecutarán si la condición del if resulta en falso. Las instrucciones 4 y 5 siempre se ejecutarán a continuación del if, independiente del resultado de la evaluación de la condición. Podemos decir que la instrucción if termina cuando se acaba la indentación.

Antes de seguir con algunas variaciones de la instrucción if, veremos a continuación las reglas para expresar condiciones y la forma en que se evalúan.

3.2 Construcción de condiciones

En el capítulo anterior vimos que, además de los números enteros (int) y los reales (float), existen datos (objetos) de tipo (clase) llamados booleanos (bool en Python) que pueden tomar solo uno de dos valores posibles: True o False. La evaluación de una condición en una instrucción if siempre arroja un dato bool con valor True o valor False. Esto permite a Python decidir si las instrucciones dentro (indentadas) del if se ejecutan (condición True) o no (condición False).

Para construir una condición (también llamada expresión condicional), utilizamos datos o variables que llamamos operandos y los conectamos con operadores relacionales y operadores lógicos. Tal como se muestra en la figura 3.2, los operadores lógicos son símbolos matemáticos reconocidos por Python para expresar las siguientes condiciones: mayor, mayor igual, menor, menor igual, igual y distinto. Notar que, a diferencia de la matemática tradicional, la igualdad se representa por dos símbolos =. No se puede expresar con un solo símbolo = dado que es utilizado para expresar una asignación, tal como lo vimos en el capítulo anterior.

Figura 3.2
Figura 3.2. Operadores lógicos para expresar condiciones.

Por ejemplo, las siguientes expresiones o condiciones generan datos de tipo bool en las variables a la izquierda de las asignaciones:

var_1 = 5 > 2 # Genera un dato bool con valor True
var_2 = 7 == 3 # Genera un dato bool con valor False

En la figura 3.3 se muestran ejemplos para cada uno de los operadores lógicos que reconoce Python. Notar que a y b pueden ser datos numéricos, variables (con valores numéricos) o expresiones numéricas.

Figura 3.3
Figura 3.3. Ejemplo de expresiones condicionales con operadores lógicos.

Los operadores relacionales reconocidos por Python son and, or y not. Se utilizan para conectar expresiones condicionales entre sí. En Python, las reglas para evaluar los operadores relacionales son las mismas que las de la lógica Booleana. En la figura 3.4 se muestran ejemplos para cada uno de los operadores relacionales. Notar que a y b pueden ser datos booleanos, variables (con valores booleanos) o expresiones condicionales.

Figura 3.4
Figura 3.4. Ejemplo de expresiones condicionales con operadores lógicos.

En la figura 3.5 se describen las reglas para evaluar las condiciones con operadores relacionales. El operador and da como resultado True si y solo si ambos operandos son True. El operador or entrega True si alguno (o ambos) de sus operandos es True. Es decir, or solo entrega False si ambos operandos son False.

Figura 3.5
Figura 3.5. Reglas para evaluar los operadores relacionales.

3.3 Control de secuencia: if-else y elif

Veamos ahora una variante de la instrucción if donde se indican dos caminos alternativos. En el ejemplo 3.2, la instrucción print("Era mayor que cero") solo se ejecuta si la condición es verdadera, mientras que la instrucción print("Era menor o igual que cero") solo se ejecuta si la condición es falsa. Ambas instrucciones están indentadas. La instrucción else: indica que lo que viene indentado a continuación solo se ejecuta si la condición del if es falsa.

Ejemplo 3.2

En este ejemplo mostraremos el uso básico del if - else. Hay que hacer un programa que pida un número al usuario y compruebe si es mayor que 0. El programa debe imprimir un mensaje que diga si el numero era mayor que 0, o bien, menor o igual que 0.

En la figura 3.6 se muestra la sintaxis (gramática) de esta variante de la instrucción if, la cual utiliza la palabra reservada else (con dos puntos) para indicar un camino alternativo. Si la condición del if es verdadera (True), se ejecutan las instrucciones indentadas a continuación del if. Si la condición es falsa (False), solo se ejecutan las instrucciones indentadas a continuación del else. Cuando termina la indentación del else, el programa continúa su ejecución normal en forma independiente de la instrucción if-else.

Figura 3.6
Figura 3.6. Sintaxis (gramática) de la instrucción if con variante else.

En Python es permitido poner instrucciones dentro de otras instrucciones. También se puede poner expresiones dentro de otras expresiones. Esto se conoce como composición. En la figura 3.7 se muestra cómo quedaría un if dentro de otro if. Las instrucciones 1 y 2 solo se ejecutan si la condición 1 es verdadera. Las instrucciones 3 y 4 solo se ejecutan si la condición 1 es falsa y la condición 2 es verdadera. Las instrucciones 5 y 6 solo se ejecutan si la condición 1 es falsa y la condición 2 es falsa. Las instrucciones 7 y 8 se ejecutan siempre y en forma independiente de las dos condiciones anteriores.

Figura 3.7
Figura 3.7. Un if dentro de otro if.

Sin embargo, es bastante latoso tener tanta indentación y Python nos presenta una forma más simplificada para hacer esto mismo, lo cual se muestra en la figura 3.8, donde se utiliza la palabra reservada elif. Este programa sigue la misma lógica de ejecución que el de la figura 3.7. Si la condición 1 es verdadera, se ejecutan las instrucciones 1 y 2 (que están indentadas después del if) y luego se sigue con la ejecución de las instrucciones 7 y 8. Si la condición 1 es falsa, no se ejecutan las instrucciones 1 y 2, y se evalúa la condición 2 en el elif. Si esta segunda condición es verdadera, se ejecutan las instrucciones 3 y 4 y luego se continúa con la ejecución de las instrucciones 7 y 8. Si la condición 2 es falsa, se omiten las instrucciones 3 y 4 y se ejecutan las instrucciones 5 y 6 del else.

Figura 3.8
Figura 3.8. Instrucción elif para representar un if dentro de otro if.

Veamos a continuación algunos ejemplos de esta sintaxis de la instrucción if con elif y else.

Ejemplo 3.3

En este ejemplo mostraremos el uso básico del if - elif - else. Hay que hacer un programa que pida un número al usuario y compruebe si es mayor que 0, igual a 0 o menor que 0. El programa debe imprimir un mensaje en cada caso.

Ejemplo 3.4

En este ejemplo anidaremos un if - else dentro de otro. Hay que hacer un programa que pida un número al usuario y compruebe que es mayor que 0. Si lo es, imprima si el número es par o impar.

Ejemplo 3.5

En este ejemplo usaremos un if - else junto con los operadores and y or. Debe pedir al usuario una nota (entre 1 y 7). Luego se debe comprobar que el número efectivamente esté en ese rango, si no lo está imprima un mensaje de error. Si lo está, imprima reprobado si la nota es inferior a 4, regular si está entre 4 y 5, ok si está entre 5 y 6, y por último, bien si está entre 6 y 7.

3.4 Ejercicios

A continuación, te proponemos varios ejercicios para que los resuelvas en tu libro interactivo.

Ejercicio 3.1

El programa a continuación pide al usuario tres números, cada uno representará el largo del lado de un triángulo. Luego se debe comprobar si aquellos lados efectivamente pueden formar un triángulo. Recuerda que tres lados forman un triángulo si la suma de un par siempre es menor que el tercer lado. Termina el programa para que este cumpla su función correctamente.

Ejercicio 3.2

En la siguiente actividad se revisará automáticamente el resultado de tu programa. Este programa recibe tres números a, b, c que representan los coeficientes de una ecuación cuadrática. Además existe una variable resultado, inicialmente igual a -1 que debe llevar el resultado de tu programa. Si la ecuación tuviese dos soluciones reales, resultado debe ser igual a dos. Si la ecuación tiene una solución real el resultado debe ser uno. De lo contrario debe ser 0. El programa está contenido dentro de una función. Este concepto te quedará claro más adelante

Ejercicio 3.3

En la siguiente actividad se revisará automáticamente el resultado de tu programa. Este programa recibirá un número. Debes hacer que la variable resultado sea igual al número de números que lo dividen entre 1 y 10 (sin considerar el 1 y el 10).

Ejercicio 3.4

Realiza un programa que pida al usuario dos números a y b. Luego debe pedir un tercer número que representa una operación matemática (1 para sumar, 2 para resta, 3 para multiplicación y 4 para división). Debe imprimir en pantalla el resultado de operar a con b mediante el operador que quería usar el usuario.

Ejercicio 3.5

En la siguiente actividad se revisará automáticamente el resultado de tu programa. Este programa recibe dos lados de un triángulo, a y b, además del ángulo alpha en radianes que forman ambos lados. Tu programa debe devolver asignandole a la variable resultado el valor del tercer lado del triángulo. Si alguno de los tres datos es menor o igual que 0, el resultado debe ser -1.

Next Section - 4. Control de Flujo: Ciclos-Iteraciones