Menu
Coddy logo textTech

Operadores lógicos Parte 4

Parte de la sección Fundamentals 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 Complex que combinan varios operadores and y or.

De Morgan's Laws proporcionan reglas para transformar expresiones logical. Estas transformaciones ayudan a que el código sea más legible y fácil de entender.

First Law: not (A and B) es lo mismo que (not A) or (not B)

Observa que suceden 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)

La misma regla de dos pasos se aplica aquí: each operand gets negated y el operador flips. Esta vez or se convierte en and. Piensa en ello así: distribuir not siempre cambia andor mientras niega cada parte.

Por ejemplo:

# Comprobando si una persona NO es (estudiante o empleado)
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 Complex con Both AND y OR: A veces necesitas condiciones que combinen ambos operadores. Este es 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 De Morgan's Laws:

  • Para facilitar la lectura de las condiciones negativas
  • Para simplificar las complex logical expressions
  • Para convertir entre different representaciones de la misma logic
challenge icon

Desafío

Principiante

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

Initialize las siguientes variables:

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

Escribe expresiones logical para determinar si:

  • can_sell_regular_pet: El cliente puede comprar una mascota regular si tiene O BIEN una licencia O experiencia, Y debe tener espacio
  • can_sell_exotic_pet: El cliente puede comprar una mascota exotic si tiene AMBAS, 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 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 tanto licencia como espacio)

Pruébalo tú mismo

# Inicializar variables

# Calcular condiciones
# Reemplaza cada valor de marcador de posición a continuación 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 Fundamentals

Practica por tu cuenta: Compilador de Python online