6  Sentencias condicionales

6.1 Introducción a las sentencias condicionales en Python

Las sentencias de condicionales ayudan a controlar el flujo de la ejecución del código cuando se cumplen ciertas condiciones. Al final de este capítulo los estudiantes podrán:

  • Explicar cómo las condicionales pueden ser usados en Python.

  • Describir las sintaxis de las condicionales.

  • Escribir sentencias de condicionales para controlar el flujo de ejecución.

Remover las repeticiones en el código

Es importante considerar evitar las repeticiones en el código, primero porque será más eficiente y fácil de leer y segundo porque será más fácil la contribución de tus pares. Imagine que se ha copiado y pegado el mismo bloque de código para repetir una tarea en particular. Cualquiera modificación que esa tarea requiera, va a necesitar que el cambio sea hecho en todos los bloques copiados. Esto aumenta el riesgo de cometer errores. Para evitar lo anterior es posible usar tres estrategias: condicionales, loops y funciones.

¿Por qué usar declaraciones condicionales?

Un condicional se usa para determinar si una cierta condición se cumple antes que ciertas líneas de código sean ejecutadas. Esto es muy útil para controlar el flujo de ejecución del código. Se ejecutarán ciertas líneas, mientras ciertas condiciones sean cumplidas. Por ejemplo, las condicionales sirven para revisar si una variable tiene cierto valor, o la existencia de un archivo antes de la ejecución del código.

Estructura de las condicionales

Un condicional usa una estructura de sintaxis basado en las sentencias if y else (cada una termina con :), que definen el potencial de acciones que pueden ser completados basadas en si la condición es verdadera o no.

if condicion:
  
  print(f"si la condición es verdadera, {algún código aquí}.")
  
else:
  
  print(f"si la condición es falsa, {otro código acá}.")

Si la condición proporcionada en la sentencia if se cumple (como por ejemplo, un resultado True), entonces cierto código será ejecutado. Si esta condición no se cumple (como por ejemplo, un resultado False), entonces el código proporcionado en la sentencia else, será ejecutado.

“Indentación” (Sangrado/Sangría) y la ejecución de líneas de código

Se debe reconocer que Python utiliza la indentación para generar bloques de código. Las indentaciones del código después del if y else son una parte importante de la sintaxis de las condicionales. Estas indentaciones indican cual código debería ser ejecutado con cual sentencia, haciendo que el código sea más fácil de leer. En el ejemplo de arriba, la línea que contiene a print() puede ser reemplazada por cualquier otro código, pero la idea es saber que si la condición del if se cumple se ejecutará esa línea. Vamos a revisar algunos ejemplos.

Comparar valores numéricos usando sentencias condicionales

Es posible escribir sentencias condicionales que usen operadores de comparación (==, <, >, <=, >=) para revisar el valor de una variable contra otro valor o variable.

# Ejemplo de sentencias condicionales

# Asignar 10 a x
x = 10

# Compare x con  10

if x == 10: # Si x es igual a diez...
  
    print("x es igual a 10") # Imprime esto
    
else: # Si no es asi...
  
    print(f"x tiene un valor de {x} el cual no es igual a 10") # Imprime esto
x es igual a 10
# Asignar 0 a x
x = 0

# Comparar x con 10

if x == 10: # Si x es igual a diez...
  
    print("x es igual a 10.") # Imprime esto   
    
else: # Si no es asi...
  
    print(f"x tiene una valor de {x} el cual no es igual a 10.") # Imprime esto
x tiene una valor de 0 el cual no es igual a 10.

Se puede además usar otros operadores para realizar la comparación.

# Asigna 0 a x
x = 0

# Revisar si x es menor que 10

if x < 10:
  
    print(f"x tiene un valor de {x} el cual es menor que 10.")  
    
else:
  
    print(f"x tiene un valor de {x} el cual es mayor que 10.")
x tiene un valor de 0 el cual es menor que 10.
# Crear y igual a -10
y = -10

# Revisar si x es mas grande que y

if x > y:
  
    print(f"x tiene un valor de {x} el cual es mayor que {y}")
    
else:
  
    print(f"x tiene un valor de {x} el cual es menor que {y}") 
x tiene un valor de 0 el cual es mayor que -10
# Establecer y igual a 100
y = 100

