Trilha de aprendizado · Nível 2 · Tutorial 2

Combinar condições com and, or e not

Expressar regras que dependem de várias condições, controlando o agrupamento e reconhecendo quando uma expressão deixa de ser avaliada.

  • Nível: Iniciante
  • Duração: 18 min
  • 8 passos
Combinar condições com and, or e not

O que você vai percorrer

  1. Exigir duas condições com and Combine dois requisitos com and e reconheça quando a condição composta é verdadeira. 2 min
  2. Aceitar alternativas com or Combine duas comparações quando basta que pelo menos uma delas seja verdadeira. 2 min
  3. Negar uma condição com not Use not para expressar a ausência de um estado e prever o resultado de uma negação. 1 min
  4. Controlar o significado com parênteses Use a precedência e os parênteses para escrever condições que correspondam à regra desejada. 2 min
  5. Reconhecer o curto-circuito Descubra quais operandos são avaliados e quando Python já pode encerrar uma condição. 2 min
  6. Descobrir o valor retornado por and e or Preveja o valor exato de uma expressão lógica, distinguindo o operando retornado de sua interpretação booleana. 3 min
  7. Proteger uma divisão com curto-circuito Use uma verificação à esquerda de and para impedir a divisão por zero e confira quando a condição final é verdadeira. 2 min
  8. Aplicar e revisar as condições combinadas Construa uma regra de minijogo, confira casos no Python local e revise agrupamento, retorno e curto-circuito. 4 min

O que você vai aprender

  • Combinar comparações com and para exigir condições simultâneas e com or para aceitar alternativas.
  • Negar uma condição com not.
  • Usar precedência e parênteses para tornar explícito o significado de uma condição composta.
  • Identificar quais operandos são avaliados e qual valor é retornado por and e or.
  • Construir uma condição com curto-circuito que evite uma divisão por zero.

Antes de começar

  • Avaliar condições com comparações

Passo 1 de 8

Exigir duas condições com and

Combine dois requisitos com and e reconheça quando a condição composta é verdadeira.

Os dois requisitos precisam ser atendidos

Em um jogo, uma fase exige nível de pelo menos 5 e pelo menos 10 moedas. Use and para combinar essas exigências: a condição composta só será verdadeira quando as duas comparações forem verdadeiras.

Uma regra, duas comparações

python
nivel = 6
moedas = 12

print(nivel >= 5 and moedas >= 10)  # True

O que é um operando?

Cada expressão combinada pelo operador é um operando. Aqui, nivel >= 5 é o operando à esquerda de and, e moedas >= 10 é o operando à direita.

Traduza a regra

Para continuar no jogo, é preciso ter pelo menos 100 pontos e mais de zero vidas. Qual expressão representa essa regra?

As quatro combinações

Com dois operandos booleanos, and tem estas quatro combinações. Basta que um dos requisitos seja falso para o resultado ser False.

Tabela de resultados de and

Tabela com colunas A, B e A and B. True e True resulta em True; True e False resulta em False; False e True resulta em False; False e False resulta em False.

Somente a combinação True com True produz True.

Um requisito não basta

Com pontos = 120 e vidas = 0, a expressão pontos >= 100 and vidas > 0 resulta em True.

Passo 2 de 8

Aceitar alternativas com or

Combine duas comparações quando basta que pelo menos uma delas seja verdadeira.

Basta uma condição verdadeira

Uma alternativa ou as duas

Em um jogo, o bônus é liberado para quem tem pelo menos 100 pontos ou pelo menos 5 moedas.

Use or entre as comparações: basta uma delas ser verdadeira. Se as duas forem verdadeiras, o bônus também é liberado.

Pontos suficientes, mesmo com poucas moedas

A primeira comparação é verdadeira. Isso basta para a condição com or resultar em True.

python
pontos = 120
moedas = 2

print(pontos >= 100 or moedas >= 5)  # True

E quando as duas são verdadeiras?

Confira a regra do bônus

Com pontos = 120 e moedas = 8, a expressão pontos >= 100 or moedas >= 5 resulta em True.

O que muda entre and e or?

A diferença está nos casos mistos

Você já usou and para exigir as duas condições. Com or, basta pelo menos uma.

Na tabela, A e B representam os resultados de duas comparações. Observe as linhas em destaque: quando apenas uma é verdadeira, and resulta em False, mas or resulta em True.

As quatro combinações

Tabela com colunas A, B, A and B e A or B. Linhas: True, True, True, True; True, False, False, True; False, True, False, True; False, False, False, False. As duas linhas centrais estão destacadas.

Com or, somente a combinação False e False resulta em False.

