Menu
CoddyTech

Operadores lógicos Parte 4

Parte de la sección Fundamentos del Journey de Python de Coddy. Lección 19 de 77.

Al trabajar con expresiones lógicas, a veces necesitamos simplificarlas o reorganizarlas. Esto es especialmente útil al trabajar con condiciones complejas que combinan varios operadores and y or.

Las leyes de De Morgan proporcionan reglas para transformar expresiones lógicas. Estas transformaciones ayudan a que el código sea más legible y fácil de entender.

Primera ley: not (A and B) es lo mismo que (not A) or (not B)

Observa que ocurren dos cosas cuando distribuyes not en la expresión: se niega cada operando (A se convierte en not A, B se convierte en not B), y el operador cambia: and se convierte en or. not no solo niega los valores; también cambia el operador que los conecta.

Por ejemplo:

# Comprobemos si un número NO está (entre 1 y 10)
number = 15
# Estas dos expresiones son equivalentes:
result1 = not (number >= 1 and number <= 10)
result2 = (not number >= 1) or (not number <= 10)
print(result1)  # True
print(result2)  # True

Segunda ley: not (A or B) es lo mismo que (not A) and (not B)

La misma regla de dos pasos se aplica aquí: se niega cada operando y el operador se invierte. Esta vez, or se convierte en and. Piensa en ello así: distribuir not siempre invierte and ↔ or mientras se niega cada parte.

Por ejemplo:

# Comprobando si una persona NO es estudiante ni está empleada
is_student = False
is_employed = False
# Estas dos expresiones son equivalentes:
result1 = not (is_student or is_employed)
result2 = (not is_student) and (not is_employed)
print(result1)  # True
print(result2)  # True

Ejemplo complejo con AND y OR: A veces necesitas condiciones que combinen ambos operadores. Aquí tienes un ejemplo práctico:

# Comprobamos si NO PODEMOS aceptar una solicitud de empleo
# Rechazamos si: (no tiene experiencia Y no tiene título) O no cumple el requisito de edad
has_experience = False
has_degree = False
meets_age = True
# Condición compleja que utiliza tanto Y como O
reject_application = (not has_experience and not has_degree) or not meets_age
print(reject_application)  # True (rechazada porque no tiene experiencia Y no tiene título)
# Esto también se puede escribir usando las leyes de De Morgan:
# accept = (experience OR degree) AND cumple el requisito de edad; reject = not accept
accept_application = (has_experience or has_degree) and meets_age
reject_application2 = not accept_application
print(reject_application2)  # True (mismo resultado, lógica diferente)

Cuándo usar las leyes de De Morgan:

  • Para que las condiciones negativas sean más fáciles de leer
  • Para simplificar expresiones lógicas complejas
  • Para convertir entre distintas representaciones de la misma lógica
challenge icon

Desafío

Principiante

Estás ayudando a una tienda de mascotas a crear un sistema para determinar si pueden venderle una mascota a un cliente.

Inicializa las siguientes variables:

  • has_license con el valor True
  • has_space con el valor True
  • has_experience con el valor False

Escribe expresiones lógicas para determinar si:

  • can_sell_regular_pet: El cliente puede comprar una mascota común si tiene una licencia O experiencia, Y debe tener espacio
  • can_sell_exotic_pet: El cliente puede comprar una mascota exótica si tiene una licencia Y experiencia, Y debe tener espacio
  • cannot_sell_any_pet: La tienda NO PUEDE vender ninguna mascota si el cliente NO tiene licencia Y NO tiene experiencia, O no tiene espacio

Resultados esperados con los valores dados:

  • can_sell_regular_pet: True (tiene licencia y espacio)
  • can_sell_exotic_pet: False (no tiene experiencia)
  • cannot_sell_any_pet: False (tiene licencia y espacio)

Pruébalo tú mismo

# Inicializa las variables

# Calcula las condiciones
# Reemplaza cada valor provisional de abajo por la expresión lógica correcta
can_sell_regular_pet = False
can_sell_exotic_pet = False
cannot_sell_any_pet = False

# No borres las líneas de abajo
print("Can sell regular pet:", can_sell_regular_pet)
print("Can sell exotic pet:", can_sell_exotic_pet)
print("Cannot sell any pet:", cannot_sell_any_pet)
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Fundamentos

Practica por tu cuenta: Compilador de Python online