Show code cell source
import os
# Por precaución, cambiamos el directorio activo de Python a aquel que contenga este notebook
if "PAD-book" in os.listdir():
os.chdir(r"PAD-book/Laboratorio-Computacional-de-Analytics/S1 - Bienvenida, estructuras de datos y de control/S1.TU3/")
Estructuras de control: condicionales y ciclos#
En programación, las estructuras de control operan como señales que determinan si ejecutar o no ciertas operaciones y cuando hacerlo. Cuando programamos definimos este tipo de reglas sobre cómo se ejecuta un procedimiento. A estas reglas las llamamos condicionales y son parte fundamental de todo programa.
Por otro lado, existen las estructuras de control llamadas ciclos. Estas son especialmente útiles para realizar código repetitivo de manera eficiente, pues mediante una instrucción, los ciclos permiten ejecutar una cantidad arbirtraria de repeticiones de algún bloque de código de interés. Utilizar ciclos para llevar a cabo estas acciones repetitivas disminuye la cantidad de instrucciones a usar, el tamaño del programa y el tiempo de programación.
En este tutorial establecemos nociones fundamentales sobre el uso de estructuras de control en programación, para integrarlos en procesos de análisis de datos.
Requisitos#
Para desarrollar este tutorial necesitarás:
Declarar y utilizar diferentes tipos de variables.
Declarar y utilizar diferentes tipos de estructuras de datos.
Objetivos#
Al final de este tutorial podrás:
1. Utilizar los tres tipos de operadores más frecuentes para construir expresiones lógicas.
2. Implementar condicionales simples y compuestos.
3. Implementar diferentes tipos de ciclos según su condición de parada.
1. Expresiones lógicas#
Una expresión lógica es una afirmación que al evaluarse retorna un valor lógico (True
o False
). Utilizamos tres tipos de operadores para crear expresiones lógicas:
Operadores relacionales
Operadores lógicos
Operadores de pertenencia
1.1. Operadores relacionales#
Utilizamos este tipo de operadores para comparar dos valores. En la siguiente tabla podrás ver los operadores con su respectiva descripción.
|
retorna |
|
retorna |
|
retorna |
|
retorna |
|
retorna |
|
retorna |
Evaluemos las siguientes cuatro condiciones:
1 == 1
True
2 == "2"
False
"Laura" != "Julio"
True
4 <= 1
False
1.2. Operadores lógicos#
Utilizamos este tipo de operadores para construir expresiones lógicas compuestas, las cuales se componen de más de una condición. Existen los siguientes tres operadores lógicos:
|
retorna |
|
retorna |
|
retorna la negación de la condicion evaluada |
Evaluemos las siguientes cuatro condiciones:
2 > 1 and "123" == "456"
False
2 > 1 or "123" == "456"
True
not 1 == 1
False
("1" == "2" or not 5 != 5) and 3 >= 3
True
1.3. Operadores de pertenencia#
También existen operadores que nos permiten determinar si un elemento pertenece a una estructura de datos. Existen los siguientes dos operadores de pertenencia:
|
Retorna |
|
Retorna |
Evaluemos las siguientes cinco condiciones:
lista = [1,2,3,4]
1 in lista
True
2 not in lista
False
dic = {1:"a",2:"b"}
1 in dic
True
"a" in dic
False
"a" in dic.values()
True
2. Estructuras de control: condicionales#
Ahora que hemos entendido cómo funcionan las expresiones lógicas y los diferentes tipos de operadores, procedamos con el concepto de condicionales.
2.1. if
#
En un condicional simple se revisa la condicion especificada por el if
y se ejecuta un bloque de código si esta es verdadera. De lo contrario, se omite el bloque de código que se encuentra dentro del if
. Idealmente, la condición debe retornar un valor lógico (True
o False
).
La sintaxis en Python es la siguiente:
if condicion:
bloque_de_codigo
En este caso, si la condición retorna True
, se ejecutará el bloque de código.
Nota: la indentación es la única manera en la que Python identifica cuáles líneas de código van dentro de la estructura de control.
Ejemplo 1#
En este ejemplo vamos a verificar si el número 5 es mayor al número 2. Si esta condición es cierta, imprimiremos "5 es mayor a 2"
en la consola, de lo contrario no ocurrirá nada.
if 5 > 2:
print("5 es mayor a 2")
5 es mayor a 2
Ejemplo 2#
Un deportista tiene como objetivo ganar la medalla de oro en los juegos olímpicos. En caso que no haya cumplido con su objetivo, debemos decirle "No lograste tu objetivo."
.
objetivo = "oro"
medalla_obtenida = "plata"
condicion = medalla_obtenida != objetivo
if condicion:
print("No lograste tu objetivo.")
No lograste tu objetivo.
2.2. if
- else
#
En un condicional compuesto con estructura if
- else
, se revisa la condicion especificada por el if
y se ejecuta el bloque de código correspondiente si esta es verdadera. De lo contrario, se ejecuta el bloque de código que se encuentra dentro del else
.
La sintaxis en Python es la siguiente:
if condicion:
bloque_de_codigo_1
else:
bloque_de_codigo_2
En este caso, si la condición es verdadera, se ejecutará el bloque de código 1. Si, de lo contrario, la condición es falsa, se ejecutará el bloque de código 2.
Ejemplo 3#
Para poder entrar a una película de terror hay que tener al menos 18 años. Por lo tanto, determinemos si una persona cumple o no con la condición. De este modo, si la persona tiene al menos 18 años imprimiremos "¡Puede entrar a la película!"
, y de lo contrario imprimiremos "¡No puede entrar a la película!"
.
edad = 17
if edad >= 18:
print("¡Puede entrar a la película!")
else:
print("¡No puede entrar a la película!")
¡No puede entrar a la película!
Ejemplo 4#
En este ejemplo determinaremos si una persona se encuentra en la lista de alumnos de una clase. Para esto vamos a crear una lista de los alumnos de la clase y luego vamos a verificar si el alumno ingresado pertenece o no a la clase. Si el alumno pertenece, imprimiremos "El alumno pertenece a la clase"
, si de lo contrario no pertenece, lo agregaremos a la clase e imprimiremos "El alumno no pertenecía a la clase, pero ha sido añadido"
. Finalmente, imprimiremos todos los alumnos de la clase.
alumnos = ["Jorge","Laura","Juliana","Mario"]
nombre_ingresado = "Juan"
if nombre_ingresado in alumnos:
print("El alumno pertenece a la clase.")
else:
alumnos.append(nombre_ingresado)
print("El alumno no pertenecía a la clase, pero ha sido añadido.")
print() # Este print vacio se escribe con el objetivo de generar un espacio entre las dos líneas impresas.
print("Los alumnos de la clase son: " + str(alumnos))
El alumno no pertenecía a la clase, pero ha sido añadido.
Los alumnos de la clase son: ['Jorge', 'Laura', 'Juliana', 'Mario', 'Juan']
2.3. if
- elif
- else
#
En un condicional compuesto con estructura if
- elif
- else
, se empieza revisando la primera condición especificada por el if
, si esta es verdadera se ejecuta el bloque de código correspondiente. Si, de lo contrario, la condición es falsa, se procede a revisar las condiciones especificadas por los elif
. Cuando se encuentra la primera condición verdadera se ejecuta el bloque de código especificado. Si, por el contrario, no se encuentra ninguna condición verdadera, se ejecuta el bloque de código especificado por el else
. Es importante aclarar que se revisarán las condiciones en orden y solo se ejecutará el bloque de código de la primera condición verdadera.
La sintaxis en Python es la siguiente:
if condicion_1:
bloque_de_codigo_1
elif condicion_2:
bloque_de_codigo_2
elif condicion_3:
bloque_de_codigo_3
else:
bloque_de_codigo_4
En este caso, si la condición 1 es verdadera, se ejecutará el bloque de código 1. Si, por el contrario, la condición 1 es falsa y la condición 2 es verdadera, se ejecutará el bloque de código 2. Ahora, en caso de que las anteriores dos condiciones sean falsas y la condición 3 sea verdadera, se ejecutará el bloque de código 3. Finalmente, si las tres condiciones son falsas, se ejecutará el bloque de código 4.
Ejemplo 5#
Juan necesita cambiar la contraseña de su correo electrónico. Su nueva contraseña debe cumplir con las siguientes dos condiciones:
Tener una longitud de al menos 8 caracteres.
Ser diferente a la contraseña actual.
Para esto crearemos una contraseña y verificaremos si cumple con las condiciones.
contraseña_actual = "Juanito2020"
contraseña_nueva = "Juanito2021"
if len(contraseña_nueva) < 8 :
print("La contraseña no es valida")
elif contraseña_nueva == contraseña_actual:
print("La contraseña no es valida")
else:
print("La contraseña sí es valida")
La contraseña sí es valida
Ejemplo 6#
En este ejemplo vamos a determinar si una persona es un niño (0 a 12 años), un adolescente (13 a 18 años), o un adulto (19 o más años).
edad = 15
if edad>=0 and edad<=12:
print("¡Es un niño!")
elif edad>=13 and edad<=18:
print("¡Es un adolescente!")
elif edad>=19:
print("¡Es un adulto!")
¡Es un adolescente!
3. Estructuras de control: ciclos#
Estructuras de datos como las tuplas, las listas, los diccionarios y las cadenas de carácteres, pueden ser recorridas secuencialmente (iterables). En estas estructuras, cada uno de los elementos se puede asociar con un índice en particular, por medio del cual puede ser referenciado. Si quisieramos visualizar el valor de todas las posiciones de una estructura de datos, podríamos hacerlo imprimiendo directamente cada posición.
Nota: una cadena de caracteres se puede ver como una lista en la que sus elementos son cada uno de los caracteres que la componen.
cadena = "Hola mundo"
print("La posición 1 de la cadena es: ", cadena[0])
print("La posición 2 de la cadena es: ", cadena[1])
print("La posición 3 de la cadena es: ", cadena[2])
print("La posición 4 de la cadena es: ", cadena[3])
print("La posición 5 de la cadena es: ", cadena[4])
print("La posición 6 de la cadena es: ", cadena[5])
print("La posición 7 de la cadena es: ", cadena[6])
print("La posición 8 de la cadena es: ", cadena[7])
print("La posición 9 de la cadena es: ", cadena[8])
print("La posición 10 de la cadena es: ", cadena[9])
La posición 1 de la cadena es: H
La posición 2 de la cadena es: o
La posición 3 de la cadena es: l
La posición 4 de la cadena es: a
La posición 5 de la cadena es:
La posición 6 de la cadena es: m
La posición 7 de la cadena es: u
La posición 8 de la cadena es: n
La posición 9 de la cadena es: d
La posición 10 de la cadena es: o
Este proceso resulta muy repetitivo, tedioso y poco eficiente, ya que implica escribir la misma línea de código varias veces. Para evitar esto, en programación se han diseñado otras estructuras de control llamadas ciclos o bucles, las cuales se utilizan para repetir tareas similares de forma secuencial. Estas estructuras son los ciclos for
y while
, y aunque ambos pueden servir en la mayoría de casos, cada una tiene particularidades que vale la pena conocer.
3.1. for
#
Un ciclo for
es una estructura de control que nos permite repetir un bloque de código varias veces. De esta forma, podemos recorrer los objetos de una estructura iterable con los índices de las posiciones u obteniendo directamente el objeto de cada posición.
La sintaxis en Python es la siguiente:
for indices in estructura_iterable:
bloque_de_codigo
Para todos los índices que hay en la estructura iterable se ejecuta el mismo bloque de código. En este caso, la variable indices
nos sirve como iterador sobre la estructura de datos estructura_iterable
.
Ejemplo 7#
Vivian quiere decorar el cuarto de su novio con el mensaje "Te quiero"
. Para que sea visible, necesita imprimir su mensaje letra por letra, para que cada letra ocupe una hoja.
for caracter in "Te quiero":
print(caracter)
T
e
q
u
i
e
r
o
Ejemplo 8#
Para su tarea de geografía, Santiago necesita imprimir los nombres de los países que va a exponer, los cuales estan en la lista paises
.
paises = ['Japon', 'China', 'España', 'Estados Unidos', 'Indonesia']
for pais in paises:
print(pais)
Japon
China
España
Estados Unidos
Indonesia
El ciclo for
con la función range
#
La función range
devuelve una secuencia de números que, predeterminadamente, inicia en cero, termina una unidad antes del número que se especifica como parámetro, y avanza de uno en uno. En caso de que queramos cambiar el inicio y la magnitud del paso debemos tener en cuenta que debemos organizar los parámetros de la siguiente manera:
range(inicio, fin, paso)
for i in range(2,9,2):
print(i)
2
4
6
8
Retomando el Ejemplo 8, con el uso de range
en un ciclo for
podríamos imprimir los elementos de la lista de países de Santiago consultándolos.
for indice in range(len(paises)):
print (paises[indice])
Japon
China
España
Estados Unidos
Indonesia
Iteración de diccionarios#
En Python los ciclos son útiles para explorar y manipular cada elemento de los diccionarios. Por lo cual, es preciso ilustrar cómo podemos recorrer sus valores, sus llaves y ambos elementos a la vez.
La sintaxis para recorrer las llaves de un diccionario es la siguiente:
for llave in diccionario:
bloque_de_codigo
De manera alternativa podemos utilizar el método keys
.
for llave in diccionario.keys():
bloque_de_codigo
Para recorrer los valores de un diccionario utilizamos el método values
.
for valor in diccionario.values():
bloque_de_codigo
Para recorrer los valores y las llaves de un diccionario al tiempo utilizamos el método items
.
for llave,valor in diccionario.items():
bloque_de_codigo
Ejemplo 9#
Jorge tiene un directorio de contactos en el que guarda la profesión, el correo electronico y el número de celular de cada persona que conoce.
directorio = {"Rocio" : ["Carpintero", "rocio@gmail.com", 3158534775],
"Camilo" : ["Cerrajero", "camilo@yahoo.com", 3129543435],
"Ariadna" : ["Plomero", "ariadna@outlook.com", 2593238695],
"Diego" : ["Cerrajero", "diego@gmail.com", 2045834458],
"Juan Felipe": ["Electricista", "juanfelipe@yahoo.com", 1423854033]}
Al llegar del trabajo, Jorge se dio cuenta que habia olvidado sus llaves de la casa, por lo que necesita llamar a un cerrajero. A continuación utilizamos la iteración de diccionarios para obtener el número de celular de todos los cerrajeros que tiene Jorge en su directorio.
for contacto,info in directorio.items():
profesion = info[0]
if profesion == "Cerrajero":
print(contacto + ": " + str(info[2]))
Camilo: 3129543435
Diego: 2045834458
3.2. while
#
Un ciclo while
es una estructura de control que nos permite repetir un bloque de código dependiendo del cumplimiento de una condición. De esta manera, en cada iteración se evalua la condición y si su valor es True
, se ejecuta el bloque de código; el ciclo se detiene cuando la condición retorna por primera vez False
.
La sintaxis en Python es la siguiente:
while(condicion):
bloque_de_codigo
Contador#
Un contandor es un número entero, el cual se aumenta o disminuye, dependiendo del caso, para contabilizar cuando ocurre un suceso. Es necesario que este se declare previamente al ciclo en el cual se irán contabilizando los sucesos.
Ejemplo 10#
Pablo quiere participar en una lotería. Para esto debe escoger cinco números del 0 al 10 y decide programar un ciclo que genere los cinco números aleatorios. Adicionalmente, hay que tener en cuenta que Pablo quiere que todos los números sean diferentes.
from random import random
numeros_aleatorios = []
contador = 0
while contador < 5:
aleatorio = int(random()*10)
if aleatorio not in numeros_aleatorios:
numeros_aleatorios.append(aleatorio)
contador += 1 # Esta línea de código equivale a escribir: contador = contador + 1
numeros_aleatorios
[5, 4, 0, 9, 6]
Ciclo infinito#
Un ciclo infinito ocurre cuando la condición del while
nunca retorna False
. De esta forma, el ciclo se ejecutará infinitamente, lo cual no es deseable. Ejemplo:
x = 1
while( x > 0 ):
x = x + 1
En este caso, x
siempre será mayor a 0, por lo cual, el ciclo nunca parará.
Ejemplo 11#
Camilo quiere imprimir los números naturales (empezando desde el 1) hasta llegar al segundo múltiplo de 3 (incluyéndolo).
continuar = True
numero = 1
while continuar:
print(numero)
if(numero%3 == 0 and not numero == 3):
continuar = False # Podemos obtener el mismo resultado reemplazando esta línea de código por: break
numero = numero + 1
1
2
3
4
5
6
Referencias#
Bustamante, Sebastian. (2021). Operadores Básicos en Python con ejemplos. En: freeCodeCamp. Recuperado de: https://www.freecodecamp.org/espanol/news/operadores-basicos-en-python-con-ejemplos/
https://www.explicacion.net/ciclos-de-programacion/#:~:text=En otras palabras%2C la importancia,Programar con mayor rapidez. Notebook Pablo- Módulo 3, Nivel 1: Iteradores y funciones
Créditos#
Autores: Camilo Falla Moreno, Ariadna Sofía de Ávila Bula, Juan Felipe Rengifo Méndez, Alejandro Mantilla Redondo, Diego Alejandro Cely Gómez
Actualizado por: Jose Fernando Barrera De Plaza
Fecha última actualización: 06/08/2023