Traduza uma regra de alternativas

Qual operador usar?

Uma fase é liberada para quem tem pelo menos 3 vitórias ou pelo menos 100 pontos. Também vale atender aos dois requisitos.

Complete com and ou or:

vitorias >= 3 ___ pontos >= 100

Passo 3 de 8

Negar uma condição com not

Use not para expressar a ausência de um estado e prever o resultado de uma negação.

Inverta a condição

Em Python, coloque not antes de uma condição para negar seu significado: verdadeiro vira falso, e falso vira verdadeiro. Por exemplo, not pausado expressa “não está pausado”.

Duas linhas mostram a inversão: True passa por not e resulta em False; False passa por not e resulta em True.

not sempre inverte o valor lógico da condição.

Negando um estado e uma comparação

A negação produz um resultado; ela não altera o valor guardado na variável.

python
pausado = False
print(not pausado)  # True

pontos = 8
print(not (pontos >= 10))  # True: os pontos não chegam a 10

Expresse a ausência de um estado

Complete com um operador para que liberado represente “o jogo não está bloqueado”.

bloqueado = False
liberado = ___ bloqueado
print(liberado)  # True

O retorno é sempre booleano

not também aceita valores de outros tipos. Ele usa a interpretação booleana que você já conhece e a inverte. O resultado é sempre True ou False, nunca um número, um texto ou None.

python
print(not 0)      # True
print(not 7)      # False
print(not "")     # True
print(not None)   # True

Preveja a negação

Qual é o valor de not "False"?

Passo 4 de 8

Controlar o significado com parênteses

Use a precedência e os parênteses para escrever condições que correspondam à regra desejada.

Qual operador tem prioridade?

Precedência define o agrupamento

Ao misturar operadores em Python, a prioridade, da maior para a menor, é: comparações → not → and → or.

Os parênteses permitem explicitar ou mudar esse agrupamento. Por exemplo, not pontos >= 10 significa not (pontos >= 10).

As duas expressões abaixo têm o mesmo significado: o and tem prioridade sobre o or.

Mesmo significado, agrupamento mais visível

python
vip or ingresso and aberto
vip or (ingresso and aberto)

Organize as prioridades

Ordene da maior para a menor precedência, considerando uma expressão sem parênteses.

  1. Comparações: ==, !=, <, <=, >, >=
  2. and
  3. not
  4. or

Mesmas condições, regras diferentes

O requisito vale para quem?

vip or (ingresso and aberto): ser VIP basta; a outra alternativa exige ingresso e local aberto.

(vip or ingresso) and aberto: aceita VIP ou ingresso, mas o local precisa estar aberto em ambos os casos.

Com vip = True, ingresso = False e aberto = False, a primeira expressão resulta em True; a segunda, em False.

Veja o alcance dos parênteses

Dois agrupamentos. No primeiro, vip é uma alternativa ao conjunto ingresso e aberto. No segundo, o conjunto vip ou ingresso está ligado por and ao requisito aberto.

Os contornos destacam os grupos. Na segunda regra, aberto é obrigatório para as duas alternativas.

Exemplo

Parênteses também delimitam o not

not pausado or bloqueado significa (not pausado) or bloqueado: o not nega apenas pausado.

Já not (pausado or bloqueado) nega o grupo inteiro. Essa condição só é verdadeira quando ambos os indicadores são falsos.

Prefira deixar o agrupamento visível quando houver várias regras juntas.

Escreva a regra completa

Alternativa com requisitos obrigatórios

As variáveis vip, ingresso, pausado e bloqueado são booleanas.

Escreva uma expressão para esta regra: é preciso ser VIP ou ter ingresso; além disso, o jogo não pode estar pausado nem bloqueado.

Use and, or, not e parênteses. Explique qual grupo o not nega.

Escreva pelo menos 25 caracteres (0/25).

Passo 5 de 8

Reconhecer o curto-circuito

Descubra quais operandos são avaliados e quando Python já pode encerrar uma condição.

Nem toda condição é avaliada

Comece pelo operando esquerdo

Em uma expressão com dois operandos, Python avalia primeiro o da esquerda.

  • Com and, se o esquerdo for falso em contexto booleano, o direito não é avaliado.
  • Com or, se o esquerdo for verdadeiro em contexto booleano, o direito não é avaliado.

Essa interrupção é chamada de curto-circuito. Nos demais casos, Python precisa avaliar o operando direito.

Onde a avaliação para

Dois rastreamentos: em (2 > 5) and (9 == 9), a primeira comparação resulta em False e a segunda não é avaliada. Em (8 > 3) or (4 < 7), a primeira resulta em True e a segunda não é avaliada.

