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) # TrueSegunda 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) # TrueEjemplo 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
Desafío
PrincipianteEstá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_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 común si tiene una licencia O experiencia, Y debe tener espaciocan_sell_exotic_pet: El cliente puede comprar una mascota exótica si tiene una licencia Y experiencia, Y debe tener espaciocannot_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)Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentos
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