# Revisar si x es mayor que y
if x > y:
  
    print(f"x tiene un valor de {x} el cual es mayor que {y}")
    
else:
  
    print(f"x tiene un valor de {x} el cual es menor que {y}") 
x tiene un valor de 0 el cual es menor que 100

Revisar valores usando condicionales

Se pueden usar operadores de pertenencia (ejemplo, in o not in) para escribir sentencias condicionales que permitan revisar si ciertos valores están contenidos dentro de una estructura de datos, tales como una lista, o incluso un string de texto.

# Creamos un lista con la precipitación mensual promedio (mm) en Valdivia, desde Mayo 2023 a Mayo 2024

precip_mensual_prom = [89.6,  187.6, 186.4, 146.4, 144.4 , 43, 
                      92.2, 11, 4.2, 28.8, 11.6, 58.2]

# Revisar si el valor 11 está en la lista

if 11 in precip_mensual_prom:
  
    print("Valor está en la lista.")
    
else: 
  
    print("Valor no está en la lista.")
Valor está en la lista.
# Revisar si el valor  12 se encuentra en la lista

if 12 in precip_mensual_prom:
  
    print("Valor está en la lista.")
    
else:     
  
    print("Valor no está en la lista.")
Valor no está en la lista.

La condición anterior también puede ser hecha usando el operador de manera opuesta.

# Revisar si el valor 12 no está en la lista

if 12 not in precip_mensual_prom:
  
    print("Valor no está en la lista.")
    
else:  
  
    print("Valor está en la lista.")
Valor no está en la lista.

Se pueden usar también operadores de pertenencia para revisar por palabras dentro de un string.

# Revisar si el string "precip" se encuentra dentro del texto "temperatura_media_mensual"

if "precip" in "temperatura_media_mensual":
  
    print("Este textstring contiene la palabra precip.")
    
else:
  
    print("Este textstring no contiene la palabara precip.")
Este textstring no contiene la palabara precip.

Revisar el tipo de objetos usando sentencias condicionales

Se pueden usar operadores de identidad (ej, is o is not) para escribir sentencias condicionales que permitan revisar si un objeto es de un cierto tipo (ej, int, str, list).

# Asignar un cero a x
x = 0

# Revisar si x es del tipo integer

if type(x) is int:
  
    print(f"{x} es un entero.")
    
else:
  
    print(f"{x} no es un entero.")
0 es un entero.
# Revisar si x es del tipo float

if type(x) is float:
  
    print(f"{x} es un float.")
    
else:
  
    print(f"{x} no es un float.")
0 no es un float.
# Revisar si x no es un string

if type(x) is not str:
  
    print(f"{x} no es un string.")
    
else:
    print(f"{x} es un string.")
0 no es un string.

Con operadores de identidad se puede también revisar si un objeto tiene una cierta estructura de datos, como una lista, o incluso comparar su tipo con el tipo de otro objeto.

# Crear una lista con abreviaciones de los meses del año

meses = ["Ene", "Feb", "Mar", "Abr", "May", "Jun",
         "Jul", "Ago", "Sep", "Oct", "Nov", "Dic"]

if type(meses) is list:
  
    print("Objeto es una lista.")
    
else:
  
    print("Objeto no es una lista.")
Objeto es una lista.
# Revisa que el tipo de datos de meses coincide con precip_mensual_prom

if type(precip_mensual_prom) is type(meses):
  
    print("Estos objetos son del mismo tipo.")
    
else: 
  
    print("Estos objetos no son del mismo tipo.")
Estos objetos son del mismo tipo.

6.2 Revisando rutas con sentencias condicionales

Se puede usar los condicionales para revisar las rutas (o paths, en inglés) a los accesos de los datos (como por ejemplo, ocupar la función os.path.exists() del paquete os). En el siguiente ejemplo se va a descargar datos que albergan precipitación mensual del año 2000 para la ciudad de Valdivia, Chile (Estación Pichoy). Los datos son proporcionados por el Explorador Climático del Centro de Cienca del Clima y la Resiliencia ((CR)2).

Jerarquía de importación

os (Operative System en inglés) es una librería de Python que entrega una forma de interactuar con el sistema operativo. Si bien, esta librería está instalada en nuestro ambiente, tenemos que llamarlo con el comando import (como se hace de forma similar en R a través de library(paquete)) . De no hacer esto, la librería no se cargará y no podremos ocupar las funciones que esta trae.