Cinza significa “não avaliado”, e não “falso”. Nos dois exemplos, basta avaliar a comparação da esquerda.

Parar ou continuar?

Associe cada caso à avaliação

Em cada expressão, o operando esquerdo já foi avaliado. Associe ao que acontece com o direito.

Toque em um item e depois no par correspondente.

Agrupar não é executar primeiro

Um grupo inteiro pode ser ignorado

python
print((8 > 3) or (2 > 5) and (9 == 9))  # True

Precedência e avaliação têm papéis diferentes

Como and tem precedência sobre or, o agrupamento é:

(8 > 3) or ((2 > 5) and (9 == 9))

Isso não manda executar o grupo com and primeiro. Python começa pelo operando esquerdo do or: 8 > 3 resulta em True.

O or então ignora todo o grupo à direita. Nem 2 > 5 nem 9 == 9 são avaliados. A precedência define o agrupamento; o curto-circuito determina até onde a avaliação vai.

Rastreie a avaliação

O que Python chega a avaliar?

Analise sem executar:

(2 > 5) and (9 == 9) or (4 < 7)

Quais comparações são avaliadas, em que ordem e qual é ignorada? Justifique e indique o resultado final.

Escreva pelo menos 30 caracteres (0/30).

Passo 6 de 8

Descobrir o valor retornado por and e or

Preveja o valor exato de uma expressão lógica, distinguindo o operando retornado de sua interpretação booleana.

Testar não é converter

Você já viu quando o curto-circuito interrompe a avaliação. Agora observe o que a expressão devolve: and e or retornam o valor de um dos operandos, sem convertê-lo automaticamente para bool.

Com dois operandos:

  • and: retorna o esquerdo se ele for falso em contexto booleano; caso contrário, avalia e retorna o direito.
  • or: retorna o esquerdo se ele for verdadeiro em contexto booleano; caso contrário, avalia e retorna o direito.

O teste booleano orienta a escolha, mas não altera o valor escolhido.

Valor, teste e retorno

Tabela com expressão, interpretação booleana do operando esquerdo e retorno exato: 0 and "ok", False, 0; 2 and "ok", True, "ok"; "oi" or 7, True, "oi"; None or 7, False, 7.

A coluna do meio mostra o teste do operando esquerdo; a última mostra o valor realmente retornado.

Qual valor é devolvido?

Associe cada expressão ao valor exato retornado.

Toque em um item e depois no par correspondente.

O contraste com not

Diferentemente de and e or, not sempre retorna um bool. Se você quiser converter explicitamente o resultado de and ou or para bool, use bool(...).

Compare as saídas indicadas nos comentários:

python
print(5 and 8)        # 8
print(bool(5 and 8))  # True
print(not 8)          # False
print(not 0)          # True

Atenção

Não confunda valor com interpretação

Em 5 and 8, o resultado é o número 8, não True. Ele é verdadeiro em contexto booleano, mas continua sendo um int. Da mesma forma, 0 and 8 retorna o número 0, não False.

Confira o valor e o tipo

Qual é o valor exato retornado por "False" or 0?

Passo 7 de 8

Proteger uma divisão com curto-circuito

Use uma verificação à esquerda de and para impedir a divisão por zero e confira quando a condição final é verdadeira.

Verifique antes de dividir

Queremos verificar se uma divisão resulta em um valor maior que 2, mas só podemos dividir quando o denominador for diferente de zero:

denominador != 0 and numerador / denominador > 2

A proteção fica à esquerda de and. Se ela for falsa, a comparação que contém a divisão nem será avaliada.

Dois caminhos possíveis

Fluxo de avaliação: primeiro, denominador != 0. Se for falso, a divisão é ignorada e o resultado é False. Se for verdadeiro, avalia-se numerador / denominador > 2, que pode resultar em True ou False.

Passar pela proteção permite avaliar a divisão; não garante que o resultado final seja True.

Atenção

Inverter a ordem remove a proteção

Em numerador / denominador > 2 and denominador != 0, a divisão vem primeiro. Se o denominador for zero, ocorre ZeroDivisionError antes de chegar à verificação.

Complete a proteção

Preencha com o operador de comparação que significa “diferente de”:

denominador ____ 0 and numerador / denominador > 2

Confira três casos no seu Python

Antes de executar, preveja os três resultados. Depois, copie o código para seu editor ou interpretador Python e execute no seu computador.

Observe: em qual caso a divisão é ignorada? Em qual ela acontece, mas a condição ainda resulta em False?

python
numerador = 10

denominador = 0
print(denominador != 0 and numerador / denominador > 2)

