Tiza Las materias del CBC
Practicar →

Pensamiento Computacional (090) · Unidad 3 — Estructuras de control

Ciclo while

while repite mientras una condición sea verdadera. Si nada la vuelve falsa, el programa no termina nunca.

Practicar este tema →7 ejercicios que te corrigen paso a paso · gratis, sin cuenta

La explicación

Repetir sin saber cuántas veces

n = 1
while n <= 3:
    print(n)
    n = n + 1

Imprime 1, 2, 3. La condición se revisa antes de cada vuelta: si al llegar ya es falsa, el cuerpo no se ejecuta ni una vez.

for o while

for    cuando sabés cuántas vueltas   (recorrer una lista, contar hasta n)
while  cuando depende de algo         (hasta que el usuario acierte)

Todo for se puede escribir con while, pero queda peor. Usá while cuando de verdad no sabés cuántas vueltas van a ser.

Las tres partes que no pueden faltar

Un while bien escrito siempre tiene:
  1. Antes: inicializar la variable de la condición.
  2. La condición.
  3. Adentro: algo que acerque la condición a ser falsa.
Si falta la tercera, tenés un ciclo infinito: el programa se cuelga y hay que cortarlo a mano. Es el error más típico del tema, y casi siempre es un n = n + 1 olvidado.
n = 1
while n <= 3:
    print(n)   ← n nunca cambia: imprime 1 para siempre

break y continue

break     corta el ciclo entero y sigue después
continue   saltea el resto de esta vuelta y va a la siguiente

break es útil cuando encontraste lo que buscabas y no tiene sentido seguir:

while True:
    clave = input("Clave: ")
    if clave == "abc":
        break
    print("Incorrecta, probá de nuevo")

while True sería infinito, pero el break le da una salida. Es un patrón válido y muy usado — siempre que exista un camino al break.

El ciclo que se cuelga con datos, no con código

A veces el while está bien escrito y aun así no termina, porque el dato que entra no es el esperado. Un contador que baja de a 2 nunca llega exactamente a 1 si arrancó en par. Por eso conviene usar <= o >= en vez de == en la condición: while n != 0 es mucho más frágil que while n > 0.

Ejemplo resuelto

Escribir una función que reciba un número y devuelva cuántas veces hay que dividirlo por 2 (división entera) hasta llegar a 1.

Por qué va while y no for. No sabés de antemano cuántas vueltas van a ser: depende del número. Eso es exactamente el caso de while.

def cuantas_divisiones(n):
    contador = 0
    while n > 1:
        n = n // 2        # esto acerca la condición a ser falsa
        contador = contador + 1
    return contador

Con n = 100:

100 → 50 → 25 → 12 → 6 → 3 → 1

Son 6 divisiones.

Fijate dos cosas que evitan el cuelgue:
1. La condición es n > 1 y no n != 1. Con !=, si n llegara a 0 nunca sería exactamente 1 y el ciclo seguiría para siempre. Con >, 0 tampoco cumple y corta igual.
2. La línea que divide está adentro del ciclo. Si estuviera afuera, n nunca cambiaría.

Control: probá con n = 1. Tiene que dar 0, porque la condición es falsa desde el principio y el cuerpo no se ejecuta nunca. Ese caso — el ciclo que da cero vueltas — es el que más se olvida de probar.

Dónde se cae la mayoría

Hasta acá la explicación. La práctica es la otra mitad: 7 ejercicios de este tema, en cuatro niveles, que no te dicen sólo si está bien al final sino que te corrigen en cada paso y te explican por qué. Además trae una animación que muestra la idea en movimiento.

Practicar Ciclo while →

Ver todos los temas de Pensamiento Computacional