Módulo 7 - Condições com if, elif e else

Prática: pode votar? Pode tirar CNH?

11 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 01/07/2026

O que você vai aprender

  • Traduzir regras reais (voto e CNH) em faixas de idade.
  • Montar a escada if/elif/else na ordem correta.
  • Validar a entrada antes de decidir, rejeitando idades absurdas.
  • Testar o programa com valores de borda: 15, 16, 18, 69 e 70.

As regras antes do código

Todo bom programa começa longe do teclado: entendendo as regras. As nossas vêm da legislação brasileira. Para o voto, a Constituição define alistamento e voto facultativos para quem tem 16 ou 17 anos e para quem tem 70 ou mais; entre 18 e 69, o voto é obrigatório, e antes dos 16 não se vota. Para dirigir, o Código de Trânsito Brasileiro exige 18 anos completos (além de ser penalmente imputável e saber ler e escrever, detalhes que o nosso programa simplifica de propósito, avisando o usuário). São regras públicas, verificáveis no site do TSE e no portal gov.br, e as fontes desta aula apontam para lá.

IdadeVotoCNH
0 a 15Não votaNão pode tirar
16 e 17FacultativoNão pode tirar
18 a 69ObrigatórioPode tirar (a partir dos 18)
70 ou maisFacultativoPode dirigir, com a habilitação em dia

As faixas do nosso programa, montadas a partir das regras eleitorais e de trânsito do Brasil.

Com a tabela pronta, a estrutura do código se desenha sozinha: são quatro faixas que se excluem, o cenário perfeito para a escada if/elif/else da aula 4. E tem um quinto caso escondido, que separa programa de brinquedo de programa sério: a idade inválida. Se o usuário digitar -5 ou 300, responder sobre voto seria bobagem; o certo é avisar e não classificar. Essa validação entra como primeiro degrau da escada, seguindo um princípio que vale a carreira inteira: valide antes de decidir.

Construindo passo a passo

Hora de montar, peça por peça, usando tudo o que o módulo ensinou. Passo 1: ler a idade com input e converter com int na mesma linha, como manda a aula 5. Passo 2: o degrau de validação, rejeitando idades fora do intervalo plausível. Passo 3: as faixas em ordem crescente com a condição de menor que, o que dispensa condições compostas: quem não é menor que 16 e é menor que 18 só pode ter 16 ou 17. Passo 4: o else final assume a última faixa, os 70 ou mais.

idade = int(input("Qual é a sua idade? "))

if idade < 0 or idade > 130:
    print("Idade inválida. Digite um valor entre 0 e 130.")
elif idade < 16:
    print("Voto: ainda não pode votar.")
    print("CNH: ainda não pode tirar.")
elif idade < 18:
    print("Voto: facultativo. Você escolhe se vota.")
    print("CNH: ainda não pode tirar. Falta pouco!")
elif idade < 70:
    print("Voto: obrigatório dos 18 aos 69 anos.")
    print("CNH: pode tirar, a partir dos 18 anos.")
else:
    print("Voto: facultativo a partir dos 70 anos.")
    print("CNH: pode dirigir, com a habilitação em dia.")

print("Aviso: resumo educativo. Confira as regras no TSE e no gov.br.")

O verificador completo: validação primeiro, faixas em ordem crescente com <, else final para os 70 ou mais e aviso educativo.

Acompanhe a execução com idade 17. O degrau de validação dá False (17 está no intervalo). O idade < 16 dá False. O idade < 18 dá True: voto facultativo, CNH ainda não, e a escada encerra. Note a elegância da ordem crescente com menor que: cada degrau já sabe que os anteriores falharam, então idade < 18 sozinho significa, na prática, entre 16 e 17. É a regra da aula 4 aplicada de trás para frente: com <, comece do valor mais baixo e suba.

Desafios extras para fixar

