Menu
Coddy logo textTech

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 resulta 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: cada operando se niega (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 de conexión entre ellos.

Por ejemplo:

# Vamos a comprobar 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)

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

Por ejemplo:

# Comprobando si una persona NO es (un estudiante o 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:

# Comprobando si NO PODEMOS aceptar una solicitud de empleo
# Rechazamos si: (sin experiencia AND sin título) OR no cumple el requisito de edad

has_experience = False
has_degree = False
meets_age = True

# Condición compleja usando tanto AND como OR
reject_application = (not has_experience and not has_degree) or not meets_age

print(reject_application)  # True (rechazado porque sin experiencia AND sin título)
# Esto también se puede escribir usando las leyes de De Morgan:
# accept = (experience OR degree) AND meets age; 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 facilitar la lectura de las condiciones negativas
  • Para simplificar expresiones lógicas complejas
  • Para convertir entre diferentes 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 puede vender 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 TANTO una licencia COMO 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 si NO tiene espacio

Resultados esperados con los valores proporcionados:

  • 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

# Inicializar variables

# Calcular condiciones
# Reemplaza cada valor de marcador de posición de abajo con 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