Bucles: for y while
Un bucle ejecuta un bloque de código repetidamente. Python tiene dos tipos: for, que repite una vez por cada elemento de una secuencia, y while, que repite mientras una condición sea verdadera.
El bucle for con range()
range() genera una secuencia de números. Es la forma más habitual de repetir algo un número fijo de veces:
>>> for i in range(5):
... print(i)
0
1
2
3
4
range(5) genera los números del 0 al 4. El inicio por defecto es 0 y el número que le pasas no se incluye: por eso cinco elementos y no seis. La variable i toma cada valor en cada vuelta.
range() acepta hasta tres argumentos: inicio, fin y paso:
>>> for i in range(2, 8): # del 2 al 7
... print(i, end=" ")
2 3 4 5 6 7
>>> for i in range(0, 20, 5): # de 5 en 5
... print(i, end=" ")
0 5 10 15
>>> for i in range(5, 0, -1): # cuenta atrás
... print(i, end=" ")
5 4 3 2 1
Nota: El parámetro end=" " en print() sustituye el salto de línea por un espacio, para que los números salgan en la misma línea. Por defecto end="\n".
El bucle for con strings
Python puede iterar directamente sobre cualquier secuencia, incluidos los strings. Cada vuelta del bucle entrega un carácter:
>>> for letra in "hola":
... print(letra)
h
o
l
a
>>> vocales = 0
>>> for letra in "murcielago":
... if letra in "aeiou":
... vocales += 1
>>> print(vocales)
5
En la próxima lección veremos las listas, y el for funciona igual con ellas: una vuelta por elemento.
El bucle while
El while repite el bloque mientras la condición sea True. Es útil cuando no sabes de antemano cuántas vueltas necesitas:
>>> intentos = 0
>>> while intentos < 3:
... print("intento", intentos + 1)
... intentos += 1
intento 1
intento 2
intento 3
Nota: Asegúrate de que la condición del while llegue a ser False en algún momento. Si no, el bucle no termina nunca y el programa se queda colgado.
break y continue
break interrumpe el bucle inmediatamente, aunque queden vueltas por hacer:
>>> for i in range(10):
... if i == 5:
... break
... print(i, end=" ")
0 1 2 3 4
continue salta el resto del bloque en la vuelta actual y pasa a la siguiente:
>>> for i in range(8):
... if i % 2 == 0: # si es par, sáltalo
... continue
... print(i, end=" ")
1 3 5 7
Ambos funcionan igual dentro de un while. Un patrón habitual es el bucle infinito controlado con break:
>>> while True:
... clave = input("introduce la clave: ")
... if clave == "1234":
... print("acceso concedido")
... break
... print("clave incorrecta, inténtalo de nuevo")
La instrucción pass
pass es una instrucción que no hace nada. Se usa como marcador de posición cuando la sintaxis exige un bloque pero todavía no has escrito el código:
>>> for i in range(5):
... pass # pendiente de implementar
Lo verás también en funciones y clases vacías que aún no están desarrolladas.
En la próxima lección: listas: el tipo de colección más usado en Python para almacenar y recorrer conjuntos de datos.