De igual manera numpy es un paquete fundamental para la computación científica en Python. NumPy proporciona una estructura de datos eficiente llamada ndarray (array de N-dimensiones) que permite almacenar y manipular grandes conjuntos de datos numéricos de manera rápida y sencilla. Algunas características clave de NumPy incluyen, por ejemplo, funciones matemáticas y lógicas sofisticadas sobre arrays, transformadas discretas de Fourier, álgebra lineal básica, operaciones estadísticas básicas, simulación aleatoria y mucho más. Al igual que os, se carga con import, pero contiene el comando as, el cual permite otorgar un alias a la librería. Esto permite abreviar el nombre del módulo para hacer el código más legible (pasando de numpy a np).

También, EarthPy es un paquete de Python que se creó con el propósito de trabajar más fácilmente con datos espaciales y de teledetección. El objetivo principal de este paquete es facilitar el análisis y la visualización de datos raster y vectoriales, incluyendo un conjunto de funciones que permiten realizar de manera más eficiente actividades comunes en la ciencia de datos geoespaciales. En este caso, la librería quedo abreviada como et.

Es por esto que, para poder ocupar los objetos de las librerías importadas se debe llamar al paquete y el método (o función) se quiera ejecutar siguiendo la sintaxis:

paquete.funcion()

La sintaxis que usa puntos para acceder a métodos y atributos en Python se llama notación de punto o dot notation en inglés.

¿Qué es la notación de punto?

  • Es la forma en la que accedes a los atributos (variables de instancia) y métodos (funciones) de un objeto en programación orientada a objetos.

  • En esta notación, el nombre del objeto va seguido de un punto (.), y luego el nombre del atributo o método al que quieres acceder o invocar.

Por ejemplo, como se mencionó arriba, os.path.exists() llama, desde el módulo os, al submódulo path y por último, ejecuta exists(). Esto sirve para verificar si una ruta dada existe dentro del Sistema Operativo. Cabe destacar que cada módulo, submódulo o paquete tiene sus propias funciones y estructuras, por lo que es recomendable revisar la documentación de cada uno.

Cuando trabajos en Python, es fundamental saber como organizar y estructurar el código para que este sea reutilizable y entendible durante el tiempo. Python ofrece distintos niveles de organización, siendo estos:

  • Módulo: Es un archivo .py que contiene código. Es el nivel más básico.

  • Paquete: Es una carpeta que contiene uno o varios módulos, y tiene un archivo __init__.py para indicar que es un paquete.

  • Submódulo: Es un módulo dentro de un paqeute o subpaquete.

Figura 6.1: Ejemplo de la estructura de un paquete de Python.
# Importando los paquetes necesarios

import os

import numpy as np

import earthpy as et
/usr/share/miniconda/envs/tallerpython/lib/python3.10/site-packages/earthpy/__init__.py:7: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81.
  from pkg_resources import resource_string

Para hacer la descarga de los datos, el paquete earthpy llama al módulo data y luego a la función get_data(). Entonces, et.data.get_data() permite obtener un set de datos, disponibles de forma online a través del parámetro url. Por defecto, los datos descargados desde alguna URL serán guardadas dentro de “earth-analytics/data/earthpy-downloads/”, creando los directorios si estos no existen.

# Descarga de los datos usando el paquete earthpy

precip_mensual_prom_url = 'https://figshare.com/ndownloader/files/48922453'

et.data.get_data(url = precip_mensual_prom_url)
C:\Users\Tu usuario\earth-analytics\data\earthpy-downloads\pp-mensual-prom-pichoy.txt

El ejemplo de abajo ocupa las siguientes funciones:

  • os.chdir(path): Cambia el directorio de trabajo especificando una ruta (path).

  • os.path.join(path, "ruta"): Permite combinar uno o más argumentos en una sola ruta, teniendo compatibilidad con el sistema operativo de la maquina (ya que por ejemplo, para navegar entre rutas del computador, Unix ocupa /, mientras que Windows usa \). Esta función puede ocupar rutas absolutas, objetos (que representen rutas) o strings.

  • os.getcwd(): Imprime la ruta del directorio de trabajo actual. Similar a pwd dentro del terminal de Bash.

  • et.io.HOME: Refiere al directorio de trabajo predeterminado.

  • os.path.exist(path): Verifica si una ruta especificada existe en el sistema de archivos. Puede ser un archivo o un directorio. Devuelve True si la ruta existe y False si no.

  • np.loadtxt(): Se utiliza para cargar datos de un archivo de texto en un array de NumPy. Esta función es útil para leer datos numéricos en formato de texto, como archivos .csv o .txt.

