Módulo 6 - Operadores e cálculos
Operadores lógicos: and, or e not
10 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 01/07/2026
O que você vai aprender
- Ler e montar as tabelas verdade de and, or e not.
- Combinar duas ou mais comparações numa condição composta.
- Entender que o or do Python é inclusivo, não exclusivo.
- Evitar a armadilha clássica de escrever idade == 17 or 18.
Ouvir o resumo desta aula
Um recap de cerca de 2 minutos na voz do Valim, para ouvir no trânsito ou na academia.
Ler a transcrição do resumo
Resumo da aula: Operadores lógicos: and, or e not.
Os objetivos desta aula. Ler e montar as tabelas verdade de and, or e not. Combinar duas ou mais comparações numa condição composta. Entender que o or do Python é inclusivo, não exclusivo. Evitar a armadilha clássica de escrever idade == 17 or 18.
Veja o essencial, parte por parte.
Três palavras, três comportamentos. O and só devolve True quando os DOIS lados são True; qualquer False derruba tudo.
Combinando comparações de verdade. Na prática, você quase nunca escreve True and False diretamente.
Erros de leitura que pegam todo mundo. Escrever idade == 17 or 18 achando que compara com os dois números. Cada lado do or precisa ser uma comparação inteira.
Esse foi o resumo do essencial. Para se aprofundar, leia a aula completa e responda os exercícios.
Três palavras, três comportamentos
As comparações da aula passada respondem uma pergunta por vez. A vida raramente é assim. Para entrar num filme de classificação livre acompanhado, a pergunta real é dupla: tem idade suficiente OU está com responsável? Para dirigir: tem 18 anos E tem habilitação? Os operadores lógicos existem para costurar perguntas simples em perguntas compostas, e o Python os escreve como palavras mesmo: and, or e not.
| Primeiro valor | Segundo valor | and (e) | or (ou) |
|---|---|---|---|
| True | True | True | True |
| True | False | False | True |
| False | True | False | True |
| False | False | False | False |
As tabelas verdade de and e or, lado a lado. O and só sobrevive na primeira linha; o or só cai na última.
Um jeito de nunca mais esquecer: o and é o operador exigente, que precisa de unanimidade; um único False estraga o resultado inteiro, como um ingrediente vencido estraga a receita. O or é o operador satisfeito, que aceita qualquer True; para ele dar False, é preciso que tudo falhe. E o not é o contrariador profissional: recebe uma resposta e devolve a oposta.
print(True and True) # True
print(True and False) # False
print(True or False) # True
print(False or False) # False
print(not True) # False
print(not False) # TrueOs três operadores em estado puro. Rode no Playground e confira contra a tabela verdade.
Combinando comparações de verdade
Na prática, você quase nunca escreve True and False diretamente. Os lados do and e do or são comparações, que se resolvem primeiro (a precedência delas é maior) e entregam os True e False para o operador lógico combinar. O exemplo abaixo verifica os dois requisitos para dirigir.
idade = 19
tem_habilitacao = True
pode_dirigir = idade >= 18 and tem_habilitacao
print("Pode dirigir:", pode_dirigir) # Pode dirigir: TruePrimeiro o Python resolve idade >= 18 (True), depois combina com tem_habilitacao via and.
Dá para encadear mais de dois testes: idade >= 18 and tem_habilitacao and not carro_quebrado, por exemplo. A ordem de resolução entre os lógicos é not primeiro, and depois, or por último, mas você não precisa carregar essa tabela na memória: parênteses deixam qualquer combinação explícita, e a recomendação da aula 3 vale dobrada aqui. Expressão lógica confusa é berço de bug.
temperatura = 27
esta_chovendo = False
programa_de_praia = temperatura >= 25 and not esta_chovendo
print("Programa de praia:", programa_de_praia) # Programa de praia: TrueO not resolve primeiro (not False vira True), depois o and combina com o resultado de temperatura >= 25.
Rode esse exemplo no Playground e depois sabote-o: mude a temperatura para 20, troque esta_chovendo para True, inverta o not. Prever a saída antes de executar, e conferir se acertou, é o treino que transforma tabela verdade decorada em intuição. Duas linhas de dado, uma de lógica, e você já consegue explicar cada True e cada False que aparece.
Erros de leitura que pegam todo mundo
O maior risco dos operadores lógicos não é técnico, é de tradução. Nós usamos e e ou no dia a dia com folgas que o Python não tolera. Primeira folga: no português falado, ou costuma ser exclusivo (chá ou café significa um dos dois, não ambos). O or do Python é inclusivo: se os dois lados forem True, o resultado é True. Quem quer exatamente um dos dois precisa montar a condição com mais cuidado, e isso é raro no nível básico.
Segunda folga, e essa derruba muita gente: traduzir a idade é 17 ou 18 direto para idade == 17 or 18. Parece certo e está errado. O Python lê essa expressão como (idade == 17) or (18), e o número 18 sozinho conta como verdadeiro na avaliação lógica. Resultado: a expressão dá sempre verdadeiro, com qualquer idade, sem nenhuma mensagem de erro. O jeito certo repete a comparação dos dois lados do or.
idade = 30
# ERRADO: dá sempre um valor verdadeiro, com qualquer idade.
print(idade == 17 or 18) # 18 (que vale como True)
# CERTO: cada lado do or é uma comparação completa.
print(idade == 17 or idade == 18) # FalseA armadilha mais famosa dos operadores lógicos. Cada lado do or precisa ser uma pergunta completa.
Feche a aula com este hábito: ao escrever uma condição composta, leia-a em voz alta trocando and por e é necessário que e or por ou basta que. Se a frase soar estranha, a condição provavelmente está errada. Na aula que vem, você coloca operadores aritméticos, comparações e lógica a serviço de um programa completo: a sua calculadora de terminal.
Teste rápido
Por que a expressão idade == 17 or 18 está errada para testar se idade é 17 ou 18?
Perguntas frequentes
- Por que o Python usa palavras (and, or, not) em vez de símbolos?
- Escolha deliberada de legibilidade, coerente com a filosofia da linguagem. Muitas linguagens usam && e || para as mesmas operações; o criador do Python preferiu palavras que se leem como frase. A condição idade >= 18 and tem_habilitacao dispensa tradução mental.
- Posso encadear três ou mais condições com and e or?
- Pode, sem limite prático: a and b and c exige tudo verdadeiro, a or b or c se satisfaz com qualquer um. Quando misturar and com or na mesma expressão, use parênteses para deixar a ordem explícita, porque o and tem prioridade sobre o or e a leitura sem parênteses engana.
- Quem resolve primeiro: as comparações ou os operadores lógicos?
- As comparações. Na expressão idade >= 18 and saldo > 0, o Python calcula os dois lados primeiro, obtém dois valores bool e só então aplica o and. Entre os lógicos, a ordem é not, depois and, depois or; com parênteses, você não precisa decorar isso.
- O que significa dizer que o or do Python é inclusivo?
- Que ele devolve True também quando os dois lados são verdadeiros, e não apenas quando um só é. No português do dia a dia, ou muitas vezes soa como um ou outro, nunca ambos; o or do código não tem essa restrição. True or True dá True, sem drama.
- O not serve para quê, na prática?
- Para expressar a condição pelo lado que fica mais natural de ler. Se a variável esta_chovendo guarda True ou False, a condição para um passeio ao ar livre fica not esta_chovendo, que se lê exatamente como a intenção. Sem o not, você precisaria escrever esta_chovendo == False, que funciona, mas é mais verboso.
- Um número pode aparecer onde o Python espera True ou False?
- Pode, e é daí que vem a armadilha do idade == 17 or 18: na avaliação lógica, o zero conta como falso e qualquer outro número conta como verdadeiro. Esse comportamento tem usos legítimos em código avançado, mas no nível básico ele aparece principalmente como fonte de bug silencioso. Prefira comparações completas e explícitas.
Fontes
Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.