Está en la página 1de 10

3.3.

Bucles
Python para la arquitectura y la ingeniería

Alberto Díaz, Edgar Talavera y Guillermo Iglesias


Curso 2022/2023
E.T.S.I. Sistemas Informáticos
License CC BY-NC-SA 4.0
Bucles
Se encargan de ejecutar grupos de sentencias una y otra vez

Por ejemplo, si queremos que nuestra oveja bale tres veces, podemos hacer:
print("Beeee")
print("Beeee")
print("Beeee")

Pero esto tiene dos problemas:


¿Y si queremos 2 veces? ¿O 5? ¿Cuantos if habría que escribir?
Así no conseguimos evitar la repetición de código

En python existen dos tipos de bucles, while y for


2 / 10
while

Ejecuta un bloque mientras la condición sea verdadera


i = 0
while i < 500:
print("Beeee")
i += 1 # Esto es lo que hace que en algún momento la condición sea falsa

Este bucle se lee Mientras la condición i < 500 sea verdadera ...
Tras ejecutarlo obtenemos la siguiente salida:

Beeee
Beeee
Beeee

3 / 10
for

Es un tipo diferente de bucle porque itera sobre una colección de elementos


animal_sounds = ['Beeee', 'Miau', 'Guau']
for sound in animal_sounds:
print(sound)

A cada vuelta del bucle la variable sound contiene un valor diferente


Tras ejecutarlo obtenemos la siguiente salida:

Beeee
Miau
Guau

4 / 10
La función range

Genera1 secuencias de enteros; su forma general es range(a, b, c) :


l = list(range(4)) # l == [0, 1, 2, 3]
l = list(range(1, 4)) # l == [1, 2, 3]
l = list(range(1, 10, 2)) # l == [0, 3, 5, 7, 9]

Si solo se especifica a , va desde el 0 hasta a-1


Si se especifican a y b , va desde a hasta b-1
Si se especifican a , b y c , va desde a hasta b-1 en saltos de c

Entre otras cosas, es muy útil para trabajar con bucles for
1 Más adelante veremos la diferencia entre generador y función

5 / 10
Rompiendo el flujo de los bucles
Para variar el comportamiento típico de un bucle usamos las sentencias
break o continue

break continue
Sale del bucle actual Pasa a la siguiente iteración del bucle
>>> for i in range(10): >>> for i in range(10):
... print(i) ... if i < 7:
... if i == 2: ... continue
... break ... print(i)
0 7
1 8
2 9

6 / 10
¿Sentencia else en los bucles?

La sentencia else en bucles es algo muy atípico

Sirve para ejecutar un bloque solo si no se sale de un bucle con un break

Sin else Con else

found = False # Busca un elemento en una bolsa


for item in bag: for item in bag:
if 'knife' in bag: if 'knife' in bag:
found = True break
break else:
print("Couldn't find the item")
if not found:
print("Couldn't find the item")

7 / 10
enumerate

A veces al iterar sobre los elementos de un bucle queremos saber su posición

Con for Con while

# Esta es la más típica i = 0


for i < range(len(list_of_things)): while i < len(list_of_things):
print(i, list_of_things[i]) print(i, list_of_things[i])
i += 1

enumerate(iterable[, start]) itera sobre el índice y valor del iterable

for i, item in enumerate(list_of_things):


print(i, item)

Deja un código más pythónico, es decir, más claro y legible


8 / 10
zip

Un ejemplo similar es el de iterar varios conjuntos a la vez

zip(i1, i2, ...) se recorrerá los iterables i1 , i2 , ... a la vez

>>> questions = ['name', 'quest', 'favorite color']


>>> answers = ['Lancelot', 'the Holy Grail', 'blue']
>>> for q, a in zip(questions, answers):
... print("What's your " + q + "? It's " + a)
What's your name? It's Lancelot.
What's your quest? It's the Holy Grail.
What's your favorite color? It's blue.

9 / 10
¡GRACIAS!

También podría gustarte