Módulo 5 - Entrada de dados com input()

Convertendo texto para número: int() e float()

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

O que você vai aprender

  • Gravar a regra de ouro: input() SEMPRE devolve str, mesmo digitando números.
  • Converter respostas com int(input()) e float(input()).
  • Explicar por que "25" + "5" resulta em "255" em vez de 30.
  • Decidir quando converter na hora da pergunta e quando converter depois.

A regra de ouro do input()

Existe uma regra sobre o input() que vale tatuar na memória, porque ela explica o erro mais comum de quem chega neste ponto do curso: o input() devolve SEMPRE texto. Sempre. O usuário digitou o nome? Texto. Digitou a cidade? Texto. Digitou 25, um número redondo, sem espaço, sem letra? Texto do mesmo jeito. Para o input(), tudo o que atravessa o teclado é uma sequência de caracteres, e ele entrega essa sequência como str, o tipo que você conheceu no módulo 4.

idade = input("Quantos anos você tem? ")
print(type(idade))
# Saída (digitando 25): <class 'str'>
# É TEXTO, mesmo o usuário tendo digitado um número.

O type() não mente: a resposta do input() é str, digite o usuário o que digitar.

Isso tem uma consequência traiçoeira, porque o programa não quebra na hora: ele funciona errado. O sinal de + entre dois números soma; entre dois textos, ele CONCATENA, ou seja, emenda um no fim do outro. É o mesmo símbolo fazendo dois trabalhos diferentes, e o Python escolhe o trabalho olhando o tipo dos valores. Veja o estrago em câmera lenta:

idade = input("Quantos anos você tem? ")  # usuário digita 25
daqui_a_5 = idade + "5"
print(daqui_a_5)
# Saída: 255  <- ERRADO! Queríamos 30.
# "25" + "5" emendou os textos em vez de somar os números.

O bug silencioso: nenhum erro na tela, só um resultado absurdo. 25 mais 5 virou 255.

Nenhuma mensagem de erro apareceu, e é isso que torna esse bug tão educativo: o Python fez exatamente o que foi pedido, emendar dois textos. O problema é que o pedido não era esse. Quando um programa seu mostrar um número esquisitamente grande depois de um input(), desconfie primeiro disto: alguma soma virou emenda porque o valor ainda era texto.

int() e float() na prática

A solução é converter o texto para número antes de fazer contas, e o Python dá duas funções para isso, uma para cada tipo numérico do módulo 4. A int() transforma o texto num inteiro: int("25") vira o número 25. A float() transforma num decimal: float("1.75") vira 1.75. O jeito mais comum de usar é embrulhando o input() direto, na mesma linha:

idade = int(input("Quantos anos você tem? "))
altura = float(input("Qual é a sua altura em metros? "))

print("Daqui a 5 anos você terá", idade + 5, "anos.")
print("O dobro da sua altura é", altura * 2, "metros.")

int(input()) e float(input()): a resposta já entra na variável como número, pronta para contas.

Leia a primeira linha de dentro para fora, que é como o Python a executa: primeiro o input() roda, pausa e colhe o texto "25"; depois o int() pega esse texto e o converte no número 25; por fim, a atribuição guarda o 25 na variável idade. Três operações encadeadas numa linha só. Agora idade + 5 dá 30, como o mundo espera. Repare também na altura: o usuário digita 1.75 com ponto, e a float() entende. O ponto versus vírgula ainda vai dar conversa na próxima aula.

Você escreveUsuário digitaA variável guardaTipo
input("Nome: ")Maria"Maria"str
input("Idade: ")25"25" (texto!)str
int(input("Idade: "))2525int
float(input("Altura: "))1.751.75float
float(input("Preço: "))1010.0float

O mesmo teclado, destinos diferentes: quem decide o tipo é a conversão, não o usuário.

Converter na hora ou depois?

Fica a pergunta de estilo: converter embrulhando o input(), tudo numa linha, ou guardar o texto primeiro e converter depois, em duas etapas? As duas formas funcionam e produzem o mesmo resultado. A versão em uma linha é a mais comum em código Python por aí, e é a que este curso usa como padrão quando a resposta é claramente um número. A versão em duas etapas deixa cada passo visível, o que ajuda a depurar quando algo dá errado:

# Versão direta (padrão do curso):
idade = int(input("Idade: "))

# Versão em duas etapas (mesmo resultado):
resposta = input("Idade: ")
idade = int(resposta)

Dois caminhos para o mesmo lugar. Escolha um e seja consistente dentro do programa.

O critério para decidir é simples: converta na hora quando a resposta é um número que o programa vai usar em contas, que é o caso da idade e da altura. Deixe como texto quando for nome, cidade ou qualquer frase, porque converter texto comum para número quebra o programa, assunto sério da próxima aula. E existe um terceiro caso, mais raro no nível básico: quando você precisa do valor nas duas formas, como um CEP que ora é exibido, ora validado. Aí guardar o texto e converter só onde precisa evita conversões de ida e volta. No Playground ou no terminal, refaça agora o exemplo do 255 com a conversão no lugar e veja o 30 aparecer; consertar o bug com as próprias mãos fixa a regra melhor que reler a aula.

Teste rápido

O usuário digita 25 num input() sem conversão. Por que idade + "5" resulta em "255"?

Perguntas frequentes

Por que o Python não converte para número sozinho quando eu digito 25?
Porque ele não tem como adivinhar a sua intenção. O texto 25 pode ser uma idade para somar, mas também o número de uma casa ou o começo de um CEP, valores que ninguém soma. O Python prefere entregar o dado cru, como texto, e deixar a decisão de converter com quem conhece o programa: você.
Qual a diferença entre int(input()) e float(input())?
A int() produz um número inteiro e a float(), um decimal. Use int() para o que se conta em unidades inteiras, como idade e quantidade, e float() para o que tem casas decimais, como altura, peso e preço. Detalhe: float("10") funciona e vira 10.0, mas int("1.75") dá erro, porque 1.75 não é inteiro.
Posso converter qualquer texto com int()?
Não. A int() só aceita texto com cara de número inteiro, como "25" ou "-3". Se o texto for "vinte e cinco", "1.75" ou vier vazio, o Python levanta um ValueError e o programa para. A próxima aula disseca exatamente esse erro e como evitá-lo.
E se eu quiser mostrar um número dentro de uma frase, preciso converter de volta para texto?
Depende de como monta a frase. Com vírgulas no print, como print("Você terá", idade + 5, "anos"), não precisa: o print exibe números numa boa. Já para emendar com +, seria preciso a função str() fazendo o caminho inverso. No módulo 12, as f-strings resolvem isso com muito mais elegância.
Digitei 25 com um espaço antes e funcionou. Por quê?
Cortesia da conversão: int() e float() ignoram espaços no começo e no fim do texto, então " 25 " converte para 25 sem drama. O que elas não perdoam é caractere estranho no meio, como letra, vírgula ou símbolo. "2 5" com espaço no meio, por exemplo, dá ValueError.
Multiplicar texto também dá resultado estranho como o + ?
Dá um resultado curioso: texto vezes número inteiro REPETE o texto. "25" * 2 produz "2525", não 50. Já texto vezes texto dá TypeError, porque nem o Python acha sentido nisso. É mais um motivo para converter respostas numéricas antes de qualquer conta.

Fontes

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