Fundamentos de la Programación

#04 – Estructuras de Control (II)

En la última entrada de este curso, aprendimos a alterar el flujo del programa según las acciones del usuario. Eso nos permite crear programas más interesantes. Sin embargo, estos programas sólo se ejecutan una vez (en el caso de la calculadora, sólo podemos realizar una operación por ejecución). Por eso, ha llegado el momento de ver cómo hacer que los programas se ejecuten de manera continua (entre otras cosas), mediante el uso de las Estructuras de Iteración.

Estructuras de Iteración

En Python tenemos básicamente dos tipos de estructuras que nos permiten iterar (realizar una acción varias veces) nuestro código. La primera de ellas es el bucle While, de un uso más general y presente en la mayoría de los lenguajes de programación. La segunda se trata del bucle For-In.

Bucle While

El bucle While nos permite ejecutar una serie de líneas mientras se cumpla la condición indicada en el mismo. Veamos un ejemplo:

num = 0
while num < 5:
    print(num)
    num = num + 1
print("Fin")

Este código nos muestra por pantalla los número del 0 al 4. En primer lugar, iniciamos la variable num a 0, que es el primer número a mostrar. Veamos las iteraciones en más detalle para comprender bien el funcionamiento,

  • En la primera iteración, se comprueba si la condición (num < 5) se cumple. Como no es así, se procede a ejecutar el contenido del bucle while (cuidado con el sangrado de las líneas, el bucle sólo ejecutará aquellas más a su derecha e inmediatamente situadas a continuación del mismo).
  • En la segunda iteración, num tiene un valor de 1. Como sigue siendo inferior a 5, se vuelve a ejecutar el contenido del bucle. Lo mismo ocurre con la tercera, cuarta y quinta iteración.
  • En la sexta iteración, num tiene un valor de 5. Ahora ya no se cumple la condición, por lo que se salta el contenido del bucle y se ejecuta el print final.

¿Sois capaces de ver las posibilidades que este simple bucle nos da? Pero hay que tener cuidado cuando definamos un bucle.

¡Ojo con los bucles infinitos!

A veces pueden darse casos donde la condición de parada del bucle nunca se cumpla. En esos casos estamos ante lo que se conoce como un bucle infinito.

suma = 0
i = 1
while i <= 1000:
    suma += i
    i += 1
print(suma)

El anterior código calcula el sumatorio de los 1000 primeros números. En este caso, utilizamos la variable i como contador (es común utilizar las letras i, j y k como nombres para los contadores). El código no tiene muchos misterios, pero me gustaría destacar dos cosas:

  • se ha utilizado la condición de «igual o menor». Con sólo menor, el número 1000 no se habría sumado, dando con ello un resultado erróneo. Otra solución que podría pasarnos por la cabeza es cambiar el 1000 por un 1001 y utilizar sólo «menor que». Aunque el código funcionaría igual, no es recomendable, ya que al realizar una traza a simple vista, ese 1001 podría confundirnos, ya que su objetivo es calcular el sumatorio de los 1000 primeros números.
  • para la suma, se ha utilizado el operador +=. Es la primera vez que vemos este operador, y su resultado es sumarle a la variable de la izquierda el valor indicado en la derecha. También existen los operadores -=, *= y /=.
#ESTO:
var = var + 1
#EQUIVALE A:
var += 1

Bucle For

El bucle For-In puede considerarse una simplificación del while, ya que mientras este último sirve para cualquier caso, el for-in sólo tiene un uso. Básicamente, su funcionamiento es que para todo elemento en un conjunto, realiza lo siguiente. Veamos el siguiente ejemplo, que mostraría por pantalla los números 1, 2 y 3.

for num in [1, 2, 3]:
    print(num)

Aunque en este caso los elementos del conjunto son números, funcionaría con cualquier tipo de variables.

Este tipo de bucles suelen complementarse con la función range. Esta función resulta muy útil, ya que genera una lista de números situados entre dos valores.

for n in range(1,10):
    print n

El anterior fragmento de código mostraría por pantalla los números del 1 al 9. Espera… ¿acaba en 9? Pues sí, range devuelve una lista desde un número hasta otro, por lo que el límite superior nunca se genera. Ojo al usarla.

Sentencia Break

Veamos el siguiente código:

num = int(input("Introduce un número: "))
primo = True
div = 2

while div < num:
    if num % divisor == 0:
       primo = False
    div += 1

if primo:
    print("El número es primo")
else:
    print("El número no es primo")

Este programa comprueba si un número introducido por el usuario es primo o no. Imaginemos que el número introducido es 1000000000000. Está claro que no es primo, y con la primera iteración ya se conoce el resultado. Sin embargo, hasta que no termine todas las iteraciones, no se le indicará el resultado obtenido al usuario, y, además, estaremos utilizando tiempo de cálculo inútilmente. Para evitar este tipo de casos, existe la sentencia break. Su funcionamiento es muy simple: cuando es ejecutada, interrumpe la ejecución del bucle en el que se encuentra. Simplemente con una línea más, podemos ahorrar bastante tiempo de cálculo. El anterior código quedaría así:

num = int(input("Introduce un número: "))
primo = True
div = 2

while div < num:
    if num % divisor == 0:
       primo = False
       break
    div += 1

if primo:
    print("El número es primo")
else:
    print("El número no es primo")

Pues con esto terminamos de ver las distintas Estructuras de Control que hay en Python. Poco a poco vamos pudiendo hacer programas cada vez más interesantes. Ahora, te propongo que hagas los ejercicios 3 y 4, y pongas a prueba con ellos tus conocimientos (recuerda que para ello puedes valerte del intérprete online OnlineGDB.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

back to top