← CC2005

Estructuras de Repetición While

Semestre 02, 2026

El problema

  • A veces se necesita repetir una acción muchas veces.
  • Hacerlo línea por línea no es práctico.
  • El número de repeticiones puede depender de los datos.

Imprimir del 1 al 100

Sin una estructura de repetición, el programa se vería así.


print(1)
print(2)
print(3)
# ... 96 líneas más
print(100)
Lo importante

Si mañana el requerimiento cambia a mil números, el programa entero hay que reescribirlo. Se necesita una forma de automatizar la repetición.

Estructuras de repetición

Definición

Una estructura de repetición permite ejecutar un bloque de código múltiples veces.

Esto hace que los programas sean más cortos y más potentes.

Dos tipos de repetición

Por condición: se repite mientras una condición sea verdadera.
Por cantidad: se repite un número fijo de veces.
En este curso

La repetición por condición se escribe con while y es el tema de hoy. La repetición por cantidad se escribe con for y viene después.

La variable de control

Ambos tipos de repetición usan una variable de control.

  • Guarda el valor de la iteración actual.
  • Se evalúa en la condición del ciclo.
  • Debe actualizarse dentro del ciclo.

El ciclo while

Definición

El ciclo while repite un bloque de código mientras la condición sea verdadera. Se detiene cuando la condición se vuelve falsa.


while condicion:
    # bloque de código

Momento de evaluación

  • La condición se evalúa antes de cada iteración.
  • Si es verdadera, se ejecuta el bloque y se vuelve a evaluar.
  • Si es falsa, el programa continúa con la línea que sigue al ciclo.
  • Si es falsa desde el inicio, el bloque nunca se ejecuta.

Cuándo se usa while

Se usa cuando no se sabe de antemano cuántas repeticiones se necesitan.

El usuario decide cuándo parar.
Se espera un evento.
Se valida una entrada.

Las tres partes de un while

1Inicialización
  • La variable de control recibe un valor antes de entrar al ciclo.
2Condición
  • Define hasta cuándo se repite el bloque.
3Actualización
  • La variable de control cambia dentro del ciclo, acercándose al valor que vuelve falsa la condición.

Contador básico

Imprimir los números del 1 al 5.


x = 1

while x <= 5:
    print("El valor de x es:", x)
    x = x + 1

x = 1

while x <= 5:
    print("El valor de x es:", x)
    x = x + 1
x = 1

Inicialización. La variable de control arranca en 1. Sin esta línea el ciclo no tendría nada que evaluar y el programa fallaría.


x = 1

while x <= 5:
    print("El valor de x es:", x)
    x = x + 1
while x <= 5:

Condición. Se evalúa antes de cada vuelta. Mientras el resultado sea verdadero se ejecuta el bloque indentado.


x = 1

while x <= 5:
    print("El valor de x es:", x)
    x = x + 1
print("El valor de x es:", x)

Cuerpo del ciclo. Es el trabajo que se repite. La indentación es lo que lo marca como parte del while.


x = 1

while x <= 5:
    print("El valor de x es:", x)
    x = x + 1
x = x + 1

Actualización. Acerca la variable al valor que vuelve falsa la condición. Es la línea que más se olvida y la que provoca los ciclos infinitos.

Tabla de ejecución

IteraciónxCondiciónPantalla
111 <= 5 ✓1
222 <= 5 ✓2
333 <= 5 ✓3
444 <= 5 ✓4
555 <= 5 ✓5
666 <= 5 ✗—

Cuenta regresiva

Contar desde 10 hasta 1 y mostrar el despegue.


contador = 10

while contador > 0:
    print(contador)
    contador = contador - 1

print("¡Despegue!")

Salida del programa


10
9
8
...
1
¡Despegue!
La variable de control puede bajar en lugar de subir.
El código después del while se ejecuta cuando el ciclo termina.

Suma acumulada

Sumar todos los números del 1 al 100.


numero = 1
total = 0

while numero <= 100:
    total = total + numero
    numero = numero + 1

print("La suma es:", total)

numero = 1
total = 0

while numero <= 100:
    total = total + numero
    numero = numero + 1

print("La suma es:", total)
numero = 1
total = 0

Aquí hay dos variables con papeles distintos. La primera controla el ciclo y la segunda acumula el resultado. El acumulador arranca en cero porque todavía no se ha sumado nada.


numero = 1
total = 0

while numero <= 100:
    total = total + numero
    numero = numero + 1

print("La suma es:", total)
while numero <= 100:

La condición se escribe sobre la variable de control, nunca sobre el acumulador. El ciclo da exactamente cien vueltas.


numero = 1
total = 0

while numero <= 100:
    total = total + numero
    numero = numero + 1

print("La suma es:", total)
total = total + numero

El patrón acumulador. La variable toma su propio valor anterior y le agrega el dato de esta vuelta. Es la forma de arrastrar un resultado de una iteración a la siguiente.


numero = 1
total = 0

while numero <= 100:
    total = total + numero
    numero = numero + 1

print("La suma es:", total)
print("La suma es:", total)

El resultado se imprime fuera del ciclo, con la suma ya completa. La salida es 5050. Si esta línea estuviera indentada, el programa imprimiría cien resultados parciales.

Validación de entrada

Pedir un número positivo al usuario hasta que lo escriba bien.


numero = int(input("Ingresa un número positivo: "))

