Programación en Python - Control de Flujo (IF - WHILE - FOR)
Hola participantes. ¿Cómo se han sentido con el Curso? Recuerden que pueden dejar su comentarios o sugerencias al final del post. Hoy avanzaremos en un tema muy importante: Control de Flujo. Hasta los momentos hemos hecho programas lineales, donde se ejecutan instrucciones de forma secuencial. Aplicaciones desarrolladas de esta forma son de poca utilidad, ya que si deseamos tomar una decisión respecto a un dato, por los momentos, no podríamos hacerlo.
Los condicionales nos permiten dirigir el flujo del programa al evaluar una condición; haciendo que se comporte de una forma u otra, que ejecute un segmento de código o no. Así que para darle más vida a nuestros programas introduciremos condicionales en él. Qué te parece si estudiamos el primero de ellos.
La forma más simple de evaluar una condición es con IF (Si inglés) seguido de la condición a evaluar y, para finalizar, dos puntos (:). Posteriormente debajo, en la siguiente línea e indentado, la instrucciones a ejecutar si se cumple la condición. Un ejemplo sería el siguiente:
# -*- coding: utf-8 -*- tu_web = "www.tratadotecnologico.com.ve" if tu_web == "www.tratadotecnologico.com.ve": print("Tienes buen gusto")Analizemos este código:
- Primero creamos una variable llamada tu_web a la cual se le asigno el string de tu web favorita (www.tratadotecnologico.com.ve).
- Luego se evalua el condicional de esta forma: Si tu_web es igual al texto "www.tratadotecnologico.com.ve" haz lo que sigue.
- Lo que sigue es la impresión en pantalla del texto "Tienes buen gusto". Note que esta instrucción esta indentada (tabulada); esto se ha hecho de forma intencional y es la forma que tiene python de saber que esa instrucción pertenece a ese IF.
Ahora probemos mostrar otro texto si no se cumple la condición:
# -*- coding: utf-8 -*- tu_web = "www.tratadotecnologico.com.ve" if tu_web == "www.tratadotecnologico.com.ve": print("Tienes buen gusto") if not tu_web == "www.tratadotecnologico.com.ve": print("Te recomiendo que visites www.tratadotecnologico.com.ve")
Fíjate que ahora se agrega otro condicional en la que se evalúa si se cumple la condición: Si tu_web no es igual al texto "www.tratadotecnologico.com.ve" haz lo siguiente: Y lo siguiente es imprimir un texto de recomendación a nuestro blog.
Esto esta bien, pero cuando se evalúan dos posibles condiciones normalmente se utiliza la combinación IF - ELSE. Esto es: Si (IF) se cumple una condición haz esto Sino (ELSE) haz esto otro. Modifiquemos el código anterior para adaptarlo a esta nueva estructura:
# -*- coding: utf-8 -*- tu_web = "www.tratadotecnologico.com.ve" if tu_web == "www.tratadotecnologico.com.ve": print("Tienes buen gusto") else: print("Te recomiendo que visites www.tratadotecnologico.com.ve")
Estudiemos éstas instrucciones:
- Ya sabemos que en el if se evalúa que la variable tu_web sea igual al texto "www.tratadotecnologico.com.ve" y si esto es cierto se muestra el mensaje: "Tienes buen gusto".
- La siguiente sentencia else indica que sino se cumple la condición anterior ejecuta las instrucciones de abajo.
# -*- coding: utf-8 -*- numero = 0 if numero > 0: print("El número es positivo") elif numero < 0: print("El número es negativo") else: print("El número es cero")
Nótese que ahora son tres evaluaciones:
- Si el número es mayor a cero, se imprime el texto "El número es positivo".
- Sino si el número es meno a cero, se imprime: "El número es negativo".
- Sino se muestra: "El número es cero."
BUCLE WHILE
Hemos visto como lo condicionales nos permiten ejecutar cierto fragmento de código dependiendo de la evaluación de una condición; pero cómo haríamos si deseamos repetir ciertas líneas de instrucción mientras una condición se cumpla. La respuesta es: Usando instrucción de repetición (Bucles) como el WHILE y FOR.
El WHILE (mientras) nos permite ejecutar un segmento de código mientras una condición evaluada se cumpla. Como ejemplo veamos el siguiente código:
# -*- coding: utf-8 -*- edad = 0 while edad < 18: edad = edad + 1 print("Tu edad es "+str(edad))Este ejemplo sencillo nos sirve para ilustrar el funcionamiento del WHILE.
- Primero creamos una variable llamada edad la cual se inicializa con cero.
- Posteriormente se coloca la instrucción while con la evaluación de la condición edad menor a 18. Esta condición pregunta si la variable edad es menor al 18. Si esto se cumple se ingresa al segmento de código debajo de ella.
- Luego se introduce una razón de cambio de la variable que es evaluada. E este caso sumar uno a edad.
- Finalmente se imprime en consola un texto indicando la edad.
- Una vez se ejecuta la última instrucción dentro del bucle, se regresa al inicio a evaluar nuevamente la condición y si se cumplir se vuelve a correr las segmento de código interno.
- Si ejecutamos este código mostrará el texto 18 veces, iniciando en la edad 1 hasta la 18.
- Es importante tener en cuenta la razón de cambio dentro del bucle, ya que si no se cambia el valor de la variable a evaluar el bucle se ejecutará infinitamente. Por ejemplo, si quitamos la línea que suma uno a la variable edad, ella siempre valdría cero y cada vez que se evalúe la instrucción se cumplirá que cero es menor que dieciocho, haciendo que se corra para siempre (al menos que cierres el programa o apagues el PC).
# -*- coding: utf-8 -*- while True: palabra = input("Para terminar teclee 'salir' > ") if palabra == "salir": break print(palabra)Estudiemos este caso: El while True es una forma de decir ejecútate siempre. Entonces si es así, cómo haremos para que se termine, pues justamente después que se solicita que el usuario teclee una palabra, lo evaluamos con if con el string "salir", si esto se cumple se ejecuta la instrucción break. Es ésta instrucción la que rompe el bucle y lo fuerza a salir del while.
Otra forma de hacer esto es:
# -*- coding: utf-8 -*- terminar = False while not terminar: palabra = input("Para terminar teclee 'salir' > ") if palabra == "salir": terminar = True print(palabra)Si corremos este código obtendremos el mismo resultado, sin embargo nos ha permitido presentar la utilidad de la instrucción break dentro las sentencias de repetición. Otra instrucción que se usa dentro de los bucles es el continue; ésta no nos permite romper y salirse del bucle, pero sí pasar a la siguiente iteracción. Modifiquemos un poco el ejemplo anterior (El de mostrar las edades del 1 al 18) para mostrar solo las edades impares.
# -*- coding: utf-8 -*- edad = 0 while edad < 18: edad = edad + 1 if edad % 2 == 0: continue print("Tu edad es "+str(edad))La diferencia de este código al anterior es que antes de mostrar el texto se evalúa la condición si el residuo de edad es igual a cero (en otras palabras esto verifica si el valor de edad es par), si esto se cumple entonces se ejecuta continue que no es más que indicarle a python que no siga con las instrucciones que siguen abajo y que pase a la siguiente iteracción.
BUCLE FOR
El for en Python es diferente a otros lenguajes de programación como C/C++. Acá esta pensado para iterar sobre una secuencia (listas, tuplas), y como tal intenta facilitar su uso para ese fin. La mejor forma de verlo es haciéndolo:
# -*- coding: utf-8 -*- cuidades = ["Caracas", "Bogotá", "Quito", "Lima", "Santiago", "Buenos Aires"] for ciudad in ciudades: print(ciudad)Como se digo anteriormente la sentencia for en python está pensado para iterar sobre secuencias. En el ejemplo anterior podríamos interpretar como para cada ciudad en ciudades hacer. En este caso lo que ocurre es que en cada iteracción se toma un dato de la lista cuidades y se asigna a la variable ciudad, para que luego dentro del for se manipule ese dato extraido. Acá simplemente se ha impreso el valor. Al ejecutar este pequeño código obtendremos la impresión de cada ciudad: Caracas, Bogotá, Quito, Lima, Santiago, Buenos Aires.
EJERCICIOS
Llegó el momento de ejercitarnos. La resolución de estos ejercicios los podrás encontrar acá.
Ejercicio Nro. 1: Crear un programa que solicite al usuario dos número e indique cual de los dos es el mayor.
# -*- coding: utf-8 -*- #el_mayor.py num1 = float(input("Ingrese el primer número: ")) num2 = float(input("Ingrese el segundo número: ")) if num1 > num2: print("El primer número es mayor que el segundo") elif num1 < num2: print("El segundo número es mayor que el primero") else: print("Ambos número son iguales")
Explicacion:
- Se crean dos variables num1 y num2 a las cuales se le asigna el valor que ingresa el usuario mediante la instrucción input(). El dato ingresado se formatea a float para tener el dato como un valor número real.
- Con los condicionales se evalúa dos condiciones: Un primer if para saber si num1 es mayor a num2; un elif para evaluar si num2 es mayor a num1. Finalmente un else cómo condición final (sino se cumplen las dos condiciones anteriores).
# -*- coding: utf-8 -*- #juego_de_adivinanza.py numero_adivinar = 55 intentos = 3 while True: num = int(input("Intente adivinar el número: ")) if num == numero_adivinar: print("¡Felicitaciones lo ha logrado!") break elif num > numero_adivinar: print("Error: Este número es mayor al que debe adivinar") else: print("Error: Este número es menor al que debe adivinar") intentos = intentos - 1 if intentos == 0: print("Ha usado todos sus intentos. Mejor suerte a la próxima") breakExplicación:
- Iniciamos el programa creando dos variables numero_adivinar e intentos. La primero es el numero que el usuario debe adivinar y la segunda la cantidad de intentos que tiene el usuario para adivinar.
- Dentro de un while que se ejecutará continuamente se solicita un número al usuario y se almacena en la variable num.
- La variable se evalúa para saber si coincide con el valor de numero_adivinar; si esta condición se cumple se muestra un mensaje de felicitaciones y se rompe el bucle con break. De lo contrario se evalúa otras dos condiciones para saber si el dígito que ingreso es mayor o menor al número a adivinar.
- Por último se disminuye en uno la variable intentos (intentos = intentos - 1) para descontar el intento actual y se consulta si la variable alcanzó el valor cero, es decir, si ya realizó tres intentos; de ser así se muestra un mensaje indicando que no lo logró y se rompe el bucle con break.
# -*- coding: utf-8 -*- #yo_estudio.py asignaturas = [ {"catedra":"Matemática", "nota": 18}, {"catedra":"Física","nota": 16}, {"catedra":"Química","nota": 19}, {"catedra":"Inglés","nota": 17}, {"catedra":"Historia","nota": 16}, {"catedra":"Biología","nota": 18}, ] for asign in asignaturas: print("Yo cursé "+str(asign["catedra"])+" y obtuve "+str(asign["nota"])+ "pts.")Explicación:
- Lo primero que se hace es crear una lista cuyos datos será un diccionario que tiene la información de una cátedra y su nota. Por ejemplo la cátedra Matemática y su nota 18. Así ocurre con las otras materias.
- Luego con un for iteramos la lista extrayendo uno a uno cada diccionario asignandolo a la variable asign.
- Posteriormente muestro el texto haciendo mención a cada clave del diccionario para obtener su valor asociado. Esto se logra haciendo asign["catedra"] para obtener la cátedra y asign["nota"] para obtener su nota.
Con estos ejemplos terminamos este capítulo. Espero les haya gustado. Si tienen alguna dudan puede hacérmelo saber mediante un comentario. Hasta pronto.