Condições compostas e aninhamento

Escolher entre combinar condições e aninhar decisões.

Condições compostas e aninhamento

Objetivo da aula

Escolher entre combinar condições e aninhar decisões.

Regra desta aula: vamos assumir que você nunca viu este assunto antes. Nenhum termo importante será usado sem explicação e todo exemplo deve ser entendido linha por linha, não apenas copiado.

Começando do zero

Algumas regras dependem de mais de uma condição. Podemos combinar perguntas com and, or e not, ou colocar uma decisão dentro de outra. O objetivo não é “usar o máximo de operadores”; é escrever a regra de forma que uma pessoa consiga conferir.

Uma imagem mental para entender

Pense em uma autorização: “pode entrar se tiver ingresso e idade mínima”. Isso é uma regra composta. Já “se tiver ingresso, então verifique a idade” é uma forma aninhada de representar passos. As duas podem produzir resultados semelhantes, mas contam a história de maneiras diferentes.

Conceitos essenciais, sem pular etapas

Condição composta

Combina expressões booleanas em uma condição maior, como tem_ingresso and idade >= 18.

Aninhamento

É um if dentro de outro. Pode ser útil quando a segunda pergunta só faz sentido depois da primeira, mas excesso de níveis dificulta leitura.

Nomes intermediários

Guardar partes da regra em nomes como idade_ok e pagamento_ok pode tornar a condição final mais clara.

Parênteses

Podem deixar explícita a intenção em expressões com combinações de and e or. Quando a regra está difícil de explicar, quebre-a em partes.

Modelo mental

CONDIÇÕES SIMPLES → NOMES INTERMEDIÁRIOS → REGRA COMPOSTA → DECISÃO

Exemplo 1 — primeiro veja o programa inteiro

idade = 20
tem_ingresso = True
bloqueado = False

idade_ok = idade >= 18
pode_entrar = tem_ingresso and idade_ok and not bloqueado

if pode_entrar:
    print("Entrada liberada")
else:
    print("Entrada negada")

Agora vamos ler linha por linha

  • A comparação da idade vira um booleano nomeado.
  • not bloqueado exige que o estado bloqueado seja falso.
  • A variável pode_entrar reúne a regra completa em um nome legível.
  • O if fica simples: ele só pergunta pelo resultado da regra.

Saída esperada

Entrada liberada

Exemplo 2 — o mesmo conceito em outra situação

tem_ingresso = True
idade = 16

if tem_ingresso:
    if idade >= 18:
        print("Entrada liberada")
    else:
        print("Idade insuficiente")
else:
    print("Sem ingresso")

O aninhamento permite mensagens diferentes para motivos diferentes. Porém, conforme o número de níveis aumenta, funções e regras intermediárias podem ser melhores.

Experimento guiado

Não pule esta parte. Programação só começa a fazer sentido quando você prevê um resultado, executa e compara a previsão com o que realmente aconteceu.

  1. Teste o primeiro exemplo mudando uma condição por vez.
  2. Escreva uma tabela de casos: ingresso sim/não, idade suficiente sim/não, bloqueado sim/não.
  3. Compare a versão composta e a aninhada. Qual comunica melhor a necessidade do seu exercício?
  4. Evite mais níveis de aninhamento do que consegue explicar facilmente em voz alta.

Mini desafio

Uma compra é aprovada se houver estoque e o pagamento estiver aprovado, desde que a conta não esteja bloqueada. Modele a condição com nomes intermediários.

Solução comentada

tem_estoque = True
pagamento_aprovado = True
conta_bloqueada = False

compra_aprovada = tem_estoque and pagamento_aprovado and not conta_bloqueada
print("Compra aprovada?", compra_aprovada)

Depois de executar a solução, altere pelo menos um valor e explique por que o novo resultado mudou. Se você só copiou e não consegue explicar cada linha, refaça o desafio em uma versão menor.

Erros comuns e por que acontecem

  • Escrever uma condição longa sem separar conceitos.
  • Usar aninhamento profundo para regras que poderiam ser nomeadas e testadas separadamente.
  • Esquecer como not altera a leitura da condição.
  • Misturar “e” e “ou” sem parênteses ou sem testar combinações relevantes.

Cheque se você realmente entendeu

Quando um nome intermediário ajuda?

Resposta: Quando uma parte da regra tem significado próprio e torna a condição final mais legível.

Aninhamento é sempre ruim?

Resposta: Não. Ele é útil quando uma decisão depende claramente de outra, mas deve ser usado com cuidado.

Como testar uma condição composta?

Resposta: Variando sistematicamente as combinações dos valores booleanos e verificando fronteiras numéricas.

Resumo em linguagem simples

Nesta aula, o ponto central foi Condições compostas e aninhamento. Tente explicar o modelo CONDIÇÕES SIMPLES → NOMES INTERMEDIÁRIOS → REGRA COMPOSTA → DECISÃO sem olhar a tela. Depois, escreva um exemplo próprio menor que os apresentados. Esse exercício de explicação é parte do aprendizado, não um extra.

Conexão com a próxima aula

Na próxima aula, Projetando e testando regras, vamos aproveitar exatamente o que foi construído aqui. Você não precisa memorizar tudo; precisa conseguir reconhecer o conceito e reconstruí-lo com raciocínio e testes.