A Função input() em Python: Como Capturar Dados do Usuário
Entenda como o input() captura dados durante a execução do programa, por que ele sempre retorna uma string e como converter o resultado para número com exemplos simples.
24/09/2026 Desenvolvimento
Todo programa que "conversa" com quem está usando ele precisa, em algum momento, perguntar alguma coisa: um nome, uma idade, uma opção de menu. Em Python, quem faz esse trabalho é a função input().
Neste artigo, vamos entender como o input() funciona, ver um exemplo simples e — o ponto que mais confunde quem está começando — por que ele sempre devolve uma string, mesmo quando você digita um número.
O que é o input()?
input() é uma função que pausa a execução do programa, exibe uma mensagem (opcional) no terminal e espera o usuário digitar algo e pressionar Enter. O texto digitado é devolvido como resultado da função.
nome = input("Digite o seu nome: ")
print("Olá,", nome, "! Bem-vindo!")
Saída no terminal:
Digite o seu nome: Ana
Olá, Ana ! Bem-vindo!
Repare no fluxo: o programa mostra a mensagem passada como argumento do input(), espera o usuário digitar, guarda o que foi digitado na variável nome e só então continua para a próxima linha.
O Caminho do Dado: Usuário → Entrada → Armazenamento → Processamento
É útil pensar no input() como uma esteira de quatro etapas:
- Usuário: a pessoa que está usando o programa.
- Entrada de dados: o
input()captura o que foi digitado no terminal. - Armazenamento: o valor capturado é guardado em uma variável.
- Processamento: o programa usa essa variável para calcular, comparar ou exibir algo.
É exatamente esse caminho que o exemplo do nome percorreu: o usuário digitou "Ana", o input() capturou o texto, a variável nome armazenou o valor, e o print() processou (exibiu) o resultado.
O Ponto Mais Importante: input() Sempre Retorna uma String
Não importa o que a pessoa digite — um nome, um número, uma data — o input() sempre entrega o resultado como texto (tipo str). Isso pega muita gente de surpresa na primeira vez.
Veja o que acontece se você tentar fazer uma conta direto com o resultado de um input():
ano_atual = 2026
ano_nascimento = input("Digite o ano em que você nasceu: ")
idade = ano_atual - ano_nascimento
print(f"Você tem {idade} anos.")
Saída no terminal:
Digite o ano em que você nasceu: 2005
Traceback (most recent call last):
...
TypeError: unsupported operand type(s) for -: 'int' and 'str'
Mesmo o usuário tendo digitado 2005, um número, o Python enxerga "2005" como texto. E não é possível subtrair um texto de um número — daí o TypeError.
Resolvendo com int() e float()
A solução é converter o texto para número antes de usá-lo em uma conta, com int() (números inteiros) ou float() (números com casas decimais):
ano_atual = 2026
ano_nascimento = input("Digite o ano em que você nasceu: ")
idade = ano_atual - int(ano_nascimento)
print(f"Você tem {idade} anos.")
Saída no terminal:
Digite o ano em que você nasceu: 2005
Você tem 21 anos.
A regra prática é simples:
- Vai trabalhar com números inteiros (idade, quantidade, ano)? Use
int(input(...)). - Vai trabalhar com números decimais (preço, peso, altura)? Use
float(input(...)). - Vai apenas exibir ou comparar texto (nome, e-mail, opção de menu)? Não precisa converter nada — deixe como string mesmo.
Exemplo Prático: Calculando o Total de uma Compra
Vamos juntar tudo em um exemplo um pouco maior: um programa que pede o preço e a quantidade de um produto, e calcula o total.
nome_produto = input("Nome do produto: ")
preco = float(input("Preço unitário (R$): "))
quantidade = int(input("Quantidade: "))
total = preco * quantidade
print(f"{quantidade}x {nome_produto} = R$ {total:.2f}")
Saída no terminal:
Nome do produto: Caderno
Preço unitário (R$): 15.90
Quantidade: 3
3x Caderno = R$ 47.70
Note que nome_produto não precisou de conversão (é usado como texto), enquanto preco e quantidade foram convertidos na mesma linha em que o input() foi chamado — um padrão muito comum em código Python.
E se o Usuário Digitar Algo Inválido?
Se o programa pede um número e a pessoa digita uma letra, o int() ou float() não conseguem converter, e o programa quebra com um ValueError:
idade = int(input("Digite sua idade: "))
Digite sua idade: vinte
Traceback (most recent call last):
...
ValueError: invalid literal for int() with base 10: 'vinte'
Para evitar que o programa pare de funcionar nessa situação, use try/except para tratar o erro:
entrada = input("Digite sua idade: ")
try:
idade = int(entrada)
print(f"Daqui a 5 anos você terá {idade + 5} anos.")
except ValueError:
print("Por favor, digite um número válido.")
Saída no terminal:
Digite sua idade: vinte
Por favor, digite um número válido.
Assim, em vez de o programa travar com um traceback assustador, ele avisa o usuário de forma amigável e pode, inclusive, pedir a digitação novamente.
Erros Comuns com input()
- Esquecer de converter o tipo: tentar somar ou subtrair o resultado do
input()direto, semint()oufloat(). - Converter texto que não é número: gera
ValueErrorse o usuário digitar algo como "abc" onde se esperava um número. - Concatenar string com número sem converter:
"Idade: " + idadetambém dá erro seidadefor um número — usestr(idade)ou, melhor ainda, um f-string comof"Idade: {idade}". - Não validar a entrada: assumir que o usuário sempre vai digitar exatamente o que o programa espera.
Boas Práticas
- Sempre escreva uma mensagem clara dentro do
input(), para o usuário saber o que digitar. - Converta o tipo assim que capturar o dado, para não esquecer depois.
- Use
try/exceptquando a entrada do usuário for crítica para o programa continuar funcionando. - Prefira f-strings (
f"...") para exibir variáveis junto com texto, em vez de concatenar com+.
Resumindo
- input(): pausa o programa, mostra uma mensagem e espera o usuário digitar algo.
- Sempre retorna string: mesmo que o usuário digite números, o resultado é texto.
- int() e float(): convertem o texto capturado em número inteiro ou decimal.
- ValueError: acontece quando se tenta converter um texto que não é um número válido.
- try/except: protege o programa de quebrar quando a entrada do usuário é inválida.
E você? Já tentou fazer uma conta com o resultado de um input() sem converter e tomou um TypeError de susto? Conte nos comentários!
Teste seu conhecimento
Responda às perguntas abaixo para revisar os principais pontos deste artigo.
1. Que tipo de dado o input() sempre retorna, independentemente do que o usuário digitar?
Resposta correta: C) str (string), independentemente do que foi digitado.
O artigo destaca que o input() sempre entrega o resultado como texto, mesmo que a pessoa digite um número.
2. No exemplo do cálculo de idade, por que "idade = ano_atual - ano_nascimento" gera um TypeError quando ano_nascimento vem direto do input()?
Resposta correta: B) Porque não é possível subtrair uma string (o retorno do input()) de um número inteiro.
Como o input() devolve texto, subtrair um "int" de um "str" gera TypeError. A correção é converter com int() antes da conta.
3. Qual conversão você deve usar para capturar o preço de um produto (com casas decimais) digitado pelo usuário?
Resposta correta: A) float(input(...))
O artigo explica que float() deve ser usado para números com casas decimais, como preços, enquanto int() serve para números inteiros.
4. No exemplo com try/except, o que acontece quando o usuário digita "vinte" em vez de um número para a idade?
Resposta correta: D) O bloco except captura o ValueError e exibe uma mensagem amigável, sem travar o programa.
O try/except evita que o ValueError gerado pela conversão inválida derrube o programa, permitindo tratar o erro de forma amigável.