Menu
Coddy logo textTech

Operadores Lógicos Parte 4

Parte da seção Fundamentals do Journey de Python da Coddy — lição 19 de 77.

Ao trabalhar com expressões lógicas, às vezes precisamos simplificá-las ou reorganizá-las. Isso é particularmente útil ao lidar com condições complexas que combinam múltiplos operadores and e or.

Leis de De Morgan fornecem regras para transformar expressões lógicas. Essas transformações ajudam a tornar o código mais legível e fácil de entender.

Primeira Lei: not (A and B) é o mesmo que (not A) or (not B)

Observe que duas coisas acontecem quando você distribui not na expressão: cada operando é negado (A torna-se not A, B torna-se not B), e o operador inverteand torna-se or. O not não apenas nega os valores; ele também alterna o operador de conexão entre eles.

Por exemplo:

# Vamos verificar se um número NÃO está (entre 1 e 10)
number = 15

# Estas duas expressões são equivalentes:
result1 = not (number >= 1 and number <= 10)
result2 = (not number >= 1) or (not number <= 10)

print(result1)  # True
print(result2)  # True

Segunda Lei: not (A or B) é o mesmo que (not A) and (not B)

A mesma regra de dois passos se aplica aqui: cada operando é negado, e o operador inverte — desta vez or se torna and. Pense nisso como: distribuir not sempre inverte andor enquanto nega cada parte.

Por exemplo:

# Verificando se uma pessoa NÃO é (estudante ou empregada)
is_student = False
is_employed = False

# Estas duas expressões são equivalentes:
result1 = not (is_student or is_employed)
result2 = (not is_student) and (not is_employed)

print(result1)  # True
print(result2)  # True

Exemplo Complexo com AND e OR: Às vezes, você precisa de condições que combinam ambos os operadores. Aqui está um exemplo prático:

# Verificando se NÃO PODEMOS aceitar uma candidatura de emprego
# Rejeitamos se: (sem experiência E sem diploma) OU não atende ao requisito de idade

has_experience = False
has_degree = False
meets_age = True

# Condição complexa usando AND e OR
reject_application = (not has_experience and not has_degree) or not meets_age

print(reject_application)  # True (rejeitado porque não tem experiência E não tem diploma)
# Isso também pode ser escrito usando as Leis de De Morgan:
# aceitar = (experiência OU diploma) E atende à idade; rejeitar = não aceitar
accept_application = (has_experience or has_degree) and meets_age
reject_application2 = not accept_application

print(reject_application2)  # True (mesmo resultado, lógica diferente)

Quando usar as Leis de De Morgan:

  • Para tornar as condições negativas mais fáceis de ler
  • Para simplificar expressões lógicas complexas
  • Para converter entre diferentes representações da mesma lógica
challenge icon

Desafio

Iniciante

Você está ajudando um pet shop a criar um sistema para determinar se eles podem vender um animal de estimação para um cliente.

Inicialize as seguintes variáveis:

  • has_license com o valor True
  • has_space com o valor True
  • has_experience com o valor False

Escreva expressões lógicas para determinar se:

  • can_sell_regular_pet: O cliente pode comprar um animal comum se tiver OU uma licença OU experiência, E ele deve ter espaço
  • can_sell_exotic_pet: O cliente pode comprar um animal exótico se tiver AMBOS, licença E experiência, E ele deve ter espaço
  • cannot_sell_any_pet: A loja NÃO PODE vender nenhum animal se o cliente NÃO tiver licença E NÃO tiver experiência, OU se ele NÃO tiver espaço

Resultados Esperados com os valores fornecidos:

  • can_sell_regular_pet: True (tem licença e espaço)
  • can_sell_exotic_pet: False (não tem experiência)
  • cannot_sell_any_pet: False (tem licença e espaço)

Folha de consulta

Leis de De Morgan — regras para transformar expressões lógicas:

  • not (A and B)(not A) or (not B)
  • not (A or B)(not A) and (not B)

Ao distribuir not: cada operando é negado e o operador inverte (andor).

# Exemplo da Primeira Lei
result = not (number >= 1 and number <= 10)
result = (not number >= 1) or (not number <= 10)  # equivalente

# Exemplo da Segunda Lei
result = not (is_student or is_employed)
result = (not is_student) and (not is_employed)  # equivalente

Experimente você mesmo

# Inicializar variáveis

# Calcular condições
can_sell_regular_pet = 
can_sell_exotic_pet = 
cannot_sell_any_pet =

# Não delete as linhas abaixo
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 iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Fundamentals