W3docs

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:

  1. A string de prompt é impressa no terminal sem uma nova linha — o cursor fica logo após o ?.
  2. O valor de retorno é sempre uma str, mesmo que o usuário digite 42.

Se você chamar input() sem argumento, nenhum prompt é exibido, mas ainda assim a função aguarda a entrada:

value = input()  # silent prompt

Convertendo 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 35

Entrada de float

price = float(input("Enter the price: "))
tax = price * 0.08
print(f"Tax: ${tax:.2f}")
Enter the price: 19.99
Tax: $1.60

Entrada 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: 13

Você 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: 23

Tratando 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       : 30

Python 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

ErroO que dá erradoCorreção
age = int(input(...)) sem try/exceptTrava com entrada não numéricaEnvolva 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 intinput() == 5 é sempre FalseConverta primeiro: int(input(...)) == 5
Usar input() para senhasCaracteres visíveis na telaUse getpass.getpass()
Esperar que bool(input(...)) funcioneQualquer string não vazia é verdadeiraAnalise 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

Prática

Prática
Which of the following are valid ways to get user input in Python?
Which of the following are valid ways to get user input in Python?
Was this page helpful?