Bucles#

Si deseas que el código se ejecute repetidamente, puedes hacer uso de los bucles.

Ver también

Bucles For#

Para iterar sobre un rango de números, podemos usar un simple bucle for y la función range.

En la siguiente celda, el comando print(i) se ejecutará varias veces para diferentes valores de i. Iteramos sobre un rango de valores:

for i in range(0, 5):
    print(i)
0
1
2
3
4

Ten en cuenta que el código anterior que está indentado solo se ejecutará para el primer número dado (0) y continuará hasta el último número (5) pero sin incluirlo.

También puedes iterar sobre un rango de números con un paso definido, por ejemplo, paso 3:

for i in range(0, 10, 3):
    print(i)
0
3
6
9

Iterar sobre arrays te permite hacer algo con todos los elementos del array:

for animal in ["Dog", "Cat", "Mouse"]:
    print(animal)
Dog
Cat
Mouse

Puedes iterar sobre dos arrays en paralelo, por pares, de esta manera:

# recorriendo arrays por pares
measurement_1 = [1, 9, 7, 1, 2, 8, 9, 2, 1, 7, 8]
measurement_2 = [4, 5, 5, 7, 4, 5, 4, 6, 6, 5, 4]

for m_1, m_2 in zip(measurement_1, measurement_2):
    print("Paired measurements: " + str(m_1) + " and " + str(m_2))
Paired measurements: 1 and 4
Paired measurements: 9 and 5
Paired measurements: 7 and 5
Paired measurements: 1 and 7
Paired measurements: 2 and 4
Paired measurements: 8 and 5
Paired measurements: 9 and 4
Paired measurements: 2 and 6
Paired measurements: 1 and 6
Paired measurements: 7 and 5
Paired measurements: 8 and 4

Si también quieres saber el índice del elemento en la lista, usa la función enumerate:

# numerando e iterando a través de colecciones
for index, animal in enumerate(["Dog", "Cat", "Mouse"]):
    print("The animal number " + str(index) + " in the list is " + animal)
The animal number 0 in the list is Dog
The animal number 1 in the list is Cat
The animal number 2 in the list is Mouse

Generando listas en bucles#

Se pueden generar listas usando bucles for. La forma convencional de hacer esto implica múltiples líneas de código:

# empezamos con una lista vacía
numbers = []

# y añadimos elementos
for i in range(0, 5):
    numbers.append(i * 2)
    
print(numbers)
[0, 2, 4, 6, 8]

También se puede escribir de forma más corta. El concepto subyacente se llama generadores.

numbers = [i * 2 for i in range(0, 5)]

print(numbers)
[0, 2, 4, 6, 8]

La combinación convencional que involucra sentencias if se ve así:

# empezamos con una lista vacía
numbers = []

# y añadimos elementos
for i in range(0, 5):
    # comprobamos si el número es impar
    if i % 2:
        numbers.append(i * 2)
    
print(numbers)
[2, 6]

Y la versión corta así:

numbers = [i * 2 for i in range(0, 5) if i % 2]

print(numbers)
[2, 6]

Bucles While#

Otra forma de hacer bucles es usando el bucle while. Funciona comprobando una condición, similar a la sentencia if. Interrumpirá la ejecución tan pronto como la condición ya no sea verdadera:

number = 1024

while (number > 1):
    number = number / 2
    print(number)
512.0
256.0
128.0
64.0
32.0
16.0
8.0
4.0
2.0
1.0

Interrumpiendo bucles#

Puedes interrumpir los bucles en puntos específicos de tu código usando el comando break:

number = 1024

while (True):
    number = number / 2
    print(number)
    
    if number < 1:
        break;
512.0
256.0
128.0
64.0
32.0
16.0
8.0
4.0
2.0
1.0
0.5
for i in range(10):
    print(i)
    if i > 5:
        break
0
1
2
3
4
5
6

Saltando iteraciones en bucles#

Si quieres saltar iteraciones, puedes usar la sentencia continue. Esto a menudo tiene sentido en combinación con un if:

for i in range(0, 10):
    if i >= 3 and i <= 6:
        continue
    print(i)
0
1
2
7
8
9

Ejercicio 1#

Supón que tienes una lista de nombres de archivos y quieres hacer algo con ellos, por ejemplo, imprimirlos. Programa un bucle for que imprima todos los nombres de archivos que terminen en “tif”.

file_names = ['dataset1.tif', 'dataset2.tif', 'summary.csv', 'readme.md', 'blobs.tif']

Ejercicio 2#

Supón que tienes una lista de radios de círculos. Haz una tabla (diccionario) con dos columnas: radio y área.

radii = [3, 15, 67, 33, 12, 8, 12, 9, 22]