# Seteando el working directory a earth-analytics

os.chdir(os.path.join(et.io.HOME, 'earth-analytics'))
print(os.getcwd())
C:\Users\Tu usuario\earth-analytics
# Generar el path relativo al working directory
precip_mensual_prom_path = os.path.join("data", "earthpy-downloads", 
                                     "pp-mensual-prom-pichoy.txt")
precip_mensual_prom_path
data\earthpy-downloads\pp-mensual-prom-pichoy.txt
# Revisa si el path existe

if os.path.exists(precip_mensual_prom_path):
  
    print("Es un path válido.")
    
else:
  
    print("Este path no existe.")
print("Es un path válido")
Es un path válido
# Importando los datos dentro de un array, si la ruta existe.
if os.path.exists(precip_mensual_prom_path):
  
    precip_mensual_prom = np.loadtxt(precip_mensual_prom_path)
    
    print(precip_mensual_prom)
    
    print(type(precip_mensual_prom))
    
else:
  
    print("Esta ruta no existe.")
[ 22.7 155.6  45.4 125.2 132.6 784.2 271.3 157.7 161.6  66.6  74.7  65.7]
<class 'numpy.ndarray'>

6.3 Sentencias condicionales con alternativas o condiciones combinadas

En esta lección los estudiantes aprenderán:

  • Describir la sintaxis para sentencias condicionales con alternativas o combinaciones de condiciones en Python.

  • Escribir sentencias condicionales con condiciones alternativas o combinaciones de condiciones en Python.

Sentencias condicionales con condicionales alternativas

En la lección anterior se revisó cómo escribir sentencias condicionales que revisan por una condición antes de ejecutar algo de código.

# Ejecuta si la condición es verdadera

a = 10

if (a == 10):
  
    print("Condición es verdadera.")
    
else:
  
    print("Condición es falsa.")
Condición es verdadera.

Ahora se puede expandir esta sintaxis para una condición alternativa con la sentencia elif:

if condición:
  
    # si condición es verdadera, se ejecuta el código aquí
    
elif condición alternativa:
  
    # si condición es falsa, pero condición alternativa verdadera, se ejecuta el código aquí
    
else:
  
    # si ninguna de las anteriores es verdadera, se ejecuta código final acá

Si la primera condición proporcionada por la sentencia condicional if no es verdadera, entonces Python revisará que la condición proporcionada por la sentencia elif.

Si la condición de la sentencia elifes satisfecha, entonces se ejecutará el bloque de código que está dentro de ella.

Sin embargo, si ninguna de las condiciones anteriores es satisfecha, entonces el código dentro del bloque else se ejecutará.

if (a != 10):
  
    print("Primera condición es verdadera.")
    
elif (a > 10):
  
    print("Primera condición nos es verdadera, pero la condición alternativa es verdadera.")
    
else:
  
    print("Ninguna de las condiciones anteriores es verdadera.")
Ninguna de las condiciones anteriores es verdadera.

Espaciamiento y ejecución de líneas de código

Es bueno recordar que el código de arriba que incluye la función print() puede ser reemplazado por cualquier código ejecutable en Python.

A medida que el código que está dentro de las sentencias if, elif y else se vuelve más grande, es común que se agreguen líneas en blanco para facilitar la lectura y ver cual código se ejecutará con cada sentencia. Sin embargo, la indentación permanece como una parte importante de la sintaxis de las sentencias condicionales.

Revisemos los ejemplos de abajo para ver como funciona elify entender como la sentencia de print() puede ser remplazada por otro código.

En el primer ejemplo, x es comparado con y. La primera condición revisa si x es menor que y, mientras que la condición alternativa revisa si x es mas grande que y.

Como x es menor que y, entonces se cumple la primera condición, lo cual resulta en agregar el valor de 5 a x.

# Setea x igual a 5, y igual a 10
x = 5

y = 10

