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 reordená-las. Isso é particularmente útil ao lidar com condições complexas que combinam múltiplos operadores and e or.
As 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.
First Law: not (A and B) é o mesmo que (not A) or (not B)
Note que duas coisas acontecem quando você distribui not na expressão: cada operando é negado (A se torna not A, B se torna not B), e o operador inverte — and se torna or. O not não apenas nega os valores; ele also alterna o operador de conexão between eles.
Por exemplo:
# Vamos verificar se um número NÃO está (entre 1 e 10)
number = 15
# Essas 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 duas etapas se aplica aqui: cada operando é negado, e o operador inverte — desta vez or se torna and. Pense assim: distribuir not sempre inverte and ↔ or enquanto nega cada parte.
Por exemplo:
# Verificando se uma pessoa NÃO é (um estudante ou empregado)
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 Ambos 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 AND sem diploma) OR não atende ao requisito de idade
has_experience = False
has_degree = False
meets_age = True
# Condição complexa usando tanto AND quanto OR
reject_application = (not has_experience and not has_degree) or not meets_age
print(reject_application) # True (rejeitado porque sem experiência AND sem diploma)# Isso também pode ser escrito usando as Leis 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 (mesmo resultado, lógica diferente)Quando usar as Leis de De Morgan:
- Para tornar 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 pet 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 pet comum se tiver licença OU experiência, E ele deve ter espaçocan_sell_exotic_pet: O cliente pode comprar um pet 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 pet 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(sem experiência)cannot_sell_any_pet:False(tem licença e espaço)
Experimente você mesmo
# Inicialize as variáveis
# Calcule as condições
# Substitua cada valor de placeholder abaixo pela expressão lógica correta
can_sell_regular_pet = False
can_sell_exotic_pet = False
cannot_sell_any_pet = False
# 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 2Pratique por conta própria: Compilador de Python online