Saltar al contenido
🐍 Curso de Python
/

Módulo 1 · Lección 17 de 59

El bucle for

Recorrer una secuencia elemento a elemento, la idea de para cada, y en qué se diferencia de un while.

⏱ 11 min de lectura

Para recorrer un texto carácter a carácter con un while hacen falta cuatro cosas: una variable de posición, una condición con len(), un acceso por índice y un incremento. Cuatro cosas que puedes equivocar de cuatro maneras distintas, y todas para expresar una idea muy simple: "haz esto con cada letra".

python
palabra = "Python"
posicion = 0

while posicion < len(palabra):
        print(palabra[posicion])
    posicion += 1

El segundo bucle de Python dice eso mismo en dos líneas.

La forma básica#

python
for letra in "Python":
        print(letra)
Salida en pantalla
P
y
t
h
o
n

Sin contador, sin len(), sin corchetes y sin posibilidad de pasarte del final. La sintaxis es:

  • La palabra for.
  • Un nombre de variable que tú eliges.
  • La palabra in.
  • La secuencia que quieres recorrer.
  • Dos puntos y el bloque sangrado, como siempre.

Y se lee literalmente como una frase en inglés que no hace falta traducir: for letra in "Python", para cada letra en "Python".

Cómo funciona por dentro#

En cada vuelta, Python coge el siguiente elemento de la secuencia y lo guarda en la variable del bucle. Después ejecuta el bloque. Cuando no quedan elementos, el bucle termina.

Eso significa que la variable del bucle cambia sola: no la inicializas tú ni la incrementas tú. En la primera vuelta letra vale "P", en la segunda "y", y así hasta la última. Esa es la mitad de las líneas que desaparecen respecto al while.

python
frase = "programar en Python es divertido"
vocales = 0

for caracter in frase:
        if caracter in "aeiouáéíóú":
                vocales += 1

print(f"La frase tiene {vocales} vocales")
Salida en pantalla
La frase tiene 10 vocales

Fíjate en que los patrones de la lección del while siguen funcionando igual. Ahí dentro hay un acumulador, vocales, inicializado antes del bucle. Lo único que cambia es quién controla las vueltas.

Y el acumulador de texto también:

python
palabra = "murcielago"
invertida = ""

for letra in palabra:
        invertida = letra + invertida

print(invertida)
Salida en pantalla
ogaleicrum

Cada letra se pone delante de lo que ya había, así que el texto sale al revés. Nada de esto sería más fácil con un while.

El nombre de la variable#

Lo eliges tú, y como cualquier nombre, debe decir qué contiene. Si recorres un texto, letra o caracter; si recorres precios, precio; si recorres ciudades, ciudad. En singular, porque en cada vuelta hay uno solo.

python
for ciudad in ["Madrid", "Sevilla", "Bilbao"]:
        print(f"{ciudad:<10}{len(ciudad)} letras")
Salida en pantalla
Madrid    6 letras
Sevilla   7 letras
Bilbao    6 letras

Verás mucho código con i, x o c. Es una costumbre heredada de otros lenguajes y solo se justifica cuando la variable es de verdad un número sin significado. for precio in precios: se entiende sin pensar; for x in p: no.

for y while: cuál usar#

Los dos repiten, pero responden a preguntas distintas:

Aspectoforwhile
Se usa cuandoSabes sobre qué iterasDependes de una condición
Número de vueltasDeterminado por la secuenciaDesconocido de antemano
Quién avanzaPython, soloTú, con un contador
Riesgo de bucle infinitoNingunoAlto
Ejemplo típicoRecorrer un texto o una listaUn menú, validar una entrada

La regla para decidir es corta: si puedes usar for, usa for. Es más corto, se entiende mejor y no puede quedarse colgado, porque la secuencia que recorre es finita y se acaba sola.

El while se queda para lo que no tiene una secuencia detrás: repetir hasta que el usuario escriba algo válido, mantener un menú abierto, o seguir calculando hasta alcanzar una precisión. En todos esos casos no hay nada que recorrer, solo una condición que vigilar.

Iterar sobre varios valores sueltos#

Además de cadenas, un for puede recorrer una lista de valores escritos entre corchetes:

python
for precio in [3, 7, 11]:
        print(f"Precio: {precio} €")
Salida en pantalla
Precio: 3 €
Precio: 7 €
Precio: 11 €

Esos corchetes con valores separados por comas son una lista, y es cómodo usarlas así para probar un bucle con tres o cuatro datos concretos.

También puedes recorrer el resultado de split(), que ya conoces y que produce precisamente una lista:

python
frase = "uno dos tres cuatro"

for palabra in frase.split():
        print(f"{palabra:<8}{len(palabra)}")
Salida en pantalla
uno     3
dos     3
tres    4
cuatro  6

Eso resuelve del todo el ejemplo de "varios datos en una línea" que dejamos a medias en la lección de input(), donde había que escribir partes[0], partes[1] y partes[2] a mano.

Ejemplo completo#

analizador.py
VOCALES = "aeiouáéíóúü"
CONSONANTES = "bcdfghjklmnñpqrstvwxyz"

frase = input("Escribe una frase: ")

vocales = 0
consonantes = 0
espacios = 0
otros = 0

for caracter in frase.lower():
        if caracter in VOCALES:
                vocales += 1
    elif caracter in CONSONANTES:
                consonantes += 1
    elif caracter == " ":
                espacios += 1
    else:
                otros += 1

print()
print(f"{'Caracteres:':<14}{len(frase):>4}")
print(f"{'Vocales:':<14}{vocales:>4}")
print(f"{'Consonantes:':<14}{consonantes:>4}")
print(f"{'Espacios:':<14}{espacios:>4}")
print(f"{'Otros:':<14}{otros:>4}")
Salida en pantalla
Escribe una frase: El año 2024 fue raro.
Caracteres:     21
Vocales:         7
Consonantes:     5
Espacios:        4
Otros:           5

El lower() va en la línea del for, no dentro del bucle: se aplica una sola vez a la frase completa y así las constantes solo necesitan las minúsculas. Los dígitos y el punto caen en otros, que es el else que recoge todo lo que no ha encajado antes.