# Ejecuta código basado en la comparación de x con y
if x < y:
    print(f"x comenzó con el valor {x}")
    
    x += 5
    
    print(f"Ahora x tiene el valor {x} el cual es igual a y.")

elif x > y:
    print(f"x comenzó con el valor de {x}")
    
    x -= 5
    
    print(f"Ahora x tiene el valor de {x} el cual es igual a y.")

else:
    print(f"x comenzó con el valor de {x} el cual ya es igual a y.")
x comenzó con el valor 5
Ahora x tiene el valor 10 el cual es igual a y.

En el ejemplo que se muestra a continuación, x posee un valor mas grande que y, de esta manera la primera condición no se cumple. Sin embargo, la segunda condición si se cumple, resultando en la sustracción del valor 5 desde la variable x.

# Setear x igual a 15
x = 15

# Ejecuta código basado en la comparación de x con y

if x < y:
    print(f"x comenzó con el valor de {x}")
    
    x += 5
    
    print(f"Ahora x tiene el valor de {x} el cual es igual a y.")

elif x > y:
    print(f"x comenzó con el valor de {x}")
    
    x -= 5
    
    print(f"Ahora x tiene el valor de {x} el cual es igual a y.")

else:
    print(f"x comenzó con el valor de {x} el cual ya es igual a y.")
x comenzó con el valor de 15
Ahora x tiene el valor de 10 el cual es igual a y.

Sin embargo, si se establece que x tiene que el mismo valor que y, ninguna de las dos primeras condiciones se cumplirá, y entonces se ejecutará el código dentro de la sentencia else.

# Setear a x igual a 10
x = 10

# Ejecuta código basado en la comparación de x con y
if x < y:
    print(f"x comenzó con el valor de {x}")
    
    x += 5
    
    print(f"Ahora x tiene el valor de {x} el cual es igual a y.")

elif x > y:
    print(f"x comenzó con el valor de {x}")
    
    x -= 5
    
    print(f"Ahora x tiene el valor de {x} el cual es igual a y.")

else:
    print(f"x comenzó con el valor de {x} el cual ya es igual a y.")
x comenzó con el valor de 10 el cual ya es igual a y.

Se puede aplicar también la sintaxis elif para estructurar sentencias condicionales que usen otros operadores, o que revisen valores para strings u objetos.

Por ejemplo, se puede verificar si un string está contenido en otro y definir un nombre de archivo basado en la condición que sea satisfecha.

# Entregar valor a una variable (fname) dependiendo del contenido de "precip"

if "precip" in "temp_mensual_prom":
  
    fname = "temp_mensual_prom"
    
    print(fname)

elif "precip" in "precip_mensual_prom":
  
    fname = "precip_mensual_prom"
    
    print(fname)  

else:
    print("Ningún textstring contiene la palabra precip.")
precip_mensual_prom

Por otra parte, se pueden agregar valores a una lista dependiendo de cual condición se cumple. En el ejemplo mostrado abajo, la primera condición verifica si el último valor de la lista es igual a 58.2 (valor promedio de precipitación para Diciembre).

Como el útimo valor de la lista es 11.6 (precipitación de Noviembre), la primera condición no se cumple.

De esta forma se pasa a revisar la segunda condición. Como esta condición si se cumple (True), se ejecuta el código de elif.

# Lista con la precipitación promedio mensual (mm) para Valdivia, Chile. No incluye Diciembre
precip_mensual_prom = [89.6,  187.6, 186.4, 146.4, 144.4 , 43, 
                      92.2, 11, 4.2, 28.8, 11.6]

# Agrega un valor a la lista dependiendo de los valores de la lista

if precip_mensual_prom[-1] == 58.2:  
  
    print(precip_mensual_prom[-1]) # Print último valor de la lista

elif precip_mensual_prom[-1] == 11.6:   
  
    precip_mensual_prom += [58.2] # Agrega el valor de Diciembre
    
    print(precip_mensual_prom)    

else:     
    print("El último item de la lista no era 58.2 ni 11.6")
[89.6, 187.6, 186.4, 146.4, 144.4, 43, 92.2, 11, 4.2, 28.8, 11.6, 58.2]

Sentencias condicionales con combinación de condiciones

