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) # TrueSegunda 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 and ↔ or 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) # TrueEjemplo 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
Desafío
PrincipianteEstá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_licensecon el valorTruehas_spacecon el valorTruehas_experiencecon el valorFalse
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 espaciocan_sell_exotic_pet: El cliente puede comprar una mascota exotic si tiene AMBAS, 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 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)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