Python básico

Ciclos: repetir sin copiar y pegar

Lección 6 de 8 · 16 min

Repetir sin copiar y pegar

Si tienes 3 ventas puedes escribir tres líneas. Si tienes 3.000, no. Un ciclo repite las mismas instrucciones sobre cada elemento de un conjunto, sin importar si son tres o tres mil.

Aquí es donde automatizar empieza a pagar de verdad.

El ciclo for
ventas = [45000, 128000, 32000, 210000]

for venta in ventas:
    print("Venta por:", venta)
Resultado
Venta por: 45000
Venta por: 128000
Venta por: 32000
Venta por: 210000

Se lee casi en español: "para cada venta en ventas, imprime...". La palabra venta la eliges tú: es el nombre que le das al elemento que se está procesando en cada vuelta. Y como en el if, lo que va indentado pertenece al ciclo.

El patrón acumulador

Es el uso más frecuente y el que vas a repetir toda tu vida: una variable que empieza en cero fuera del ciclo y va creciendo dentro.

Totalizar y promediar
ventas = [45000, 128000, 32000, 210000]

total = 0                 # FUERA: se crea una sola vez
for venta in ventas:
    total = total + venta  # DENTRO: se ejecuta en cada vuelta

promedio = total / len(ventas)

print("Ventas:  ", len(ventas))
print("Total:   ", total)
print("Promedio:", promedio)
Resultado
Ventas:   4
Total:    415000
Promedio: 103750.0

Si pones total = 0 dentro del ciclo, el total siempre da el valor de la última venta. Se reinicia en cada vuelta y borra lo acumulado. No hay error ni aviso: el número sale mal y parece correcto.

total = total + venta puede escribirse corto: total += venta. Significa exactamente lo mismo.

Combinar ciclo y condición

Un if dentro de un for es la herramienta que resuelve la mitad de las tareas de oficina: recorrer todo y separar lo que cumple una regla.

Quién está por debajo de la meta
META = 100000
ventas = [45000, 128000, 32000, 210000]

bajo_meta = 0
for venta in ventas:
    if venta < META:
        print("Por debajo de la meta:", venta)
        bajo_meta += 1

print("Total por debajo:", bajo_meta)
Resultado
Por debajo de la meta: 45000
Por debajo de la meta: 32000
Total por debajo: 2

Las dos herramientas que acompañan al for

range() para repetir N veces

Cuando no recorres datos sino que repites un número de veces.

for i in range(5): da 0 1 2 3 4.

⚠️ Empieza en 0 y termina UNO ANTES del número que le pases. range(1, 6) sí da 1 2 3 4 5.

enumerate() para saber la posición

Cuando además del valor necesitas el número de fila.

for i, venta in enumerate(ventas, 1):

El 1 hace que empiece a contar desde uno, que es como lo lee una persona.

Un reporte numerado
ventas = [45000, 128000, 32000]

for i, venta in enumerate(ventas, 1):
    print("Fila", i, "->", venta)
Resultado
Fila 1 -> 45000
Fila 2 -> 128000
Fila 3 -> 32000

El otro ciclo: while

for recorre un conjunto conocido. while repite mientras una condición sea verdadera, sin saber cuántas veces será. Se usa mucho menos, pero hay un caso donde es el correcto: pedir un dato hasta que sea válido.

Insistir hasta que el dato sirva
cantidad = 0

while cantidad <= 0:
    cantidad = int(input("Cantidad (mayor que cero): "))

print("Registradas", cantidad, "unidades")
Resultado
Cantidad (mayor que cero): 0
Cantidad (mayor que cero): -5
Cantidad (mayor que cero): 12
Registradas 12 unidades

El ciclo infinito. Si la condición de un while nunca deja de cumplirse, el programa se queda dando vueltas para siempre y hay que matarlo con Ctrl + C. Ocurre casi siempre por lo mismo: olvidar la línea que hace avanzar el contador.

Antes de escribir un while, pregúntate: ¿qué línea de aquí adentro va a hacer que esta condición deje de cumplirse algún día? Si no la tienes, todavía no puedes escribirlo.

¿Cuántas vueltas da cada uno?

Cuenta mentalmente y haz clic para comprobarlo.

Preguntas que siempre salen

¿Cómo salgo de un ciclo antes de tiempo?

Con break: corta el ciclo del todo. Y continue salta el resto de esa vuelta y pasa a la siguiente. Úsalos con moderación: un ciclo con tres break repartidos se vuelve difícil de seguir.

¿Puedo poner un ciclo dentro de otro?

Sí, y sirve para recorrer tablas: filas y columnas. Ojo al volumen: un ciclo de 1.000 dentro de otro de 1.000 son un millón de vueltas.

¿No hay una forma más corta de sumar una lista?

Sí: sum(ventas). Y también max(), min() y len(). Aquí se enseña el acumulador a mano porque es el patrón que necesitas cuando la suma tiene condiciones -sumar solo lo que pasa la meta-, donde sum() ya no alcanza.

Compruébalo tú mismo

¿Qué pasa si total = 0 queda DENTRO del for?

¿Qué imprime for i in range(4)?

¿Cuál es la causa habitual de un ciclo infinito?

Lo que sigue

Has recorrido listas sin saber realmente qué son. En la siguiente lección vas a ver listas y diccionarios a fondo: las dos estructuras con las que vas a organizar datos el 90% del tiempo.

Siguiente: Listas y diccionarios

Continuar ← Condicionales: que el programa decida