Los operadores lógicos (ejemplo, and, or, not) permiten crear sentencias condicionales que pueden revisar combinaciones de condiciones:

  • and para ejecutar código si la totalidad de la condición especificada se cumple.

  • or para ejecutar código si al menos una de las condiciones especificadas se cumple.

  • not para ejecutar código solo si la condición especificada no se ha cumplido (se puede usar not en combinación con and u or para revisar si múltiples condiciones son cumplidas o no)

Evaluar dos condiciones usando and

Se puede evaluar si se cumplen múltiples condiciones usando and entre dos condiciones. Ambas condiciones se deben cumplir para que se ejecute el código que está dentro del bloque if. Esto implica que si una de las condiciones no se cumple, entonces la sentencia condicional ejecuta el código que se encuentra dentro de else.

# Evalua si ambas condiciones son verdaderas

if condicion1 and condicion2:
  
    print("Condicion1 y 2 son ambas verdaderas.")
    
else:
  
    print("Una condición (la 1 o 2) no es verdadera.")

Por ejemplo, se puede evaluar si dos variables son enteros y si se cumple, sumarlas.

# Asignar los valores de 5 y 10 para x e y, respectivamente
x = 5
y = 10

# Sumar x e y si ambas son numeros enteros

if type(x) is int and type(y) is int:

    print(x + y)
    
else:
  
    print("Ninguna de ellas, ya sea x ó y son enteros.")
15
# Asignar 5 a x y un string a y
x = 5
y = "Algo de texto"

# Sumar x con y, si ambas son enteros

if type(x) is int and type(y) is int:
  
    print(x + y)
    
else:
    print("Ninguna de ellas, ya sea x ó y son enteros.")
Ninguna de ellas, ya sea x ó y son enteros.

Es posible también revisar si dos objetos son del mismo tipo y longitud.

# Crear una lista con abreviaciones de los meses del año, falta diciembre
meses = ["Ene", "Feb", "Mar", "Abr", "May", "Jun",
         "Jul", "Ago", "Sep", "Oct", "Nov"]

# Longitud de precip_mensual_prom
precip_len = len(precip_mensual_prom) 

print(precip_len)

# Longitud de la lista
meses_len = len(meses)

print(meses_len)
12
11
# Evalua si ambos, tipos y longitud son iguales

if type(precip_mensual_prom) is type(meses) and precip_len == meses_len:
  
    print("Los objetos son del mismo tipo y longitud.")
    
else:
  
    print("Los objetos no son del mismo tipo y longitud.")
Los objetos no son del mismo tipo y longitud.

Evalua si al menos se cumple una condición usando or

Se puede escribir sentencias condicionales que evaluen si al menos una de las condiciones es verdadera. Para esto se puede usar or entre dos condiciones. Acá solo es necesario que al menos una condición sea verdadera para ejecutar el bloque del if.

# Evalua que al menos una de las condiciones es verdadera

if condicion1 or condicion2:
  
    print("Una de las dos o las dos condiciones son verdaderas.")
    
else:
    print("Ninguna de las condiciones es verdadera.")
# Asigna 0 a x, 10 a y
x = 0

y = 10

# Revisa si alguna de ellas es igual a cero
if x == 0 or y == 0:
  
    print("Ni x ó y es igual a 0.")
    
    x += 1
    
    y += 1
    
    print(f"x es ahora {x} ahora y es {y}")

else:
    print("Ni x o y es igual a 0.")
Ni x ó y es igual a 0.
x es ahora 1 ahora y es 11

Otro ejemplo puede servir para recordar que las sentencias condicionales permiten comparar los tipos y longitudes de dos listas.

La primera condición es verdadera, de modo que ambos objetos comparados son listas, pero la segunda condición no es verdadera porque en la lista de meses, falta Dic.

Si se usa la sentencia de or, solo una condición necesita ser verdadadera para que el bloque de código de if puede ejecutarse.

# Evalua si hay coincidencia entre el tipo de dato y la longitud

if type(precip_mensual_prom) is type(meses) or precip_len == meses_len:
  
    print("Los objetos, o tienen el mismo tipo de datos o la misma longitud.")
    
else:
    print("Los objetos, o no tienen el mismo tipo de datos o la misma longitud.")
Los objetos, o tienen el mismo tipo de datos o la misma longitud.

Ayudantía

Disponible la ayudantía que contiene los ejercicios visto en clase:

Condicionales y Operadores