Operadores de comparación y lógicos

Lectura
20 min~7 min lectura
CONCEPTO CLAVE: Los operadores de comparación y lógicos son fundamentales en programación porque permiten tomar decisiones basadas en condiciones. Sin ellos, un programa ejecutaría las mismas instrucciones sin adaptarse a diferentes situaciones.

Operadores de Comparación y Lógicos en Python

En esta lección aprenderás a evaluar condiciones y combinar múltiples expresiones lógicas. Estos operadores son la base para crear programas que puedan decidir qué acción tomar en cada situación.

¿Qué son los Operadores de Comparación?

Los operadores de comparación evalúan la relación entre dos valores y devuelven un resultado booleano: True (verdadero) o False (falso). Son como las preguntas que hacemos en nuestro programa: ¿Es mayor? ¿Son iguales? ¿Es diferente?

OperadorDescripciónEjemploResultado
==Igual a5 == 5True
!=Diferente de3 != 5True
>Mayor que7 > 3True
<Menor que2 < 8True
>=Mayor o igual que5 >= 5True
<=Menor o igual que4 <= 6True
💡 Nota importante: El operador de igualdad son dos signos igual (==). Un error muy común entre principiantes es usar un solo signo igual (=), que en Python significa asignación, no comparación.

Ejemplos Prácticos de Comparación

# Comparando números
edad = 18
print(edad >= 18)        # True - es mayor de edad
print(edad == 18)         # True - tiene exactamente 18 años

# Comparando strings
nombre = "Ana"
print(nombre == "Ana")    # True
print(nombre == "ana")    # False - Python distingue mayúsculas de minúsculas

# Comparando valores de diferentes tipos
print(10 == "10")         # False - un entero no es igual a un string
📌 Recuerda: La comparación de strings en Python es case-sensitive, es decir, distingue entre mayúsculas y minúsculas. "Hola" y "hola" son valores diferentes.

Operadores Lógicos: and, or, not

Los operadores lógicos permiten combinar múltiples condiciones. Son herramientas esenciales para crear expresiones más complejas y matizadas.

El operador and

Devuelve True solo si ambas condiciones son verdaderas. Piensa en él como la palabra "y": quiero esto y aquello.

# Verificar si alguien puede conducir
edad = 25
tiene_licencia = True

puede_conducir = edad >= 18 and tiene_licencia == True
print(puede_conducir)  # True

# Ejemplo donde falla una condición
edad = 16
puede_conducir = edad >= 18 and tiene_licencia == True
print(puede_conducir)  # False - es menor de edad

El operador or

Devuelve True si al menos una de las condiciones es verdadera. Es como decir "una cosa u otra, o ambas".

# Verificar si alguien tiene acceso (tarjeta o llave)
tiene_tarjeta = False
tiene_llave = True

tiene_acceso = tiene_tarjeta or tiene_llave
print(tiene_acceso)  # True - tiene la llave al menos

# Ninguna condición se cumple
tiene_tarjeta = False
tiene_llave = False
tiene_acceso = tiene_tarjeta or tiene_llave
print(tiene_acceso)  # False

El operador not

Invierte el valor booleano: True se convierte en False, y viceversa. Es como preguntar "¿NO es verdadero?".

esta_lloviendo = True
print(not esta_lloviendo)   # False - sí está lloviendo

es_fin_de_semana = False
print(not es_fin_de_semana) # True - no es fin de semana
CONCEPTO CLAVE: Los operadores lógicos siguen un orden de prioridad: not se evalúa primero, luego and, y finalmente or. Usa paréntesis para controlar el orden de evaluación cuando sea necesario.

Tablas de Verdad

Las tablas de verdad muestran todos los posibles resultados de combinar valores booleanos:

ABA and BA or Bnot A
TrueTrueTrueTrueFalse
TrueFalseFalseTrueFalse
FalseTrueFalseTrueTrue
FalseFalseFalseFalseTrue

Combinando Operadores en Ejemplos Reales

  1. Validación de acceso a sistema: Comprobar nombre de usuario y contraseña.
  2. Filtros en datos: Encontrar productos dentro de un rango de precio.
  3. Decisiones de negocio: Evaluar si un cliente es elegible para un descuento.
# Ejemplo: Sistema de descuentos
cliente_premium = True
monto_compra = 150
dia_promocion = False

# Aplicar descuento si es premium Y la compra supera $100
# O si hay promoción activa
descuento_disponible = (cliente_premium and monto_compra > 100) or dia_promocion

print(f"¿Descuento disponible? {descuento_disponible}")
# Resultado: True - es cliente premium y la compra supera $100
⚠️ Error común: No confundas = (asignación) con == (comparación). El código if x = 5: causará un error, mientras que if x == 5: comparará el valor de x con 5.

Ejemplo Práctico Completo

Vamos a crear un programa que evalúe si un estudiante puede inscribirse en un curso:

