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

Condições com números e textos, sem armadilhas

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

O que você vai aprender

  • Converter o texto do input antes de comparar com número.
  • Reconhecer que comparação de strings diferencia maiúsculas.
  • Usar .lower() para normalizar respostas do usuário.
  • Usar o operador in para aceitar variações como sim e s.

Números que chegam como texto

Até aqui, os exemplos usavam valores escritos direto no código. Programa de verdade pergunta, e o módulo 5 avisou do detalhe que agora vira crucial: tudo o que o input devolve é texto, mesmo quando o usuário digita 25. Para o Python, "25" é uma sequência de dois caracteres, não um número. Tentar comparar esse texto com um número usando >= não passa despercebido: o programa quebra com TypeError na hora.

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

if idade >= 18:  # TypeError: '>=' not supported between 'str' and 'int'
    print("Maior de idade.")

# O input devolveu TEXTO ("25"), e texto não se compara
# com número usando >=. Falta converter antes.

A armadilha número um das condições: comparar o texto do input com um número. O TypeError aponta os dois tipos em conflito.

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

if idade >= 18:
    print("Maior de idade.")
else:
    print("Menor de idade.")

A correção: int() converte o texto em número inteiro antes de guardar. A comparação passa a funcionar.

A regra cabe numa frase: converta antes de comparar. Envolva o input com int() para inteiros ou float() para números com vírgula, no mesmo momento em que lê o dado. Fazendo isso na primeira linha, todas as condições dali para baixo trabalham com número de verdade, e o TypeError nunca aparece. Se o usuário digitar algo que não é número, como vinte, o int() levanta ValueError; o tratamento elegante disso vem no módulo 14, com try e except.

Comparando textos: maiúsculas importam

A segunda armadilha mora nas strings. O == compara textos caractere por caractere, e maiúscula é caractere diferente de minúscula: "Sim" == "sim" vale False. Agora imagine o estrago num programa que pergunta deseja continuar? e testa resposta == "sim". O usuário digita Sim, com inicial maiúscula porque o teclado do celular capitalizou sozinho, e o programa responde como se ele tivesse dito não. O código está tecnicamente correto e praticamente quebrado.

resposta = input("Deseja continuar? (sim/nao) ")

if resposta.lower() == "sim":
    print("Continuando...")
else:
    print("Até a próxima!")

O truque do .lower(): converte a resposta para minúsculas antes de comparar. Sim, SIM e sim passam a valer o mesmo.

O método .lower() devolve uma cópia do texto com todas as letras em minúsculas, sem alterar a variável original. Aplicado na hora da comparação, ele normaliza a entrada: tanto faz se o usuário digitou sim, Sim ou SIM, o valor comparado é sempre sim. É um padrão tão comum que vale decorar a dupla: entrada do usuário que será comparada com texto pede .lower() (ou .upper(), o irmão que joga tudo para maiúsculas; escolha um e seja consistente). O módulo 12 explora esses métodos de texto em profundidade.

Aceitando variações com o operador in

Falta a terceira armadilha: gente apressada responde s em vez de sim, e um teste com == só aceita uma grafia. Dava para encadear comparações com or, mas o Python tem um operador feito para isso: o in, que pergunta se um valor está dentro de uma coleção. A expressão resposta in ["sim", "s"] vira True quando a resposta é exatamente sim ou exatamente s. Combinado com o .lower(), cobre as variações mais comuns em uma linha legível.

resposta = input("Deseja continuar? (sim/nao) ").lower()

if resposta in ["sim", "s"]:
    print("Continuando...")
else:
    print("Até a próxima!")

O padrão profissional: .lower() na leitura e in na comparação. Aceita sim, Sim, SIM, s e S sem esforço.

Leia a primeira linha com atenção, porque ela encadeia duas coisas: o input lê o texto e o .lower() já o entrega em minúsculas, tudo antes de guardar na variável. Esse padrão, normalizar na entrada e comparar com in, aparece em quase todo programa interativo do resto do curso, do menu do módulo 8 ao gerenciador de tarefas do projeto final. Digite o exemplo no laboratório e teste as cinco grafias: sim, Sim, SIM, s e S. Depois teste não e veja o else assumir.

Teste rápido

O que acontece ao rodar: idade = input("Idade: ") e depois if idade >= 18: ?

Perguntas frequentes

Por que o Python não converte o texto do input sozinho?
Por segurança e previsibilidade. Nem todo texto digitado é número (pense em vinte ou 12a), e converter às escondidas produziria erros silenciosos difíceis de rastrear. O Python prefere quebrar cedo com um TypeError claro e deixar a conversão como decisão explícita sua.
Quando uso int() e quando uso float() na conversão?
int() para valores que são contagem ou idade, sempre inteiros; float() para valores com casas decimais, como altura, peso ou preço. Atenção ao detalhe do módulo 5: float() espera ponto, não vírgula, então 1.75 funciona e 1,75 gera ValueError.
Comparar strings com < e > funciona?
Funciona, e compara em ordem alfabética pela tabela de códigos dos caracteres: "abacate" < "banana" vale True. Só cuidado com maiúsculas, que vêm antes das minúsculas nessa tabela, e com acentos. Neste curso básico, use < e > para números e ==, != e in para textos.
O .lower() funciona com acentos, tipo NÃO virar não?
Sim. O .lower() do Python 3 entende Unicode, então "NÃO".lower() devolve "não" com o acento preservado. Se o seu programa aceita respostas com acento, inclua as duas grafias na lista do in, por exemplo resposta in ["nao", "não", "n"], porque muita gente digita sem acento.
O in funciona para procurar um pedaço dentro de um texto?
Funciona: "gato" in "o gato subiu" vale True, porque o in testa se a string menor aparece dentro da maior. É útil, mas diferente do uso desta aula, em que o in testa se a resposta é exatamente um dos itens de uma lista. O módulo 10 aprofunda o in com listas.
E se o usuário digitar vinte quando o programa espera número?
O int() levanta ValueError e o programa para, porque não existe conversão óbvia de vinte para 20. Por enquanto, conviva com isso: é o comportamento honesto. No módulo 14 você aprende try e except, a ferramenta que captura esse erro e responde com uma mensagem amigável em vez de quebrar.

Fontes

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