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.
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: Condições com números e textos, sem armadilhas.
Os objetivos desta aula. 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.
Veja o essencial, parte por parte.
Números que chegam como texto. O input SEMPRE devolve texto: compare com número só depois de converter com int() ou float().
Comparando textos: maiúsculas importam. "Sim" == "sim" vale False: o S maiúsculo é outro caractere.
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.
Esse foi o resumo do essencial. Para se aprofundar, leia a aula completa e responda os exercícios.
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.