Python esencial · #3 de 11
Flujo de control
if/elif/else, for, while
Por qué importa
El flujo de control es como traduces los enunciados de un problema en pasos.
La idea
Los condicionales eligen caminos; los bucles repiten el trabajo sin copiar y pegar. Prefiere for sobre while siempre que conozcas el iterable de antemano: for es más difícil de malinterpretar y más difícil de volver infinito.
Pruébalo
Escalera if / elif / else, con un pequeño clasificador tipo juego:
def grade(score):
if score >= 90: return "A"
elif score >= 80: return "B"
elif score >= 70: return "C"
elif score >= 60: return "D"
else: return "F"
for s in [95, 82, 71, 64, 30]:
print(s, grade(s))
for sobre un rango, con enumerate para obtener a la vez el índice y el valor:
names = ["Ada", "Linus", "Margaret", "Grace"]
for i, n in enumerate(names, start=1):
print(f"{i:>2}. {n}")
while es mejor cuando la condición de parada es un estado, no un conteo. break sale anticipadamente; continue salta a la siguiente iteración.
# Find the first square > 100
n = 1
while True:
if n * n > 100:
print("first n with n^2 > 100:", n)
break
n += 1
Verificación rápida
- P: ¿Cuándo usas
continue? R: Para saltarte el resto del cuerpo del bucle e ir a la siguiente iteración.
Mini ejercicios
- Suma todos los números pares del 1 al 20.
- Imprime los números del 10 al 1 usando un bucle
while.
Errores comunes
- Error: Bucle infinito en
while. Solución: Actualiza la variable del bucle. - Error: Error por uno (off-by-one) en
range. Solución: Recuerda querangeexcluye el extremo final.
Conclusiones clave
- Usa
forsobre un iterable cuando puedas;whilecuando la parada se base en un estado. enumerate(seq)es mejor querange(len(seq))para bucles de índice + valor.breaksale,continuesalta: ambos están bien con moderación.- La indentación ES el bloque; no hay
{}que se te olviden.