# Programa de inscripción a curso
edad = 20
tiene_bachillerato = True
promedio = 8.5
disponibilidad_horaria = True

# Requisitos del curso
edad_minima = 18
promedio_minimo = 7.0
necesita_bachillerato = True

# Verificar si cumple todos los requisitos obligatorios
cumple_edad = edad >= edad_minima
cumple_promedio = promedio >= promedio_minimo
cumple_bachillerato = tiene_bachillerato == necesita_bachillerato
cumple_horario = disponibilidad_horaria

puede_inscribirse = (cumple_edad and cumple_promedio and 
                     cumple_bachillerato and cumple_horario)

print(f"¿Puede inscribirse? {puede_inscribirse}")
print(f"- Edad adecuada: {cumple_edad}")
print(f"- Promedio suficiente: {cumple_promedio}")
print(f"- Bachiller completado: {cumple_bachillerato}")
print(f"- Horario disponible: {cumple_horario}")
💡 Consejo profesional: Separa las condiciones en variables con nombres descriptivos. Esto hace tu código más legible y fácil de depurar. En lugar de escribir una expresión gigante,分成 partes más pequeñas y con significado.
Ver más: Ejemplo avanzado con expresiones complejas
# Ejemplo avanzado: Sistema de calificación de riesgo crediticio
ingresos_mensuales = 25000
deudas_activas = 3
historial_credito = "bueno"
empleo_estable = True
antiguedad_laboral = 24  # meses

# Criterios de evaluación
ingreso_suficiente = ingresos_mensuales >= 15000
pocas_deudas = deudas_activas <= 2
historial_adecuado = historial_credito in ["bueno", "excelente"]
estabilidad_laboral = empleo_estable and antiguedad_laboral >= 12

# Evaluación de riesgo (usando operadores lógicos combinados)
bajo_riesgo = (ingreso_suficiente and pocas_deudas and 
               historial_adecuado and estabilidad_laboral)

riesgo_moderado = (ingreso_suficiente and historial_adecuado) and not pocas_deudas

alto_riesgo = not ingreso_suficiente or not historial_adecuado

# Clasificación final
if bajo_riesgo:
    clasificacion = "APROBADO - Riesgo bajo"
elif riesgo_moderado:
    clasificacion = "APROBADO CON CONDICIONES - Riesgo moderado"
else:
    clasificacion = "RECHAZADO - Riesgo alto"

print(clasificacion)

Errores Comunes y Cómo Evitarlos

ErrorProblemaSolución
x = 5Asigna, no comparaUsar x == 5
if x == True:RedundanteUsar if x:
if x == False:RedundanteUsar if not x:
"5" == 5Tipos diferentesConvertir tipos explícitamente
"La claridad en el código es fundamental. Si tu condición es tan compleja que necesitas explicarla, probablemente puedas dividirla en partes más simples y con nombres más claros."

Resumen de Operadores

📌 Puntos clave para recordar:
  • Comparación: ==, !=, >, <, >=, <= → Devuelven True o False
  • Lógicos: and (ambas verdaderas), or (al menos una verdadera), not (invierte)
  • Precedencia: notandor
  • Usa paréntesis para controlar el orden de evaluación
🧠 Quiz: Operadores de Comparación y Lógicos

¿Cuál es el resultado de: True and False or True?

  • A) True
  • B) False
  • C) Error de sintaxis
  • D) None
Respuesta: A) True
Primero se evalúa True and False que resulta en False. Luego, False or True resulta en True, porque con or basta con que una condición sea verdadera.
🧠 Quiz

¿Qué expresión es True si x = 10?

  • A) x > 5 and x < 15
  • B) x > 15 or x < 5
  • C) not (x > 5)
  • D) x == 5 and x == 10
Respuesta: A) x > 5 and x < 15
Esta expresión verifica que 10 esté entre 5 y 15, lo cual es verdadero. La opción B es falsa porque 10 no es mayor que 15 ni menor que 5. La opción C es falsa porque invierte el resultado de 10 > 5. La opción D es falsa porque 10 no puede ser simultáneamente igual a 5 y a 10.

Ejercicios para Practicar

  1. Nivel básico: Escribe un programa que determine si un número es par Y mayor que 10.
  2. Nivel intermedio: Crea un validador que acepte usuarios si tienen email O número de teléfono registrado.
  3. Nivel avanzado: Desarrolla un sistema de recomendación que sugiera productos basándose en múltiples criterios: precio, categoría preferida, disponibilidad y descuentos.
💡 Para profundizar: Python también soporta operadores de comparación encadenados como 18 <= edad <= 65, que es equivalente a edad >= 18 and edad <= 65. Esta sintaxis es más legible y Pythonica.

En la siguiente lección exploraremos las estructuras de control de flujo (if, elif, else) donde aplicarás todo lo aprendido sobre operadores de comparación y lógicos para dirigir el flujo de ejecución de tus programas.