Ir al contenido principal

Operadores de comparación y operadores lógicos avanzados

Introducción

Los operadores de comparación y lógicos son herramientas fundamentales en Python que nos permiten evaluar condiciones y tomar decisiones en nuestros programas. Estos operadores son esenciales para crear expresiones condicionales que determinan el flujo de ejecución del código. En este artículo, profundizaremos en los diferentes tipos de operadores de comparación y lógicos disponibles en Python, y aprenderemos cómo combinarlos de manera efectiva para crear condiciones complejas y precisas.

Operadores de comparación en Python

Los operadores de comparación se utilizan para comparar dos valores y devolver un resultado booleano (True o False). Estos son los operadores de comparación disponibles en Python:

Operador de igualdad (==)

Comprueba si dos valores son iguales:

# Comparación de números
x = 5
y = 5
print(x == y)  # Devuelve True, porque 5 es igual a 5

# Comparación de cadenas
nombre1 = "Ana"
nombre2 = "ana"
print(nombre1 == nombre2)  # Devuelve False, porque las mayúsculas y minúsculas importan

Operador de desigualdad (!=)

Comprueba si dos valores son diferentes:

a = 10
b = 20
print(a != b)  # Devuelve True, porque 10 es diferente de 20

# Con cadenas
ciudad1 = "Madrid"
ciudad2 = "Madrid"
print(ciudad1 != ciudad2)  # Devuelve False, porque las cadenas son iguales

Operadores mayor que (>) y menor que (<)

Comprueban si un valor es mayor o menor que otro:

edad1 = 25
edad2 = 30
print(edad1 > edad2)  # Devuelve False, porque 25 no es mayor que 30
print(edad1 < edad2)  # Devuelve True, porque 25 es menor que 30

# También funcionan con cadenas (comparación lexicográfica)
palabra1 = "casa"
palabra2 = "cosa"
print(palabra1 < palabra2)  # Devuelve True, porque 'casa' va antes que 'cosa' alfabéticamente

Operadores mayor o igual que (>=) y menor o igual que (<=)

Comprueban si un valor es mayor/menor o igual que otro:

temperatura1 = 22
temperatura2 = 22
print(temperatura1 >= temperatura2)  # Devuelve True, porque son iguales
print(temperatura1 <= temperatura2)  # Devuelve True, porque son iguales

precio1 = 49.99
precio2 = 50.00
print(precio1 >= precio2)  # Devuelve False
print(precio1 <= precio2)  # Devuelve True

Operador de identidad (is)

Comprueba si dos variables apuntan al mismo objeto en memoria:

lista1 = [1, 2, 3]
lista2 = [1, 2, 3]
lista3 = lista1

print(lista1 == lista2)  # Devuelve True, porque tienen los mismos valores
print(lista1 is lista2)  # Devuelve False, porque son objetos diferentes en memoria
print(lista1 is lista3)  # Devuelve True, porque ambas variables apuntan al mismo objeto

Operador de no identidad (is not)

Comprueba si dos variables no apuntan al mismo objeto en memoria:

a = [1, 2, 3]
b = [1, 2, 3]
c = a

print(a is not b)  # Devuelve True, porque son objetos diferentes
print(a is not c)  # Devuelve False, porque son el mismo objeto

Operadores lógicos avanzados

Los operadores lógicos nos permiten combinar múltiples condiciones y realizar evaluaciones más complejas.

Operador AND (and)

Devuelve True si ambas condiciones son verdaderas:

edad = 25
ingresos = 30000

# Comprobar si una persona es mayor de edad y tiene ingresos suficientes
if edad >= 18 and ingresos > 20000:
    print("Cumple los requisitos para el préstamo")
    
# Ejemplo con valores que no cumplen ambas condiciones
edad = 17
ingresos = 30000
if edad >= 18 and ingresos > 20000:
    print("Cumple los requisitos para el préstamo")
else:
    print("No cumple los requisitos")  # Este será el resultado

Operador OR (or)

Devuelve True si al menos una de las condiciones es verdadera:

tiene_billete = False
es_empleado = True

# Comprobar si una persona puede entrar al evento
if tiene_billete or es_empleado:
    print("Puede entrar al evento")  # Este será el resultado
else:
    print("No puede entrar al evento")

Operador NOT (not)

Invierte el valor booleano:

tiene_permiso = False
print(not tiene_permiso)  # Devuelve True

# Ejemplo práctico
esta_cerrado = True
if not esta_cerrado:
    print("Podemos entrar")
else:
    print("No podemos entrar, está cerrado")  # Este será el resultado

Combinación de operadores y prioridad

Podemos combinar múltiples operadores de comparación y lógicos para crear condiciones más complejas:

edad = 25
altura = 175
peso = 70

# Comprobar si cumple los requisitos para una atracción
if (edad > 18 and altura > 160) or (edad > 15 and altura > 170 and peso > 60):
    print("Puede subir a la atracción")
else:
    print("No cumple los requisitos")

La prioridad de operaciones en Python es la siguiente (de mayor a menor):

  1. Operadores de comparación (==, !=, >, <, >=, <=)
  2. not
  3. and
  4. or

Si tienes dudas sobre la prioridad, puedes usar paréntesis para hacer explícito el orden de evaluación:

resultado = (a > b) and (c < d or e != f)

Evaluación en cortocircuito

Python utiliza la evaluación en cortocircuito para optimizar las operaciones lógicas:

  • En una expresión and, si el primer operando es False, el segundo no se evalúa porque el resultado será False en cualquier caso.
  • En una expresión or, si el primer operando es True, el segundo no se evalúa porque el resultado será True en cualquier caso.

Esto puede ser útil en situaciones como:

# Si la lista está vacía, no intenta acceder al primer elemento
if len(lista) > 0 and lista[0] == "valor":
    print("El primer elemento es 'valor'")

Técnicas avanzadas con operadores lógicos

Operador ternario

Python permite usar una forma condensada de expresión condicional:

# Formato: valor_si_verdadero if condicion else valor_si_falso
edad = 20
estado = "mayor de edad" if edad >= 18 else "menor de edad"
print(estado)  # Imprime "mayor de edad"

Encadenamiento de operadores de comparación

Python permite encadenar operadores de comparación de manera intuitiva:

# Comprobar si un número está entre 10 y 20
x = 15
print(10 < x < 20)  # Devuelve True

# Equivalente a:
print(10 < x and x < 20)  # También devuelve True

# Otro ejemplo
edad = 30
print(18 <= edad <= 65)  # Comprueba si la edad está entre 18 y 65 (inclusive)

Uso de all() y any()

Python proporciona funciones útiles para trabajar con múltiples condiciones:

# all() devuelve True si todas las condiciones son verdaderas
numeros = [10, 20, 30, 40]
print(all(num > 5 for num in numeros))  # Devuelve True porque todos son mayores que 5
print(all(num < 30 for num in numeros))  # Devuelve False porque no todos son menores que 30

# any() devuelve True si al menos una condición es verdadera
print(any(num > 35 for num in numeros))  # Devuelve True porque al menos uno es mayor que 35
print(any(num < 0 for num in numeros))   # Devuelve False porque ninguno es menor que 0

Resumen

Los operadores de comparación y lógicos son fundamentales para crear expresiones condicionales en Python. Permiten evaluar condiciones simples y combinarlas para formar estructuras más complejas que determinan el flujo de ejecución de un programa. Dominar estos operadores es esencial para escribir código eficiente y legible. En el próximo artículo, veremos cómo utilizar estos operadores en estructuras de control como los bucles while para crear iteraciones controladas por condiciones.