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 inverte — and 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) # TrueSegunda 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 and ↔ or 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) # TrueExemplo 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
Desafio
InicianteVocê 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_licensecom o valorTruehas_spacecom o valorTruehas_experiencecom o valorFalse
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çocan_sell_exotic_pet: O cliente pode comprar um animal exótico se tiver AMBOS, licença E experiência, E ele deve ter espaçocannot_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 (and ↔ or).
# 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) # equivalenteExperimente 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)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
4Operadores Parte 2
Operadores Lógicos Parte 1Operadores Lógicos Parte 2Recapitulação - Lógica SimplesOperadores Lógicos Parte 3Operadores Lógicos Parte 47Calculadora de Divisão de Conta
Mensagem de Boas-vindasObtendo Entrada10FizzBuzz com um Diferencial
Visão Geral do JogoA Função FizzBuzz2Variáveis
NúmerosStringBooleanoConvenções de NomenclaturaVariáveis VaziasRecapitulação - Inicializar Variáveis8Laços de Repetição
Loop ForLoop WhileBreakContinueRecapitulação - FatorialA Função RangeLoops AninhadosRecapitulação - Entrada Dinâmica11Fundamentos de Listas
Declarando uma ListaAcessando Elementos da ListaModificando ListasMétodos de ListaRecapitulação - Lista de ProdutosRecapitulação - Lista InvertidaTupla14Rastreador de Despesas Diárias
Visão Geral do ProjetoSair do Programa3Operadores Parte 1
Operadores AritméticosOperador de MóduloAtalhos AritméticosRecapitulação - Matemática SimplesOperadores de Comparação6Entrada e Saída Básica
SaídaSaída com VariáveisEntradaConversão de TiposRecapitulação - Até 120Recapitulação - Verdadeiro ou Falso9Funções
Declarar uma FunçãoArgumentosRetornoRecapitulação - Função SigmaRecapitulação - Função de ValidaçãoValores Padrão12Iterando sobre Sequências
Iterando sobre ElementosA Função EnumerateIterando sobre Strings Parte 1Iterando sobre Strings Parte 2