O programa está pronto, e prontinho demais é convite para melhorar. Os desafios abaixo usam só o que o curso já ensinou, em ordem crescente de esforço. Faça pelo menos o primeiro antes da mini-prova: é nele que o padrão sim ou não da aula 5 volta ao palco.

  1. Pergunte no fim: "Quer consultar outra idade? (sim/nao)" e, se a resposta normalizada com .lower() estiver em ["sim", "s"], mostre uma mensagem de despedida diferente. No módulo 8, o while vai transformar essa pergunta num programa que repete de verdade.
  2. Acrescente a faixa da CNH provisória: quem tem exatamente 18 anos recebe a mensagem de que a primeira habilitação tem permissão provisória. Dica: um if aninhado dentro do degrau dos 18 aos 69, com 8 espaços de recuo.
  3. Peça também o nome da pessoa e use a f-string do módulo 12, ou a concatenação simples, para responder "Maria, seu voto é obrigatório". Personalização muda a cara do programa com uma linha.
  4. Desafio de leitura: reescreva a escada usando >= e a ordem decrescente (70 primeiro, depois 18, depois 16) e confirme que as respostas continuam idênticas nas bordas.

Fechado o desafio, respire e olhe para trás: neste módulo o seu código aprendeu a decidir. Condição, if, else, elif, comparações com dados do input e a indentação que amarra tudo, cada peça entrou no lugar e terminou combinada num programa com regras do mundo real. O módulo 8 dá o próximo salto: o while, que faz o programa repetir enquanto uma condição for verdadeira. A mesma condição desta semana, agora controlando quantas vezes as coisas acontecem.

Teste rápido

No verificador, uma pessoa de 17 anos cai no degrau elif idade < 18. Por que essa condição basta, sem testar idade >= 16 junto?

Perguntas frequentes

Essas regras de voto e CNH estão atualizadas?
As faixas usadas (voto facultativo aos 16 e 17 e a partir dos 70, obrigatório dos 18 aos 69, CNH aos 18) refletem a Constituição e o Código de Trânsito Brasileiro. O programa é um exercício educativo e simplifica requisitos extras, como a imputabilidade penal para a CNH. Para decisões reais, consulte o TSE e o gov.br, as fontes desta aula.
Por que validar a idade entre 0 e 130?
Porque o int() aceita qualquer inteiro, inclusive -5 e 3000, e classificar uma idade impossível produziria resposta sem sentido. O intervalo de 0 a 130 é uma escolha pragmática que cobre qualquer idade humana real. O importante é o princípio: rejeitar entrada absurda antes de decidir sobre ela.
Por que a escada usa < em ordem crescente e não >= em decrescente?
As duas formas funcionam, e o desafio 4 pede exatamente a versão com >=. A ordem crescente com < foi escolhida porque espelha a tabela de regras lida de cima para baixo, das idades menores para as maiores. Escolha a forma que você lê com mais fluência e seja consistente.
E se o usuário digitar a idade com letras, tipo dezessete?
O int() levanta ValueError e o programa para, comportamento honesto porém bruto. O tratamento elegante, capturar o erro com try e except e pedir de novo com uma mensagem amigável, é o tema central do módulo 14. Este programa volta lá, blindado.
Posso responder voto e CNH em duas escadas separadas?
Pode, e é um bom exercício: uma escada para o voto, outra com um if simples para a CNH (idade >= 18). O código fica mais longo e cada regra fica mais isolada, o que facilita mudar uma sem tocar na outra. Compare as duas versões e sinta a diferença: avaliar alternativas assim é treino de arquitetura em miniatura.
O que levo deste módulo para o resto do curso?
Praticamente tudo o que vem depois usa condição: o while do módulo 8 repete enquanto uma condição é True, o for filtra itens com if, as funções validam parâmetros e o projeto final decide cada opção do menu com uma escada como a desta aula. Se as bordas do verificador ficaram claras, você está pronto para seguir.

Fontes

Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.