Semestre 02, 2026
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)
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.
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.
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.
Ambos tipos de repetición usan una variable de control.
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
Se usa cuando no se sabe de antemano cuántas repeticiones se necesitan.
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
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
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
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
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.
| Iteración | x | Condición | Pantalla |
|---|---|---|---|
| 1 | 1 | 1 <= 5 ✓ | 1 |
| 2 | 2 | 2 <= 5 ✓ | 2 |
| 3 | 3 | 3 <= 5 ✓ | 3 |
| 4 | 4 | 4 <= 5 ✓ | 4 |
| 5 | 5 | 5 <= 5 ✓ | 5 |
| 6 | 6 | 6 <= 5 ✗ | — |
Contar desde 10 hasta 1 y mostrar el despegue.
contador = 10
while contador > 0:
print(contador)
contador = contador - 1
print("¡Despegue!")
10
9
8
...
1
¡Despegue!
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)
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)
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)
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)
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.
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)
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.")
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)
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.
x = 1
while x <= 10:
print(x)
# falta x = x + 1
La variable nunca cambia, entonces la condición siempre es verdadera y el programa imprime 1 indefinidamente.
continue salta a la siguiente iteración sin terminar el ciclo. Las líneas que quedan debajo de él se omiten en esa vuelta.
x = 0
while x < 10:
x = x + 1
if x % 2 == 0:
continue
print(x)
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.
break detiene un ciclo de forma abrupta desde adentro. Existe en Python, pero en este curso no se usará.
Cuando se usa break, el ciclo ya no se controla por su condición.
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
La condición de parada está a la vista en el while. El ciclo es claro, predecible y fácil de leer.
Si se siente la necesidad de usar break, hay que hacerse una pregunta.
¿Se puede expresar esta condición de parada directamente en el while?
La respuesta casi siempre es sí.
x = 1
while x <= 5:
print(x)
# nunca se actualiza x
Ciclo infinito garantizado. Es el error más frecuente al empezar con while.
x = 10
while x <= 5:
print(x)
x = x + 1
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.
respuesta = input("¿Continuar? (s/n): ")
while respuesta != "n":
respuesta = input("¿Continuar? (s/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.
| Situación | Usar 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 | ✗ |
Para un número fijo de repeticiones existe el ciclo for, el tema de la próxima clase.
Si alguna no tiene respuesta clara, el ciclo todavía no está listo para escribirse.