Entrada do Usuário em Python
Aprenda a ler entradas do usuário em Python com input(), converter tipos, validar dados, tratar erros e criar programas interativos de linha de comando.
A função embutida input() do Python permite que seus programas pausem e aguardem o usuário digitar algo. Este capítulo cobre tudo o que você precisa para ler, validar e converter entradas do usuário — desde um prompt de uma linha até loops de entrada robustos que rejeitam dados inválidos.
O que você vai aprender:
- Como
input()funciona e o que ela sempre retorna - Conversão de entrada string para números e outros tipos
- Como solicitar múltiplos valores em uma única linha
- Validação de entrada com loops e
try/except - Como ler senhas sem ecoar os caracteres
- Armadilhas comuns e como evitá-las
A Função input()
input() exibe um prompt opcional, aguarda o usuário pressionar Enter e retorna tudo o que o usuário digitou como uma string.
name = input("What is your name? ")
print("Hello, " + name + "!")Exemplo de sessão:
What is your name? Alice
Hello, Alice!Dois pontos a observar:
- A string de prompt é impressa no terminal sem uma nova linha — o cursor fica logo após o
?. - O valor de retorno é sempre uma
str, mesmo que o usuário digite42.
Se você chamar input() sem argumento, nenhum prompt é exibido, mas ainda assim a função aguarda a entrada:
value = input() # silent promptConvertendo a Entrada para Outros Tipos
Como input() sempre retorna uma string, você deve converter o valor quando precisar de um número ou outro tipo. As funções de conversão embutidas do Python tornam isso simples.
Entrada de inteiro
age = int(input("Enter your age: "))
print("In ten years you will be", age + 10)Enter your age: 25
In ten years you will be 35Entrada de float
price = float(input("Enter the price: "))
tax = price * 0.08
print(f"Tax: ${tax:.2f}")Enter the price: 19.99
Tax: $1.60Entrada no estilo boolean
Python não tem um atalho bool() para texto "sim/não", então verifique a string diretamente:
answer = input("Continue? (yes/no): ").strip().lower()
if answer == "yes":
print("Continuing...")
else:
print("Stopping.")Para uma referência completa sobre o sistema de tipos do Python, veja os capítulos Python Data Types e Python Casting.
Lendo Múltiplos Valores de Uma Vez
Às vezes os usuários precisam inserir vários valores em uma única linha. str.split() divide a string de entrada em uma lista.
# Read three space-separated integers
a, b, c = input("Enter three numbers separated by spaces: ").split()
a, b, c = int(a), int(b), int(c)
print("Sum:", a + b + c)Enter three numbers separated by spaces: 4 7 2
Sum: 13Você também pode usar um separador personalizado:
first, last = input("Enter your full name (first,last): ").split(",")
print(f"Hello, {first.strip()} {last.strip()}!")Enter your full name (first,last): Alice,Smith
Hello, Alice Smith!map() é uma forma concisa de converter todas as partes de uma vez:
numbers = list(map(int, input("Enter numbers: ").split()))
print("Numbers:", numbers)
print("Total:", sum(numbers))Enter numbers: 3 1 4 1 5 9
Numbers: [3, 1, 4, 1, 5, 9]
Total: 23Tratando Entradas Inválidas com try/except
Se o usuário digitar algo inesperado — letras onde você esperava um número — a conversão levanta um ValueError e o programa trava a menos que você o capture.
Tratamento básico de erros
try:
age = int(input("Enter your age: "))
print("Valid age:", age)
except ValueError:
print("That is not a valid number. Please enter digits only.")Enter your age: twenty
That is not a valid number. Please enter digits only.Veja o capítulo Python Try Except para um guia completo sobre tratamento de exceções.
Repetindo o prompt até que uma entrada válida seja fornecida
Um loop while True combinado com break é o padrão padrão para "continuar perguntando até o usuário acertar":
while True:
try:
age = int(input("Enter your age: "))
if age < 0 or age > 130:
print("Please enter a realistic age (0-130).")
else:
break # valid input received
except ValueError:
print("That is not a valid number. Please try again.")
print(f"Your age is {age}.")Exemplo de sessão:
Enter your age: abc
That is not a valid number. Please try again.
Enter your age: -5
Please enter a realistic age (0-130).
Enter your age: 28
Your age is 28.Esse padrão — loop, try/except, verificação de intervalo, break — cobre a grande maioria das necessidades de validação de entrada do mundo real.
Veja Python While Loops para mais informações sobre controle de loops.
Removendo Espaços em Branco
Os usuários frequentemente adicionam acidentalmente um espaço no início ou no fim. Sempre chame .strip() na entrada de texto antes de comparar ou armazená-la:
username = input("Username: ").strip()
if username == "admin":
print("Welcome, administrator!")
else:
print(f"Welcome, {username}!").lower() ou .upper() ajuda em comparações sem distinção de maiúsculas e minúsculas:
city = input("Enter your city: ").strip().lower()
if city == "new york":
print("You are in the Big Apple!")Validação de Entrada com Condições
Para escolhas ou padrões, verifique o valor diretamente após remover espaços e normalizar:
color = input("Choose a color (red/green/blue): ").strip().lower()
valid_colors = {"red", "green", "blue"}
if color not in valid_colors:
print(f"'{color}' is not a valid choice. Pick red, green, or blue.")
else:
print(f"You chose {color}.")Validando com expressões regulares
O módulo re permite verificar se a entrada corresponde a um padrão específico:
import re
email_pattern = r"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$"
email = input("Enter your email address: ").strip()
if re.match(email_pattern, email):
print("Valid email address.")
else:
print("Invalid email address. Please include '@' and a domain.")Enter your email address: [email protected]
Valid email address.Nota: O regex acima é simplificado para fins de demonstração. Sistemas em produção geralmente usam uma biblioteca dedicada (como
email-validator) ou validação no lado do servidor para endereços de e-mail.
Lendo Senhas com Segurança
A função padrão input() ecoa os caracteres no terminal conforme o usuário digita. Para senhas e outros dados sigilosos, use getpass.getpass() da biblioteca padrão — ela oculta os caracteres digitados:
import getpass
password = getpass.getpass("Enter your password: ")
print("Password received (length:", len(password), "characters).")getpass.getpass() aceita a mesma string de prompt opcional que input(). O terminal suprime os caracteres; o valor retornado é uma string simples.
Saída Formatada a Partir da Entrada
Depois de ter os dados do usuário, as f-strings do Python facilitam a apresentação clara dessas informações. Veja o capítulo Format Strings para detalhes.
name = input("Name: ").strip().title()
birth_year = int(input("Birth year: "))
current_year = 2025
age = current_year - birth_year
print(f"\n--- Profile ---")
print(f"Name : {name}")
print(f"Born : {birth_year}")
print(f"Age : {age}")Name: alice smith
Birth year: 1995
--- Profile ---
Name : Alice Smith
Born : 1995
Age : 30Python 2 vs Python 3
Se você encontrar código mais antigo em Python 2, observe que a função equivalente era chamada raw_input(). No Python 2, input() avaliava a expressão digitada pelo usuário (semelhante ao eval()), o que representava um risco de segurança. No Python 3, input() sempre retorna uma string simples e raw_input() não existe mais.
# Python 2 (legacy — do not use)
# name = raw_input("Your name: ")
# Python 3 (correct)
name = input("Your name: ")Armadilhas Comuns
| Erro | O que dá errado | Correção |
|---|---|---|
age = int(input(...)) sem try/except | Trava com entrada não numérica | Envolva com try/except ValueError |
Esquecer .strip() | " admin" não é igual a "admin" | Sempre remova espaços da entrada de texto |
| Comparar entrada bruta com um int | input() == 5 é sempre False | Converta primeiro: int(input(...)) == 5 |
Usar input() para senhas | Caracteres visíveis na tela | Use getpass.getpass() |
Esperar que bool(input(...)) funcione | Qualquer string não vazia é verdadeira | Analise a string: == "yes" |
Referência Rápida
# String input
name = input("Name: ").strip()
# Integer input with validation
while True:
try:
n = int(input("Enter a number: "))
break
except ValueError:
print("Integers only, please.")
# Float input
price = float(input("Price: "))
# Multiple values on one line
x, y = map(int, input("Enter x y: ").split())
# Password (hidden input)
import getpass
pwd = getpass.getpass("Password: ")
# Choice validation
choice = input("(yes/no): ").strip().lower()
if choice not in ("yes", "no"):
print("Please type yes or no.")Tópicos Relacionados
- Python Variables — armazenando e nomeando valores
- Python Data Types — strings, inteiros, floats e mais
- Python Casting — convertendo entre tipos
- Python Strings — métodos como
.strip(),.lower(),.split() - Python Try Except — capturando e tratando exceções
- Python While Loops — repetindo até que uma condição seja atendida
- Format Strings — construindo strings de saída com f-strings