denominador = 2
print(denominador != 0 and numerador / denominador > 2)

denominador = 5
print(denominador != 0 and numerador / denominador > 2)

Explique o que protege a operação

Quais são os três resultados do código anterior? Indique quando a divisão é ignorada e quando ela é avaliada, mas a condição resulta em False. Por que colocar a divisão à esquerda de and causaria erro no caso zero?

Escreva pelo menos 30 caracteres (0/30).

Passo 8 de 8

Aplicar e revisar as condições combinadas

Construa uma regra de minijogo, confira casos no Python local e revise agrupamento, retorno e curto-circuito.

Uma regra completa para o minijogo

Quando liberar o desafio?

O desafio será liberado quando todos estes requisitos forem atendidos:

  • O jogador tem nivel >= 3 ou possui convite.
  • O jogo não está pausado.
  • tentativas é diferente de zero.
  • A razão pontos / tentativas é maior ou igual a 3.

convite e pausado são booleanos. Agrupe as alternativas de habilitação e coloque a proteção antes da divisão.

Alternativas dentro de requisitos obrigatórios

Dois requisitos alternativos, nivel >= 3 e convite, estão em um único grupo ligado por or. Esse grupo se conecta por and a not pausado, tentativas != 0 e pontos / tentativas >= 3, nessa ordem.

O convite substitui o requisito de nível, mas não dispensa os demais requisitos.

Escreva e faça suas previsões

Casos para conferir

Antes de executar, preveja o resultado da condição em cada caso. Os valores abaixo serão usados na prática local.

| Caso | nivel | convite | pausado | pontos | tentativas |
|---|---|---|---|---|---|
| A | 3 | False | False | 12 | 3 |
| B | 1 | True | False | 12 | 3 |
| C | 3 | False | True | 12 | 3 |
| D | 1 | False | False | 12 | 3 |
| E | 3 | False | False | 12 | 0 |
| F | 3 | False | False | 3 | 3 |

Monte a condição

Escreva a condição completa, registre suas previsões para A–F e explique por que as alternativas precisam ficar entre parênteses.

Escreva pelo menos 40 caracteres (0/40).

Confira no seu Python

Execute um caso por vez

No seu editor ou interpretador Python, use o código abaixo para conferir o caso A. Depois, substitua as cinco primeiras atribuições pelos valores de cada caso da tabela e execute novamente.

Anote o resultado de A–F e compare com suas previsões. No caso E, observe se ocorre erro de divisão por zero. Não é necessário enviar arquivos.

Código completo de conferência

python
nivel = 3
convite = False
pausado = False
pontos = 12
tentativas = 3

liberado = (
    (nivel >= 3 or convite)
    and not pausado
    and tentativas != 0
    and pontos / tentativas >= 3
)

print("Desafio liberado:", liberado)

Explique o que aconteceu

Resultado não é o mesmo que avaliação

Relate os resultados observados em A–F. Em quais casos a divisão não foi avaliada? Por que F retorna False mesmo com denominador diferente de zero?

Para fechar: em "jogar" or None, qual é o valor exato retornado, qual é sua interpretação booleana e qual operando é ignorado?

Escreva pelo menos 40 caracteres (0/40).

Resumo

Lista de verificação

Ao escrever uma condição composta, confira:

  • Operador adequado: and exige requisitos simultâneos; or aceita alternativas; not nega uma condição.
  • Agrupamento claro: use parênteses para deixar explícito quais condições formam um conjunto.
  • Retorno esperado: and e or retornam operandos; not sempre retorna um booleano.
  • Ordem segura: a proteção deve vir antes da operação que depende dela.
  • Avaliação real: um resultado False não informa, sozinho, quais partes foram avaliadas.

Tutorial concluído

Parabéns! Você concluiu: Combinar condições com and, or e not

Você praticou a construção de uma regra com alternativas, requisitos obrigatórios e divisão protegida. Agora pode conferir tanto o resultado quanto o caminho de avaliação de uma condição.

Baixe o Aplicativo agora para ter acesso a + de 5000 cursos gratuitos, exercícios, certificado e muito conteúdo sem pagar nada!

  • Cursos online 100% gratuitos do início ao fim

    Milhares de cursos online em vídeo, ebooks e áudiobooks.

  • Mais de 60 mil exercícios gratuitos

    Para testar seus conhecimentos no decorrer dos cursos online

  • Certificado Digital gratuito válido em todo o Brasil

    Gerado diretamente na galeria de fotos do seu celular e enviado ao seu e-mail

Aplicativo Cursa na tela de ebook, na tela de curso em vídeo e na tela de exercícios do curso, mais o certificado de conclusão de curso