Bucles en Python
Bienvenido a una nueva entrega de nuestro tutorial. Espero que hayas practicado todo lo que hemos visto hasta ahora. El tema de hoy son los bucles. En todo programa suele hacer falta que un determinado conjunto de instrucciones se ejecute más de una vez. En ese caso no es adecuado multiplicar las líneas del programa copiando y pegando esa secuencia, sino que es mucho más eficaz usar una estructura de control que nos permite decirle al intérprete que queremos repetir una parte del programa varias veces. Dependiendo de lo que necesitemos, tenemos dos estructuras de bucle en Python: while y for.
Bucle whileEse tipo de bucle repite un conjunto de instrucciones mientras se cumpla una determinada condición que se evalúa al principio de cada ejecución. Es evidente que las instrucciones del interior del bucle tendrán que hacer algo que pueda cambiar esa condición hasta que en algún momento deje de cumplirse. En caso contrario tendremos un bucle infinito y el programa no terminará nunca su ejecución.
Un ejemplo de uso de este bucle es para comprobar que el usuario ha introducido un valor dentro de un rango concreto:
while ((entrada != "s") and (entrada != "n"): entrada=raw_input("eres mayor de edad? (s-n) ") if (entrada=="s"): print("El usuario es mayor de edad") else: print("El usuario es menor de edad")
Una de las características del bucle while es que no está fijado previamente el número de veces que se ejecutan las instrucciones del bucle. Se ejecutarán todas las que sean necesarias mientras se cumpla la condición. Hay dos palabras reservadas que se usan dentro de un bucle, se trata de break y continue.
Continue hace que pasemos de nuevo al principio del bucle aunque no se haya terminado de ejecutar el ciclo anterior.
edad = 0 while edad < 18: edad = edad + 1 if edad % 2 == 0: continue print ("Felicidades, tienes " + str(edad))
En este ejemplo comprobamos dentro del bucle si la edad es par, saltando entonces a la siguiente iteración. En este caso sólo se mostrará el mensaje cuando la edad sea impar.
Por su parte break hace que salgamos del bucle directamente sin necesidad de volver a evaluar la condición y aunque siga siendo cierta.
while True: entrada = raw_input("> ") if entrada == "adios": break else: print entrada
Bucle for...inLos bucles for, a diferencia de otros lenguajes de programación, tienen una estructura muy simple y potente. Son una forma genérica de iterar sobre una secuencia. Podemos usar como secuencia listas y tuplas o generar una para ejecutar el bucle un número determinado de veces. La diferencia con el bucle while es que en este caso las instrucciones dentro de él se ejecutarán un número concreto de veces, que será el mismo que el número de elementos que tenga la secuencia. Veamos un ejemplo:
secuencia = [“uno”, “dos”, “tres”] for elemento in secuencia: print (elemento)
En este ejemplo la instrucción print se ejecutará tantas veces como elementos haya en la lista, y en cada iteración la variable elemento tomará el valor de cada uno de los elementos de la lista secuencia.
¿Como se hace para iterar sobre una serie de números naturales consecutivos? por ejemplo de 1 a 20. Para ello usaremos la función range(). Esta función genera una lista con una progresión aritmética de números naturales. Si le pasamos un único parámetro a generará una lista que va desde 0 hasta n-1. Si le damos dos generará una lista desde el primero hasta el segundo menos uno. Si le damos tres, usará el tercero como incremento para generar los elementos de la lista.
>>> range(10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> range(5, 10) [5, 6, 7, 8, 9] >>> range(0, 10, 3) [0, 3, 6, 9] En el siguiente ejemplo el programa imprimirá los números de 0 a 5 cada uno en una línea. for i in range(6): print i Podemos usar una cadena de caracteres como secuencia, de forma que cada iteración del bucle tomaremos una letra de la cadena. for char in 'ABCD': print char
En caso de que necesitemos iterar sobre una lista y a la vez tener el índice de cada posición de la lista usaremos la función enumerate() que devuelve dos valores: la posición y el contenido de la lista.
secuencia = [“manzanas”, “peras”, “platanos”] for posicion, elemento in enumerate(secuencia): print (posicion, elemento)
El ejemplo mostrará al lado de la posición el valor correspondiente. Existen algunos trucos más con los bucles for, pero los dejaremos para situaciones concretas donde tenga sentido usarlas.
Ya te he mostrado todas las estructuras de control básicas que hay en Python. Supongo que echas de menos alguna de las que traen otros lenguajes como switch. En Python no existe pero se puede implementar con un diccionario, así que dejo este tema abierto para que pienses cómo hacerlo o investigues un poco.
Saludos y hasta el próximo tutorial.