while numero <= 0:
    print("El número debe ser positivo.")
    numero = int(input("Ingresa un número positivo: "))

print("Número aceptado:", numero)

Utilidad del patrón

  • No se sabe cuántas veces el usuario va a equivocarse.
  • El ciclo repite la petición hasta que el dato sea válido.
  • La primera lectura ocurre antes del ciclo, para que la condición tenga algo que evaluar.
  • Es un patrón muy común en programas reales.

Menú interactivo


opcion = 0

while opcion != 3:
    print("1. Saludar")
    print("2. Despedirse")
    print("3. Salir")
    opcion = int(input("Elige una opción: "))

    if opcion == 1:
        print("¡Hola!")
    elif opcion == 2:
        print("¡Adiós!")

print("Programa terminado.")

Recorrido del menú

  • La opción arranca en cero, un valor que no está en el menú y garantiza la primera vuelta.
  • El menú se muestra en cada iteración.
  • Dentro del ciclo puede haber condicionales, como en este caso.
  • Al elegir 3 la condición se vuelve falsa y se imprime el mensaje final.

Adivina el número


secreto = 42
intento = int(input("Adivina el número: "))

while intento != secreto:
    if intento < secreto:
        print("Muy bajo. Intenta de nuevo.")
    else:
        print("Muy alto. Intenta de nuevo.")
    intento = int(input("Adivina el número: "))

print("¡Correcto! El número era", secreto)

Análisis del ejemplo

El ciclo no tiene un número fijo de intentos.
Depende completamente del usuario.
El while es ideal para este tipo de situaciones.
La última línea del ciclo vuelve a pedir el dato, esa es la actualización.

El ciclo infinito

Definición

Un ciclo infinito ocurre cuando la condición nunca se vuelve falsa. El programa queda atascado y hay que detenerlo manualmente.

En la terminal se detiene con Control + C.

Un ciclo que no termina


x = 1

while x <= 10:
    print(x)
    # falta x = x + 1
Qué ocurre

La variable nunca cambia, entonces la condición siempre es verdadera y el programa imprime 1 indefinidamente.

Cómo evitarlo

  • Siempre actualizar la variable de control dentro del ciclo.
  • Verificar que la actualización acerque la condición a volverse falsa.
  • Revisar la lógica antes de ejecutar.
  • Probar primero con límites pequeños, como 3 o 5, donde el recorrido completo se puede seguir a mano.

La instrucción continue

Definición

continue salta a la siguiente iteración sin terminar el ciclo. Las líneas que quedan debajo de él se omiten en esa vuelta.

Imprimir solo los impares


x = 0

while x < 10:
    x = x + 1
    if x % 2 == 0:
        continue
    print(x)
Resultado

Se imprimen solo los números impares del 1 al 9. Nótese que la actualización va antes del continue, de lo contrario el ciclo se quedaría atascado.

La instrucción break

Postura del curso

break detiene un ciclo de forma abrupta desde adentro. Existe en Python, pero en este curso no se usará.

El problema con break

Cuando se usa break, el ciclo ya no se controla por su condición.

  • La condición del while se vuelve irrelevante.
  • El flujo del programa se vuelve difícil de seguir.
  • Cuesta más entender cuándo y por qué termina el ciclo.

Siempre hay una alternativa

En lugar de esto


x = 1

while True:
    if x == 5:
        break
    print(x)
    x = x + 1

Se escribe esto


x = 1

while x < 5:
    print(x)
    x = x + 1
Ventaja

La condición de parada está a la vista en el while. El ciclo es claro, predecible y fácil de leer.

La regla

Si se siente la necesidad de usar break, hay que hacerse una pregunta.

Pregunta

¿Se puede expresar esta condición de parada directamente en el while?

La respuesta casi siempre es sí.

Olvidar actualizar la variable


x = 1

while x <= 5:
    print(x)
    # nunca se actualiza x
Consecuencia

Ciclo infinito garantizado. Es el error más frecuente al empezar con while.

Condición falsa desde el inicio


x = 10

while x <= 5:
    print(x)
    x = x + 1
Consecuencia

El ciclo nunca se ejecuta y el programa termina sin imprimir nada. No hay error en pantalla, que es lo que lo hace difícil de detectar.

Comparar sin considerar mayúsculas


respuesta = input("¿Continuar? (s/n): ")

while respuesta != "n":
    respuesta = input("¿Continuar? (s/n): ")
Solución

Si el usuario escribe N con mayúscula, la comparación falla y el ciclo sigue. Se corrige comparando con respuesta.lower() distinto de n.

Casos de uso

SituaciónUsar while
No se sabe cuántas veces repetir✓
Se espera una condición externa✓
Se valida entrada del usuario✓
Se sabe exactamente cuántas veces✗
Lo que sigue

Para un número fijo de repeticiones existe el ciclo for, el tema de la próxima clase.

Buenas prácticas

Siempre actualizar la variable de control.
Asegurarse de que la condición eventualmente sea falsa.
Usar nombres de variables descriptivos.
Evitar lógica muy compleja dentro del ciclo.

Tres preguntas antes de escribir el ciclo

1¿Cuál es la condición de parada?
2¿Qué cambia en cada iteración?
3¿Puede la condición volverse falsa?

Si alguna no tiene respuesta clara, el ciclo todavía no está listo para escribirse.