5 🔄 Control de Flujo

EL control de flujo o sentencias de control permiten modificar el flujo del programa introduciendo ciclos y condicionales.
Un condicional es un conjunto de sentencias que pueden o no ejecutarse, dependiendo del resultado de una condición.
Un ciclo es un conjunto de sentencias que son ejecutadas varias veces, hasta que una condición de término es satisfecha.
Tanto los condicionales como los ciclos contienen a otras sentencias. Para indicar esta relación se utiliza la indentación: las sentencias contenidas no se escriben en la misma columna que la sentencia de control, sino un poco más a la derecha.
5.1 Condicional if-elif-else
5.1.1 Condicional if
La sentencia if
(«si») ejecuta las instrucciones sólo si se cumple una condición. Si la condición es falsa, no se hace nada:
La sintaxis es la siguiente:
if condición:
sentencias
Ejemplos
5.1.2 Condicional if-else
La sentencia if-else
(«si-o-si-no») decide qué instrucciones ejecutar dependiendo si una condición es verdadera o falsa:
if condición:
qué hacer cuando la condición es verdaderaelse
qué hacer cuando la condición es falsa
ejemplo 01
ejemplo 02
5.1.3 Condicional if-elif-else
La sentencia if-elif-else
depende de dos o más condiciones, que son evaluadas en orden. La primera que es verdadera determina qué instrucciones serán ejecutadas:
La sintaxis es la siguiente:
if condición1:
qué hacer si condición1 es verdaderaelif condición2:
qué hacer si condición2 es verdadera
...else:
qué hacer cuando ninguna de las condiciones anteriores es verdadera
Existen tres formas de ocupar esta condicional.
Estructura if: La estructura if se utiliza para tomar decisiones en función de una condición. Si la condición es verdadera, el bloque de código dentro del if se ejecutará.
Estructura if-else: La estructura if-else se utiliza para tomar decisiones y ejecutar un bloque de código si la condición es verdadera y otro bloque de código si la condición es falsa.
Estructura if-elif-else: La estructura if-elif-else se utiliza para tomar decisiones y ejecutar diferentes bloques de código según diferentes condiciones. Se evalúan las condiciones en orden, y si alguna es verdadera, se ejecutará el bloque de código correspondiente. Si ninguna de las condiciones es verdadera, se ejecutará el bloque de código en la cláusula else.
Es decir, puede no existir o pueden existir varios elif
. Por otro lado, el else
es opcional dependiendo del caso.
ejemplo 01
Escriba un programa que califique el rendimiento del alumno en una asignatura según la nota obtenida.
ejemplo 02
Considerar la siguiente tabla que muestra la tasa de impuesto a pagar por una persona según su sueldo.
Sueldo | Tasa de impuesto |
---|---|
menos de 1000 | 0% |
1000 ≤ sueldo < 2000 | 5% |
2000 ≤ sueldo < 4000 | 10% |
4000 o más | 12% |
Un ejemplo de como se calcula el impuesto sería el siguiente:
Otra forma de calcular el impuesto es la siguiente:
¿En qué se diferencian los dos programas anteriores?
Solución:
Diferencia en la forma de expresar las condiciones: En el primer programa, se utilizan operadores de desigualdad (
<
) para expresar las condiciones, mientras que en el segundo programa, se utilizan operadores de igualdad (>=
) y (<=
) para expresar las mismas condiciones.Diferencia en el resultado impreso: En el primer programa, se imprime el caso correspondiente (por ejemplo, “caso 1”, “caso 2”, etc.) antes de calcular la tasa de impuesto, mientras que en el segundo programa, se calcula la tasa de impuesto sin imprimir el caso correspondiente.
5.2 While Loop
El ciclo while («mientras») ejecuta una secuencia de instrucciones mientras una condición sea verdadera:
Cada una de las veces que el cuerpo del ciclo es ejecutado se llama iteración.
La condición es evaluada antes de cada iteración. Si la condición es inicialmente falsa, el ciclo no se ejecutará ninguna vez.
La sintaxis es la siguiente:
while condición:
sentencias
Notas adicionales:
- A una ejecución de las instrucciones que componen el ciclo se le llama iteración.
- La condición de un while es evaluada antes de cada iteración.
- Por lo anterior, es posible que un
while
no ejecute ninguna iteración, si la condición es False al inicio.
Por ejemplo, el siguiente programa multiplica dos números enteros sin usar el operador *
:
Para ver cómo funciona este programa, hagamos un ruteo con la entrada \(m = 4\) y \(n = 7\):
p | m | n |
---|---|---|
4 | ||
7 | ||
0 | ||
3 | ||
7 | ||
2 | ||
14 | ||
1 | ||
21 | ||
0 | ||
28 |
El proceso funciona de la siguiente manera:
- Se inician las variables
m
con el valor 4,n
con el valor 7 yp
con el valor 0. - Se entra en un bucle
while
con la condiciónm > 0
, lo que significa que el bucle se ejecutará mientrasm
sea mayor que 0. - En cada iteración del bucle, el valor de
m
se reduce en 1 (usandom = m - 1
) y el valor den
se suma al valor actual dep
(usandop = p + n
). - El bucle continúa ejecutándose hasta que
m
sea igual a 0. Cuandom
alcanza 0, la condiciónm > 0
se vuelve falsa, y el bucle se detiene. - Después de que el bucle se detiene, se imprime el resultado, que es el producto acumulado de
m
yn
en la variablep
.
La razón por la que estamos seguros de que el ciclo terminará en algún momento es que la condición del bucle while
se verifica en cada iteración, y m
se reduce en 1 en cada iteración. Dado que m
se inicializa con el valor 4, y en cada iteración se reduce en 1, eventualmente alcanzará el valor 0 después de 4 iteraciones, lo que hará que la condición m > 0
sea falsa y el ciclo se detendrá. Por lo tanto, podemos estar seguros de que el ciclo terminará.
5.2.1 Ejemplo: acumulación con suma
Escriba un programa que reciba como entrada un número entero. El programa debe mostrar el resultado de la suma de los números al cuadrado desde el \(1\) hasta el valor ingresado. \[ 1^2+2^2+\ldots+(n-1)^2+n^2 \]
5.2.2 Ejemplo: acumulación con multiplicación
Escriba una programa que calcule el factorial de un número \(n\) ingresada como entrada: \(10! = 1\cdot 2 \cdot 3 ... \cdot 10\)
5.2.3 Ejemplo: conteo
Escriba un programa que solicite un número entero y calcule cuantos números son divisibles por 3 o 5.
5.3 Ciclo for con rango
El ciclo for con rango ejecuta una secuencia de sentencias una cantidad fija de veces.
Para llevar la cuenta, utiliza una variable de control que toma valores distintos en cada iteración.
Una de las sintaxis para usar un for con rango es la siguiente:
for variable in range(fin):
qué hacer para cada valor de la variable de control
En la primera iteración, la variable de control toma el valor 0. Al final de cada iteración, el valor de la variable aumenta automáticamente. El ciclo termina justo antes que la variable tome el valor fin.
Por ejemplo, el siguiente programa muestra los cubos de los números del 0 al 20:
Un rango es una sucesión de números enteros equiespaciados. Incluyendo la presentada más arriba, hay tres maneras de definir un rango:
range(final)
range(inicial, final)
range(inicial, final, incremento)
El valor inicial siempre es parte del rango. El valor final nunca es parte del rango. El incremento indica la diferencia entre dos valores consecutivos del rango.
Si el valor inicial es omitido, se supone que es 0. Si el incremento es omitido, se supone que es 1.
Con algunos ejemplos quedará más claro:
sentencia | resultado |
---|---|
range(9) |
0, 1, 2, 3, 4, 5, 6, 7, 8 |
range(3, 13) |
3, 4, 5, 6, 7, 8, 9, 10, 11, 12 |
range(3, 13, 2) |
3, 5, 7, 9, 11 |
range(11, 4) |
ningún valor |
range(11, 4, -1) |
11, 10, 9, 8, 7, 6, 5 |
Usando un incremento negativo, es posible hacer ciclos que van hacia atrás:
5.4 Salir o continuar un ciclo
5.4.1 Break
Además de las condiciones de término propias de los ciclos while
y for
, siempre es posible salir de un ciclo en medio de una iteración usando la sentencia break
. Lo lógico es que sea usada dentro de un if
, para evitar que el ciclo termine prematuramente en la primera iteración:
Veamos el siguiente ejemplo:
Este código es un bucle for
en Python que itera a través de los números del 1 al 20. El objetivo del bucle es imprimir los números en cada iteración hasta que se encuentre un número divisible por 7. Aquí está lo que hace paso a paso:
Inicia un bucle
for
que utiliza la variablen
para recorrer los números del 1 al 20 (inclusive) con la funciónrange(1, 21)
.En cada iteración del bucle, se verifica si el número
n
es divisible por 7 utilizando la expresiónn % 7 == 0
. Esto se hace con el operador de módulo (%
) para comprobar si el residuo de la división den
por 7 es igual a 0. Si esta condición es verdadera, significa quen
es divisible por 7.Si se encuentra un número que es divisible por 7, se utiliza la instrucción
break
para salir inmediatamente del buclefor
, lo que significa que el bucle se interrumpe en esa iteración.Si el bucle no se rompe con
break
, se imprime el númeron
en esa iteración.Después de que se complete el bucle
for
, se imprime “–Fin–” una vez para marcar el final del programa.
5.4.2 Continue
La sentencia continue
se usa para saltar a la iteración siguiente sin llegar al final de la que está en curso.
Veamos el siguiente ejemplo:
El código que proporcionaste es un bucle for
en Python que itera a través de los números del 1 al 20 utilizando la función range(1, 21)
. El bucle imprime todos los números excepto aquellos que son divisibles por 7. A continuación, se explica paso a paso lo que hace el código:
El bucle
for
se inicia y la variablen
toma valores del 1 al 20 en cada iteración.En cada iteración del bucle, se verifica si el número
n
es divisible por 7 utilizando la expresiónn % 7 == 0
. El operador de módulo (%
) se utiliza para calcular el residuo de la división den
por 7. Si el residuo es igual a 0, significa quen
es divisible por 7.Si la condición
n % 7 == 0
es verdadera, se ejecuta la instruccióncontinue
, que salta el resto del código en esa iteración y pasa a la siguiente iteración del bucle. Esto significa que cuando se encuentra un número divisible por 7, no se imprime y el bucle continúa con el siguiente número.Si la condición
n % 7 == 0
no es verdadera (es decir, sin
no es divisible por 7), se ejecuta la instrucciónprint(n)
, que imprime el valor den
en la consola.Después de que se complete el bucle
for
, se imprime “–Fin–” una vez para marcar el final del programa.
5.5 Ejercicios
5.5.1 if-elif-else
Ejercicio 01
Escriba un programa que determine si el número entero ingresado por el usuario es par o no.
Ingrese un número: 4
Su número es par
Ingrese un número: 3
Su número es impar
Ejercicio 02
Escriba un programa que pida dos números enteros y que calcule la división, indicando si la división es exacta o no.
Dividendo: 14
Divisor: 5
La división no es exacta.
Cociente: 2
Resto: 4
Ejercicio 03
Escriba un programa que pida al usuario dos palabras, y que indique cuál de ellas es la más larga y por cuántas letras lo es.
Palabra 1: edificio
Palabra 2: tren
La palabra edificio tiene 4 letras mas que tren.
Palabra 1: sol
Palabra 2: paralelepipedo
La palabra paralelepipedo tiene 11 letras mas que sol
Palabra 1: plancha
Palabra 2: lapices
Las dos palabras tienen el mismo largo
Ejercicio 04
Un año es bisiesto si es divisible por \(4\), excepto si es divisible por \(100\) y no por \(400\). Escriba un programa que reciba un año como entrada e indique True
si un año es bisiesto o False
si no lo es.
Ingrese un anno: 1988
1988 es bisiesto
Ingrese un anno: 2011
2011 no es bisiesto
Ingrese un anno: 1700
1700 no es bisiesto
Ingrese un anno: 2400
2400 es bisiesto
Ejercicio 05
Los tres lados \(a, b\) y \(c\) de un triángulo deben satisfacer la desigualdad triangular: cada uno de los lados no puede ser más largo que la suma de los otros dos.
Escriba un programa que reciba como entrada los tres lados de un triángulo, e indique:
- si acaso el triángulo es inválido
- si el triángulo es válido, qué tipo de triángulo es.
Ingrese a: 3.9
Ingrese b: 6.0
Ingrese c: 1.2
No es un triangulo valido.
Ingrese a: 1.9
Ingrese b: 2
Ingrese c: 2
El triangulo es isoceles.
Ingrese a: 3.0
Ingrese b: 5.0
Ingrese c: 4.0
El triangulo es escaleno.
Ingrese a: 2
Ingrese b: 2
Ingrese c: 2
El triangulo es equilatero.
Ejercicio 06
El riesgo de que una persona sufra enfermedades coronarias depende de su edad y su índice de masa corporal:
edad < 45 | edad ≥ 45 | |
---|---|---|
IMC < 22.0 | bajo | medio |
IMC ≥ 22.0 | medio | alto |
El índice de masa corporal es el cuociente entre el peso del individuo en kilos y el cuadrado de su estatura en metros ($IMC = $).
Escriba un programa que reciba como entrada la estatura, el peso y la edad de una persona, y le entregue su condición de riesgo.
ejemplos
- Si el usuario ingresa una estatura de 1.75 metros, un peso de 70 kilogramos y una edad de 30 años, el programa mostrará: “La condición de riesgo es: medio”.
- Si el usuario ingresa una estatura de 1.65 metros, un peso de 90 kilogramos y una edad de 50 años, el programa mostrará: “La condición de riesgo es: alto”.
Ejercicio 07
Un número natural es un palíndromo si se lee igual de izquierda a derecha y de derecha a izquierda.
Por ejemplo, \(14941\) es un palíndromo, mientras que \(81924\) no lo es.
Escriba un programa que indique si el número ingresado es o no palíndromo:
Ingrese un numero: 14941
14941 es palindromo
Ingrese un numero: 81924
81924 no es palindromo
Hint: Para encontrar el inverso de un string en Python, puedes utilizar la técnica de
texto[::-1]
.
5.5.2 While
Ejercicio 01
Solicita al usuario un número y muestra un contador regresivo desde ese número hasta 1. Utiliza la declaración while
para resolver este problema.
Ingrese un número: 5
Contador regresivo desde 5 hasta 1:
5
4
3
2
1
Ejercicio 02
Solicita al usuario un número y calcula la suma de todos los números pares desde 2 hasta ese número. Utiliza la declaración while
para resolver este problema.
Ingrese un número: 10
La suma de números pares desde 2 hasta 10 es 30
Ejercicio 03
Solicita al usuario un número entero y suma todos sus dígitos. Utiliza la declaración while
para resolver este problema.
Ingrese un número entero: 12345
La suma de los dígitos es 15
Ejercicio 04
Pide al usuario un número y cuenta cuántos de sus dígitos son pares. Utiliza la declaración while
para resolver este problema.
Ingrese un número: 123456
El número tiene 3 dígitos pares.
Ejercicio 05
Solicita al usuario un número y cuenta cuántos números en el rango de 1 a ese número son divisibles por 7. Utiliza la declaración while
para resolver este problema.
Ingrese un número: 20
Hay 2 números divisibles por 7 en el rango de 1 a 20.
Ejercicio 06
Solicita al usuario un número y cuenta cuántos de sus dígitos son impares. Utiliza la declaración while
para resolver este problema.
Ingrese un número: 7654321
El número tiene 4 dígitos impares.
5.5.3 Range
Ejercicio 01
Calcula la suma de todos los números pares desde 1 hasta un número dado (\(n\)). Utiliza la declaración range
para resolver este problema.
Ingrese un número: 10
La suma de números pares desde 1 hasta 10 es 30
Ejercicio 02
Muestra un contador regresivo desde un número (\(n\)) dado hasta 1. Utiliza la declaración range
para resolver este problema.
Ingrese un número: 5
Contador regresivo desde 5 hasta 1:
5
4
3
2
1
Ejercicio 03
Muestra la tabla de multiplicar de un número dado. Utiliza la declaración range
para resolver este problema.
Ingrese un número: 7
Tabla de multiplicar del 7:
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
7 x 6 = 42
7 x 7 = 49
7 x 8 = 56
7 x 9 = 63
7 x 10 = 70
Ejercicio 04
Escribe un programa que solicite al usuario un número entero positivo y luego calcule la suma de los cuadrados de todos los números desde 1 hasta el número ingresado. Utiliza la declaración range
para generar los números en el rango y luego suma los cuadrados de esos números.
Ejemplos
Si el usuario ingresa el número 4, el programa calculará la suma de los cuadrados de los números desde 1 hasta 4 de la siguiente manera:
Suma = 1^2 + 2^2 + 3^2 + 4^2 = 1 + 4 + 9 + 16 = 30
El programa mostrará: “La suma de los cuadrados de los números en el rango de 1 a 4 es 30.”
5.5.4 Break & Continue
Ejercicio 01
Solicita al usuario un número y cuenta cuántos de sus dígitos son pares. Utiliza la declaración continue
para omitir los dígitos impares.
Ingrese un número: 123456
El número tiene 3 dígitos pares.
Ejercicio 02
Calcula la suma de los números en un rango dado (por ejemplo, de 1 a 10), pero omite los múltiplos de 3 utilizando la declaración continue
.
Ingrese un número: 10
La suma de los números no divisibles por 3 en el rango de 1 a 10 es 37
Ejercicio 03
Dada una lista de números enteros, solicita al usuario un número objetivo y busca si el número está en la lista. Utiliza un bucle con break
para detener la búsqueda una vez que encuentres el número o determines que no está en la lista.
Ejercicio 04
Simula un juego en el que la computadora “piensa” en un número y el jugador intenta adivinarlo. Crea un bucle que permita al jugador hacer intentos para adivinar el número, y utiliza break
para salir del bucle si el jugador adivina el número o excede un número máximo de intentos.
Hint: Considera la siguiente rutina para partir tu código: