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?
| Operador | Descripción | Ejemplo | Resultado |
|---|---|---|---|
| == | Igual a | 5 == 5 | True |
| != | Diferente de | 3 != 5 | True |
| > | Mayor que | 7 > 3 | True |
| < | Menor que | 2 < 8 | True |
| >= | Mayor o igual que | 5 >= 5 | True |
| <= | Menor o igual que | 4 <= 6 | True |
==). 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 stringOperadores 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 edadEl 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) # FalseEl 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 semananot 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:
| A | B | A and B | A or B | not A |
|---|---|---|---|---|
| True | True | True | True | False |
| True | False | False | True | False |
| False | True | False | True | True |
| False | False | False | False | True |
Combinando Operadores en Ejemplos Reales
- Validación de acceso a sistema: Comprobar nombre de usuario y contraseña.
- Filtros en datos: Encontrar productos dentro de un rango de precio.
- 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= (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}")# 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
| Error | Problema | Solución |
|---|---|---|
x = 5 | Asigna, no compara | Usar x == 5 |
if x == True: | Redundante | Usar if x: |
if x == False: | Redundante | Usar if not x: |
"5" == 5 | Tipos diferentes | Convertir 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
- Comparación:
==,!=,>,<,>=,<=→ DevuelvenTrueoFalse - Lógicos:
and(ambas verdaderas),or(al menos una verdadera),not(invierte) - Precedencia:
not→and→or - Usa paréntesis para controlar el orden de evaluación
¿Cuál es el resultado de: True and False or True?
- A) True
- B) False
- C) Error de sintaxis
- D) None
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.¿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
x > 5 and x < 15Esta 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
- Nivel básico: Escribe un programa que determine si un número es par Y mayor que 10.
- Nivel intermedio: Crea un validador que acepte usuarios si tienen email O número de teléfono registrado.
- Nivel avanzado: Desarrolla un sistema de recomendación que sugiera productos basándose en múltiples criterios: precio, categoría preferida, disponibilidad y descuentos.
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.