W3docs

Entrada de usuario en Python

Aprende a leer la entrada del usuario en Python con input(), convertir tipos, validar datos, manejar errores y crear programas interactivos de línea de comandos.

La función integrada input() de Python permite que tus programas se detengan y esperen a que el usuario escriba algo. Este capítulo cubre todo lo que necesitas para leer, validar y convertir la entrada del usuario — desde un prompt en una sola línea hasta bucles de entrada robustos que rechazan datos incorrectos.

Lo que aprenderás:

  • Cómo funciona input() y qué devuelve siempre
  • Convertir la entrada de tipo string a números y otros tipos
  • Solicitar múltiples valores en una sola línea
  • Validar la entrada con bucles y try/except
  • Leer contraseñas sin mostrar los caracteres
  • Errores comunes y cómo evitarlos

La función input()

input() muestra un prompt opcional, espera a que el usuario presione Enter y devuelve todo lo que el usuario escribió como una string.

name = input("What is your name? ")
print("Hello, " + name + "!")

Ejemplo de sesión:

What is your name? Alice
Hello, Alice!

Dos cosas a tener en cuenta:

  1. La cadena del prompt se imprime en la terminal sin un salto de línea — el cursor se queda justo después del ?.
  2. El valor de retorno es siempre un str, incluso si el usuario escribe 42.

Si llamas a input() sin argumentos, no muestra ningún prompt pero igual espera la entrada:

value = input()  # silent prompt

Convertir la entrada a otros tipos

Dado que input() siempre devuelve una string, debes convertir el valor cuando necesitas un número u otro tipo. Las funciones de conversión integradas de Python hacen esto de forma sencilla.

Entrada entera

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 punto flotante

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

Entrada de tipo boolean

Python no tiene un atajo bool() para texto "sí/no", así que comprueba la string directamente:

answer = input("Continue? (yes/no): ").strip().lower()
if answer == "yes":
    print("Continuing...")
else:
    print("Stopping.")

Para una referencia completa del sistema de tipos de Python, consulta los capítulos Python Data Types y Python Casting.


Leer múltiples valores a la vez

A veces los usuarios necesitan ingresar varios valores en una sola línea. str.split() divide la string de entrada en una 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

También puedes usar un 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() es una forma concisa de convertir todas las partes a la 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

Manejar entrada inválida con try/except

Si el usuario escribe algo inesperado — letras donde se esperaba un número — la conversión lanza un ValueError y el programa falla a menos que lo captures.

Manejo básico de errores

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.

Consulta el capítulo Python Try Except para una guía completa del manejo de excepciones.

Repetir el prompt hasta obtener una entrada válida

Un bucle while True combinado con break es el patrón estándar para "seguir preguntando hasta que el usuario lo haga bien":

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}.")

Ejemplo de sesión:

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.

Este patrón — bucle, try/except, verificación de rango, break — cubre la gran mayoría de las necesidades de validación de entrada en el mundo real.

Consulta Python While Loops para más información sobre el control de bucles.


Eliminar espacios en blanco

Los usuarios suelen agregar accidentalmente un espacio al inicio o al final. Siempre llama a .strip() en la entrada de texto antes de compararla o almacenarla:

username = input("Username: ").strip()
if username == "admin":
    print("Welcome, administrator!")
else:
    print(f"Welcome, {username}!")

.lower() o .upper() ayuda con las comparaciones que no distinguen entre mayúsculas y minúsculas:

city = input("Enter your city: ").strip().lower()
if city == "new york":
    print("You are in the Big Apple!")

Validación de entrada con condiciones

Para opciones o patrones, verifica el valor directamente después de eliminar espacios y 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}.")

Validar con expresiones regulares

El módulo re permite verificar que la entrada coincida con un patrón 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: La expresión regular anterior está simplificada con fines demostrativos. Los sistemas en producción suelen usar una biblioteca dedicada (como email-validator) o validación del lado del servidor para las direcciones de correo electrónico.


Leer contraseñas de forma segura

La función estándar input() muestra los caracteres en la terminal mientras el usuario escribe. Para contraseñas y otros datos sensibles, usa getpass.getpass() de la biblioteca estándar — oculta los caracteres escritos:

import getpass

password = getpass.getpass("Enter your password: ")
print("Password received (length:", len(password), "characters).")

getpass.getpass() acepta la misma cadena de prompt opcional que input(). La terminal suprime los caracteres; el valor devuelto es una string normal.


Salida formateada a partir de la entrada

Una vez que tienes los datos del usuario, los f-strings de Python facilitan presentarlos claramente. Consulta el capítulo Format Strings para más detalles.

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

Si encuentras código antiguo de Python 2, ten en cuenta que la función equivalente se llamaba raw_input(). En Python 2, input() evaluaba la expresión que el usuario escribía (similar a eval()), lo cual era un riesgo de seguridad. En Python 3, input() siempre devuelve una string normal y raw_input() ya no existe.

# Python 2 (legacy — do not use)
# name = raw_input("Your name: ")

# Python 3 (correct)
name = input("Your name: ")

Errores comunes

ErrorQué sale malSolución
age = int(input(...)) sin try/exceptFalla con entrada no numéricaEnvolver en try/except ValueError
Olvidar .strip()" admin" no es igual a "admin"Siempre eliminar espacios en la entrada de texto
Comparar la entrada sin procesar con un enteroinput() == 5 siempre es FalseConvertir primero: int(input(...)) == 5
Usar input() para contraseñasLos caracteres son visibles en pantallaUsar getpass.getpass()
Esperar que bool(input(...)) funcioneCualquier string no vacía es verdaderaAnalizar la string: == "yes"

Referencia 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.")

Temas relacionados

Práctica

Práctica
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?