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.
La explicación
Repetir sin saber cuántas veces
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
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
while bien escrito siempre tiene:
- Antes: inicializar la variable de la condición.
- La condición.
- Adentro: algo que acerque la condición a ser falsa.
n = n + 1 olvidado.
while n <= 3:
print(n) ← n nunca cambia: imprime 1 para siempre
break y continue
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:
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.
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.
contador = 0
while n > 1:
n = n // 2 # esto acerca la condición a ser falsa
contador = contador + 1
return contador
Con n = 100:
Son 6 divisiones.
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
- Olvidar la línea que modifica la variable de la condición: ciclo infinito.
- Usar == en la condición en vez de una desigualdad, y pasarse de largo del valor de corte.
- Inicializar la variable adentro del ciclo, con lo que la condición nunca avanza.
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 →