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 reordenarlas. Esto es particularmente útil cuando se trabaja con condiciones complejas que combinan múltiples 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.
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 se invierte: and se convierte en or. El 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) # TrueSegunda ley: not (A or B) es lo mismo que (not A) and (not B)
Aquí se aplica la misma regla de dos pasos: 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 al tiempo que niega cada parte.
Por ejemplo:
# Comprobando si una persona NO es (estudiante o 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) # TrueEjemplo complejo con AND y OR: A veces necesitas condiciones que combinan ambos operadores. Aquí hay 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 hacer que las condiciones negativas sean más fáciles de leer
- Para simplificar expresiones lógicas complejas
- Para convertir entre diferentes representaciones de la misma lógica
Desafío
PrincipianteEstás ayudando a una tienda de mascotas a crear un sistema para determinar si pueden vender una mascota a un cliente.
Inicializa las siguientes variables:
has_licensecon el valorTruehas_spacecon el valorTruehas_experiencecon el valorFalse
Escribe expresiones lógicas para determinar si:
can_sell_regular_pet: El cliente puede comprar una mascota regular si tiene O BIEN una licencia O BIEN experiencia, Y además debe tener espaciocan_sell_exotic_pet: El cliente puede comprar una mascota exótica si tiene AMBAS, licencia Y experiencia, Y además debe tener espaciocannot_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 dados:
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
# Inicializa las variables
# Calcula las 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 elimines 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)Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentals
4Operadores Parte 2
Operadores lógicos Parte 1Operadores lógicos Parte 2Repaso - Lógica simpleOperadores lógicos Parte 3Operadores lógicos Parte 47Calculadora para dividir la cuenta
Mensaje de bienvenidaObtener la entrada de datos10FizzBuzz con un giro
Descripción general del juegoLa función FizzBuzz2Variables
NúmerosStringBooleanConvenciones de nomenclaturaVariables vacíasRepaso - Inicializar variables8Bucles
Bucle ForBucle WhileBreakContinueRepaso - FactorialLa función RangeBucle anidadoRepaso - Entrada dinámica3Operadores Parte 1
Operadores aritméticosOperador móduloAtajos aritméticosResumen - Matemáticas simplesOperadores de comparación9Funciones
Declarar una funciónArgumentosRetornoResumen - Función SigmaResumen - Función de validaciónValores por defectoPractica por tu cuenta: Compilador de Python online