-
Introducción
En esta Clase 10, profundizaremos en el uso de los bucles while y do-while, fundamentales para ejecutar bloques de código repetidamente mientras se cumpla una condición booleana. A diferencia de los bucles for, que iteran sobre secuencias predefinidas, los bucles while se utilizan cuando no sabemos cuántas iteraciones son necesarias, pero sí sabemos que el ciclo debe continuar hasta que una condición cambie. Además, exploraremos cómo simular el comportamiento de un bucle do-while en Python, una característica de otros lenguajes de programación como C y Java. Los bucles while son esenciales cuando se necesita un control dinámico sobre el flujo del programa, ya que permiten que el código se ejecute de manera continua hasta que se cumpla una condición específica.
A lo largo de esta clase, también abordaremos cómo controlar el flujo de ejecución dentro de los bucles con los comandos break y continue. El comando break interrumpe un bucle en el momento en que se cumple una condición específica, mientras que continue omite la iteración actual y pasa a la siguiente. Estas herramientas proporcionan una flexibilidad importante, permitiendo al programador crear estructuras de control más sofisticadas y adaptativas. Al finalizar esta clase, los estudiantes estarán mejor preparados para escribir programas más dinámicos, con una lógica de flujo controlada por condiciones y ciclos que pueden ejecutarse de manera eficiente en función de la situación.
-
10.1. Bucles while y do-while
Los bucles while y do-while son estructuras de control fundamentales que permiten ejecutar un bloque de código mientras se cumpla una condición booleana. En Python, el bucle while se utiliza ampliamente, y podemos simular el comportamiento del do-while utilizando un bucle while con una condición al final. Ambos bucles son útiles cuando no sabemos cuántas iteraciones se necesitan de antemano, pero sí sabemos que el bucle debe ejecutarse hasta que una condición cambie.
Bucle while:El bucle while en Python es una de las estructuras de control más utilizadas. Permite repetir una acción mientras se cumpla una condición específica. La sintaxis básica de un bucle while es sencilla:
Código
while condición: # Código a ejecutar
Condición Inicial: En un bucle while, la condición se evalúa antes de ejecutar el bloque de código. Si la condición es True, el código dentro del bucle se ejecuta, y luego se evalúa nuevamente la condición antes de volver a ejecutar el código. Este ciclo continúa hasta que la condición sea False.
Un aspecto importante de los bucles while es que la condición se evalúa antes de la ejecución, lo que significa que si la condición es falsa desde el principio, el bloque de código no se ejecutará ni una vez.
Importancia de la Condición:La condición es la clave que mantiene el bucle activo o lo detiene. El uso adecuado de la condición es crucial para evitar ciclos infinitos, los cuales pueden llevar al agotamiento de los recursos del sistema e incluso al colapso de la aplicación. Es importante asegurarse de que la condición cambiará eventualmente para evitar este tipo de problemas. Esto se puede hacer modificando las variables utilizadas en la condición durante el ciclo o utilizando otras estructuras como el break para salir del bucle manualmente.
Características del Bucle while:
- Evaluación Previa: Como ya se mencionó, la condición del bucle se evalúa antes de la ejecución del bloque de código. Esto es ventajoso en situaciones donde es necesario verificar las condiciones antes de realizar cualquier acción.
- Posibilidad de No Ejecutarse: Si la condición inicial es falsa, el bloque de código no se ejecutará ni una vez. Esto lo convierte en una estructura útil cuando no se sabe cuántas iteraciones serán necesarias, pero se sabe que el ciclo debe cumplirse solo si la condición se cumple desde el inicio.
- Uso Dinámico en Condiciones Variadas: Los bucles while son muy flexibles y se utilizan en muchas situaciones donde la cantidad de iteraciones depende de factores que no son previsibles, como la entrada del usuario o el estado de una aplicación.
Simulación del do-while en Python:Python no tiene un bucle do-while explícito, pero podemos simular este comportamiento utilizando un bucle while con una condición que siempre sea verdadera al principio y un break para salir del bucle si la condición no se cumple. Este enfoque asegura que el código dentro del bucle se ejecute al menos una vez, independientemente de si la condición es verdadera al principio.
Un ejemplo de cómo simular un bucle do-while sería:
Código
while True: # Bloque de código if condición_de_terminación: break
Comportamiento del do-while:En un bucle do-while, el bloque de código siempre se ejecuta al menos una vez, lo que es útil cuando se desea que un programa ejecute una acción inicial antes de evaluar si debe continuar o no. La estructura básica de un do-while en otros lenguajes (como C, C++ y Java) es la siguiente:
Código
do { // Código a ejecutar }
En la tabla 1, se muestra una comparación entre while y do-while:
Característica while do-while Evaluación de la Condición Se evalúa antes de ejecutar el código. Se evalúa después de ejecutar el código. Ejecución Inicial Puede no ejecutarse si la condición es falsa desde el principio. Siempre se ejecuta al menos una vez. Casos de Uso Útil cuando no se sabe cuántas veces se debe ejecutar el ciclo, pero se tiene una condición clara. Ideal cuando se necesita que el código se ejecute al menos una vez, como en la validación de datos. Complejidad Más flexible, pero puede ser propenso a ciclos infinitos si la condición no cambia. Más rígido, pero garantiza la ejecución inicial del código. Fuente: Creación de autor, D. Nicolalde. Evaluación de la Condiciónwhile: Se evalúa antes de ejecutar el código.
do-while: Se evalúa después de ejecutar el código.
Ejecución Inicialwhile: Puede no ejecutarse si la condición es falsa desde el principio.
do-while: Siempre se ejecuta al menos una vez.
Casos de Usowhile: Útil cuando no se sabe cuántas veces se debe ejecutar el ciclo, pero se tiene una condición clara.
do-while: Ideal cuando se necesita que el código se ejecute al menos una vez, como en la validación de datos.
Complejidadwhile: Más flexible, pero puede ser propenso a ciclos infinitos si la condición no cambia.
do-while: Más rígido, pero garantiza la ejecución inicial del código.
Figura 1: Diagrama de flujo de un bucle while Fuente: Creación de autor, D. Nicolalde. Figura 1: Diagrama de flujo de un bucle while Fuente: Creación de autor, D. Nicolalde.
Ejemplo Básico: Bucle while con contadorUn ejemplo básico utilizando while es contar hacia abajo hasta llegar a cero:
Código
contador = 5 while contador > 0: print(contador) contador -= 1
Salida
Resultado
5
4
3
2
1En este ejemplo, el bucle while repite la impresión del valor de contador y lo va decrementando hasta que llegue a cero.
Ejemplo: Bucle while con validación de entradaEn este ejemplo, el bucle seguirá pidiendo una entrada válida hasta que el usuario ingrese un valor positivo:
Código
edad = -1 while edad <= 0: edad = int(input("Por favor, ingrese una edad válida: ")) print(f"Edad ingresada: {edad}")
Salida (dependiendo de la entrada del usuario):
Resultado
Por favor, ingrese una edad válida: -5
Por favor, ingrese una edad válida: 25
Edad ingresada: 25El bucle while sigue ejecutándose hasta que el valor de edad sea mayor que 0.
Figura 2: Diagrama de flujo del bucle while con validación Fuente: Creación de autor, D. Nicolalde. Figura 2: Diagrama de flujo del bucle while con validación Fuente: Creación de autor, D. Nicolalde.
Descripción: Este diagrama muestra cómo un bucle while puede usarse para validar datos, repitiendo una solicitud hasta que la condición se cumpla.
Ejemplo: Bucle while con validación de múltiples condicionesA continuación, utilizamos un while para pedir a un usuario que ingrese un número mayor que 100:
Código
numero = 0 while numero < 100: numero = int(input("Ingrese un número mayor que 100: ")) if numero <= 100: print("El número es demasiado pequeño. Intente de nuevo.") print("Número aceptado:", numero)
Salida:
Resultado
Ingrese un número mayor que 100: 50
El número es demasiado pequeño. Intente de nuevo.
Ingrese un número mayor que 100: 150
Número aceptado: 150Este bucle sigue pidiendo la entrada hasta que se ingresa un número mayor a 100.
Simulación de un Bucle do-while en Python:Python no tiene una estructura do-while directa, pero podemos simularla con un bucle while:
Código
while True: opcion = input("Ingrese 'salir' para salir del programa: ") if opcion == "salir": print("Programa finalizado") break else: print("Aún no ha salido del programa.")
Este ejemplo asegura que el código se ejecute al menos una vez, simulando el comportamiento de un do-while.
Aprende más
En este vídeo comenzamos a hablar sobre los bucles y veremos el bucle while ¡Accede aquí!
-
10.2. Control de Bucles con break y continue
Los comandos break y continue se utilizan para controlar el flujo de ejecución de los bucles, y nos proporcionan más flexibilidad y control.
Uso de break:El comando break permite interrumpir la ejecución de un bucle de inmediato. Es útil cuando se cumple una condición específica y no se necesita seguir iterando.
Ejemplo básico de break:Código
for i in range(10): if i == 5: print("Número encontrado, saliendo del bucle.") break print(i)
Salida:
Resultado
0
1
2
3
4
Número encontrado, saliendo del bucle.
Figura 3: Diagrama de flujo del uso de break en un bucle for Fuente: Creación de autor, D. Nicolalde. Figura 3: Diagrama de flujo del uso de break en un bucle for Fuente: Creación de autor, D. Nicolalde.
Descripción: Este diagrama muestra cómo el comando break interrumpe el bucle al encontrar una condición específica.
Ejemplo de break: búsqueda de un número determinadoCódigo
numeros = [1, 2, 3, 4, 5, 6] busqueda = 4 for numero in numeros: if numero == busqueda: print(f"El número {busqueda} ha sido encontrado.") break else: print(f"El número {busqueda} no está en la lista.")
Salida:
Resultado
El número 4 ha sido encontrado.
Uso de continue:El comando continue omite la iteración actual y continúa con la siguiente. Es útil cuando queremos saltar una iteración específica sin interrumpir el bucle.
Ejemplo de continue: evalúa una condiciónCódigo
for i in range(10): if i % 2 == 0: continue print(i)
Salida:
Resultado
1
3
5
7
9
Figura 4: Diagrama de flujo del uso de continue Fuente: Creación de autor, D. Nicolalde. Figura 4: Diagrama de flujo del uso de continue Fuente: Creación de autor, D. Nicolalde.
Descripción: Este diagrama muestra cómo el comando continue salta una iteración y continúa con la siguiente sin ejecutar el bloque de código para los valores específicos.
Ejemplo del uso de continue: validación de datosCódigo
calificaciones = [40, 55, 60, 45, 80, 33, 50] for calificacion in calificaciones: if calificacion < 50: continue print(f"Calificación aprobatoria: {calificacion}")
Salida:
Resultado
Calificación aprobatoria: 55
Calificación aprobatoria: 60
Calificación aprobatoria: 80
Calificación aprobatoria: 50
Figura 5: Diagrama de flujo de continue con validación de datos Fuente: Creación de autor, D. Nicolalde. Figura 5: Diagrama de flujo de continue con validación de datos Fuente: Creación de autor, D. Nicolalde.
Descripción: Este diagrama ilustra cómo continue omite las iteraciones con valores no deseados, en este caso, calificaciones reprobadas.
La tabla 2 compara las características de los bucles while y for en Python. El bucle while se basa en una condición que se evalúa antes de cada iteración, mientras que el bucle for recorre una secuencia predefinida. El bucle while es ideal para condiciones indeterminadas, mientras que el for se utiliza comúnmente para iterar sobre listas o rangos.
Característica Bucle while Bucle for Control de iteración Basado en condición Basado en secuencia Uso típico Condiciones indeterminadas Recorrer listas, rangos o caracteres Salida anticipada break o condición falsa break o fin de secuencia Condición inicial Definida antes del bucle Definida en la secuencia Tabla 2: Comparación entre bucles while y for. Fuente: Creación de autor, D. Nicolalde. Control de iteraciónBucle while: Basado en condición
Bucle for: Basado en secuencia
Uso típicoBucle while: Condiciones indeterminadas
Bucle for: Recorrer listas, rangos o caracteres
Salida anticipadaBucle while: break o condición falsa
Bucle for: break o fin de secuencia
Condición inicialBucle while: Definida antes del bucle
Bucle for: Definida en la secuencia
La tabla 3 explica el uso de las sentencias break y continue en bucles. break se utiliza para interrumpir un bucle cuando se cumple una condición específica, deteniendo la ejecución del bucle inmediatamente. continue, por otro lado, omite la iteración actual y pasa a la siguiente, permitiendo que el bucle continúe sin ejecutar el código restante de la iteración actual.
Tipo de Control Ejemplo de Uso Descripción break Interrumpir un bucle cuando se cumple una condición El bucle se detiene de inmediato al encontrar la condición. continue Omitir la iteración actual y continuar con la siguiente Salta una iteración específica y continúa con las siguientes. Tabla 3: Ejemplos de control de flujo con break y continue. Fuente: Creación de autor, D. Nicolalde. breakEjemplo de Uso: Interrumpir un bucle cuando se cumple una condición
Descripción: El bucle se detiene de inmediato al encontrar la condición.
continueEjemplo de Uso: Omitir la iteración actual y continuar con la siguiente
Descripción: Salta una iteración específica y continúa con las siguientes.
Aprende más
En este vídeo aprende a trabajar con las instrucciones break y continue en Python. ¡Accede aquí!
Vamos a plantear un ejemplo completo: Sistema Interactivo de Clasificación de EstudiantesEn este ejemplo, vamos a crear un sistema interactivo que permita al usuario ingresar las calificaciones de varios estudiantes, calcular su promedio y clasificarlos según su rendimiento. El programa utilizará varias estructuras de control como bucles anidados, condicionales if-else, y los comandos break y continue para controlar el flujo del programa.
Este sistema tiene como objetivo permitir a los usuarios ingresar los datos de los estudiantes de forma repetida. Para cada estudiante, el programa calcula el promedio de sus calificaciones y determina si el estudiante está en la categoría de "Excelente", "Aprobado" o "Reprobado", basándose en su promedio.
Flujo del Programa- Bucle principal (while): El programa continuará pidiendo la información de nuevos estudiantes hasta que el usuario decida no ingresar más datos. Este flujo es controlado por un bucle while que se ejecuta mientras la variable continuar sea True.
- Ingreso del nombre del estudiante: Primero, el programa pide el nombre del estudiante. Si el usuario deja el campo vacío, se vuelve a pedir que ingrese un nombre, utilizando el comando continue para omitir la iteración actual del bucle.
- Ingreso de las calificaciones: Después de obtener el nombre del estudiante, el programa solicita las calificaciones. Las calificaciones se ingresan como una cadena de texto, separadas por comas. Luego, el programa las convierte en una lista de números flotantes. Si el usuario introduce algo que no sea un número, se captura el error con try-except, y se le pide al usuario que vuelva a ingresar las calificaciones.
- Cálculo del promedio: Una vez que las calificaciones se han almacenado correctamente en una lista, el programa calcula el promedio de las calificaciones utilizando la función sum() para sumar todos los valores de la lista y luego dividiendo entre el número de elementos en la lista.
-
Clasificación con if-else: Según el promedio calculado, el programa clasifica al estudiante:
- Si el promedio es mayor o igual a 9, el estudiante es clasificado como "Excelente".
- Si el promedio es mayor o igual a 6 pero menor que 9, el estudiante es clasificado como "Aprobado".
- Si el promedio es menor a 6, el estudiante es clasificado como "Reprobado".
- Mostrar resultados: El programa imprime el nombre del estudiante, su promedio y la categoría en la que se encuentra.
- Repetir o salir: Después de mostrar el resultado, el programa pregunta al usuario si desea ingresar otro estudiante. Si la respuesta es "n", el bucle while se termina y el programa imprime un mensaje de despedida. Si la respuesta es "s", el programa comienza el proceso de nuevo para un nuevo estudiante.
Aquí está el código completo del ejemplo:
Código
# Sistema Interactivo de Clasificación de Estudiantes print("Bienvenido al sistema de clasificación de estudiantes") continuar = True # Variable de control para el bucle while # Bucle principal que permite ingresar datos de estudiantes repetidamente while continuar: # Ingreso de información del estudiante nombre = input("Ingrese el nombre del estudiante: ") if nombre == "": # Si el nombre está vacío, se omite esta iteración y pide el nombre nuevamente print("Debe ingresar un nombre para el estudiante.") continue # Omite la iteración actual y pasa a la siguiente try: # Ingreso de las calificaciones del estudiante calificaciones = input(f"Ingrese las calificaciones de {nombre} separadas por comas: ") calificaciones = [float(i) for i in calificaciones.split(",")] except ValueError: print("Error: Ingrese solo números separados por comas.") continue # Si hay error en las calificaciones, salta a la siguiente iteración # Calcular el promedio de las calificaciones promedio = sum(calificaciones) / len(calificaciones) # Clasificación del estudiante según el promedio usando if-else if promedio >= 9: categoria = "Excelente" elif promedio >= 6: categoria = "Aprobado" else: categoria = "Reprobado" # Mostrar el resultado de la clasificación print(f"El estudiante {nombre} tiene un promedio de {promedio:.2f} y está en la categoría: {categoria}") # Preguntar al usuario si desea continuar ingresando más estudiantes continuar_respuesta = input("¿Desea ingresar otro estudiante? (s/n): ").lower() if continuar_respuesta == "n": continuar = False # Sale del bucle while # Mensaje de despedida print("Gracias por usar el sistema de clasificación de estudiantes.")
Salida: Al ejecutar el programa, se genera la siguiente salida basada en las entradas del usuario:
Resultado
Bienvenido al sistema de clasificación de estudiantes
Ingrese el nombre del estudiante: Juan
Ingrese las calificaciones de Juan separadas por comas: 9, 8, 7
El estudiante Juan tiene un promedio de 8.00 y está en la categoría: Aprobado
¿Desea ingresar otro estudiante? (s/n): s
Ingrese el nombre del estudiante: Ana
Ingrese las calificaciones de Ana separadas por comas: 10, 9, 9
El estudiante Ana tiene un promedio de 9.33 y está en la categoría: Excelente
¿Desea ingresar otro estudiante? (s/n): n
Gracias por usar el sistema de clasificación de estudiantes.Este ejercicio es un ejemplo práctico de cómo usar bucles anidados, condicionales if-else, y los comandos break y continue en Python. Permite al usuario interactuar con el programa, ingresar datos dinámicos y realizar múltiples iteraciones mientras se realiza un proceso de clasificación. El uso del bucle while asegura que el proceso sea repetitivo y flexible, mientras que continue se utiliza para manejar errores en la entrada de datos, y el break (si lo aplicáramos más adelante) podría ser utilizado para finalizar el bucle bajo ciertas condiciones, como cuando el promedio es menor que un valor específico.
Este tipo de sistemas interactivos son fundamentales en el desarrollo de aplicaciones prácticas que manejan entradas dinámicas y requieren de lógica condicional para organizar y clasificar la información.
Profundiza más
Este recurso te ayudará a enfatizar sobre Condicionales y anidamiento ¡Accede aquí!
-
-
-
Actividades
-
Hacer intentos: 1
-
Bucles y anidamiento (Parte 2)
-
Hacer intentos: 1