Tema 5. Operadores de Iteración

Explicación del uso de Operadores de Iteración en Python 3.

El bucle while

La idea del bucle while es: mientras la condición sea cierta, seguimos realizando las líneas del interior del bucle. Una vez la condición deja de ser verdadera, salimos del bucle.

Su estructura es la siguiente

inicialización de la variable de la condición
while condición verdadera:
  instrucción 1
  instrucción 2
  .
  .
  .
  instrucción n

Observación. Vuelven a aparecer tanto los dos puntos después de la condición como la indentación previa a las instrucciones que se encuentran dentro del bucle.

¡Cuidado! Hay que tener en cuenta que alguna de las instrucciones que se encuentran dentro del bucle while tiene que modificar a la variable de la condición. De lo contrario, si la variable de la condición nunca es modificada, la condición nunca llegará a ser falsa y el bucle no acabaría nunca, con lo que pasaría a convertirse en lo que se denomina bucle infinito.

Una de las utilidades de un bucle while es evitar el copia y pega de algunas funciones. Por ejemplo, si queremos impirmir los primeros 10 números naturales, en vez de copiar 10 veces la función print(), una para cada número, lo podemos hacer todo con un bucle while:

Las variables i, j y k son utilizadas como estandar en los bucles como índices.

i = 1 # Inicializamos la variable
while i <= 10: # Queremos que i como mucho valga 10
  print(i) # Imprimimos los números
  i += 1 # Incrementamos una unidad en cada iteración

EJERCICIO 1:

Con un bucle while, dado un string vamos a recorrer una frase y contar el número total de vocales.

Comando break

break es muy útil si dada una condición queremos que se salga inmediatamente de un bucle while. Veámoslo con un ejemplo:


Ejemplo 1

La sucesión de Fibonacci es una sucesión infinita que se caracteriza porque cada término es la suma de los dos anteriores. Algunos de sus términos son 1, 1, 2, 3, 5, 8, 13...

Supongamos que queremos que se nos impriman los 20 primeros términos de esta serie. Por tanto, necesitaremos por un lado los términos de la serie y, por otro, los índices que ocupan.

Ejercicio. Pensad en cómo podríais resolver este problema en el cual se exige que en algún momento utilicéis el comando break.

Ejercicio. El ejemplo anterior se podría haber hecho perfectamente sin necesidad de utilizar la función break. Pensad en cómo modificaríais el código anterior para obtener el mismo resultado únicamente haciendo uso de un bucle while.


EJERCICIO 2:

Con un bucle while, dados dos números enteros proporcionados por el usuario, vamos a encontrar el primer número divisible entre 2, 3 y 5, siempre que sea posible, que se encuentre dentro del intervalo formado por los dos números dados por el usuario (ambos extremos también incluidos).

Combinación while ... else

Podemos combinar un bucle while con el operador else para ejecutar un bloque de código una vez la condición del while haya dejado de ser verdadera.

EJERCICIO 3:

Vamos a hacer que el usuario introduzca números por teclado e ir sumándolos. Cuando el usuario introduzca 0 saldremos del bucle while. Al salir del bucle, con un else mostraremos la suma.

EJERCICIO 4:

Imaginemos las letras del abecedario ordenadas y dispuestas en círculo. Es decir, a la derecha de la A está la B, luego la C, y así sucesivamente hasta la Z. A la derecha de la Z, se encuentra de nuevo la letra A.

Vamos a hacer que el usuario introduzca un valor entero n, que se corresponderá con la rotación que llevará a una determinada letra n posiciones a su derecha. Por ejemplo, si la rotación es 4, entonces la A pasará a la E, la B a la F, ..., la Y a la C y la Z a la D.

Con un bucle while, vamos a construir el programa que desplazará las letras n posiciones a la derecha.

PISTA: Investiga las funciones chr() y ord() para pasar del valor ASCII de un caracter al caracter y viceversa.

Bucle for

La idea del bucle for es: para todos los elementos de la clave, seguimos realizando las líneas del bucle. Una vez nos quedemos sin elementos, salimos del bucle.

Su estructura es la siguiente

Observación. Vuelven a aparecer tanto los dos puntos después de la clave como la indentación previa a las instrucciones que se encuentran dentro del bucle.

Un ejemplo del uso de un bucle for es el de recorrer todos los caracteres de un string:

Lo que hace el anterior chunk de código es imprimir todos y cada uno de los caracteres, a los que identificamos por c, que se encuentran en el string s.

EJERCICIO 5:

Vamos a recorrer un string dado con un bucle for y lo vamos a devolver impreso del revés.

Función range()

La función range() tiene 3 posibles argumentos:

  • start

  • stop

  • step

Veremos el uso de la función range() con un ejemplo. Recuperemos el ejemplo en que queríamos imprimir los 10 primeros números naturales:

Observación. Cosas a tener en cuenta cuando usamos la función range():

  • El elemento indicado en el argumento stop nunca se incluye.

  • Si no indicamos ningún elemento en el argumento start, por defecto éste vale 0.

  • El valor por defecto del argumento step es 1.

Por lo tanto, obtendríamos el mismo resultado que en el ejemplo anterior ejecutando las siguientes líneas de código:

¿Y si quisiéramos imprimir los 10 primeros números naturales invirtiendo el orden? Pues, con un bucle for, lo haríamos del siguiente modo:

EJERCICIO 6:

Con un bucle for, dada una progresión aritmética de números enteros indicada por el usuario (nos dará el primer término, la diferencia y la cota), vamos a calcular la suma de los elementos incluyendo la cota.

Un ejemplo de progresión aritmética es: 0, 2, 4, 6, 8, ... donde el primer término es 0 y la diferencia entre sus términos es 2.

Comando continue

El comando continue es similar a break, pero en vez de salir del bucle, lo que hace es interrumpir la iteración en la que se encuentra y empezar la siguiente iteración.


Ejemplo 2

Supongamos que queremos que se nos impriman todos los números entre 0 y 100 que no son ni divisibles entre 2 ni entre 5.

Ejercicio. Pensad cómo podríais resolver este problema en el cual se exige que en algún momento utilicéis el comando continue.


EJERCICIO 7:

Con un bucle for, vamos a recorrer un string dado y vamos a imprimir todas las letras salvo por la letra indicada por el usuario.

EJERCICIO 8:

Dado un string, con un bucle for vamos a imprimirlo sin vocales y vamos a salir del bucle si la letra que indique el usuario aparece más de n veces, número que también nos proporcionará el usuario.

Bucles anidados

Se trata de bucles dentro de bucles


Ejemplo 3

Vamos a calcular las tablas de multiplicar de los números del 1 al 10 anidando dos bucles for:


REPASO:

Last updated