La función input() permite que un programa de Python muestre una pregunta, espere una respuesta y guarde el texto escrito por el usuario. Es la base de formularios en terminal, calculadoras, menús, cuestionarios y muchos proyectos para principiantes.
La regla más importante es que input() en Python siempre devuelve una cadena. Aunque el usuario escriba 25, el programa recibe "25" hasta que realices una conversión.
Primer ejemplo con input()
name = input("¿Cómo te llamas? ")
print(f"Hola, {name}")El texto dentro de los paréntesis es el mensaje mostrado al usuario. El comportamiento completo aparece en la documentación oficial de input().
input() siempre devuelve texto
age = input("Edad: ")
print(type(age))El tipo será str. Para hacer cálculos, convierte primero:
age = int(input("Edad: "))
print(f"El próximo año tendrás {age + 1} años.")Cuando se permiten decimales, utiliza float():
height = float(input("Altura en metros: "))
print(f"Altura: {height:.2f} m")La guía de enteros en Python explica conversión, operaciones y validación.
Eliminar espacios innecesarios
name = input("Nombre: ").strip()
email = input("Correo: ").strip().lower()
print(name)
print(email)strip() elimina espacios al principio y al final. Normalizar el correo a minúsculas puede ser útil, pero no cambies automáticamente datos en los que las mayúsculas tengan significado.
Validar un entero con try y except
try:
age = int(input("Edad: "))
print(f"Edad registrada: {age}")
except ValueError:
print("Introduce un número entero.")Para repetir hasta recibir un valor válido:
while True:
try:
age = int(input("Edad: "))
except ValueError:
print("Introduce un número entero.")
continue
if age < 0 or age > 130:
print("Introduce una edad realista.")
continue
break
print(f"Edad válida: {age}")La guía de try y except en Python explica excepciones específicas. La guía de bucles en Python explica while, break y continue.
Crear una función reutilizable
def read_integer(prompt: str, minimum=None, maximum=None) -> int:
while True:
try:
value = int(input(prompt))
except ValueError:
print("Introduce un entero válido.")
continue
if minimum is not None and value < minimum:
print(f"El mínimo es {minimum}.")
continue
if maximum is not None and value > maximum:
print(f"El máximo es {maximum}.")
continue
return value
quantity = read_integer("Cantidad: ", minimum=1, maximum=100)Separar la validación evita repetir el mismo código. Consulta la guía de funciones en Python para diseñar funciones pequeñas y claras.
Leer números decimales
def read_float(prompt: str, minimum=None) -> float:
while True:
text = input(prompt).strip()
try:
value = float(text)
except ValueError:
print("Introduce un número válido, como 12.50.")
continue
if minimum is not None and value < minimum:
print(f"El valor mínimo es {minimum}.")
continue
return value
price = read_float("Precio: ", minimum=0)Las aplicaciones financieras pueden necesitar Decimal en lugar de float, según sus reglas de precisión.
Preguntas de sí o no
def ask_yes_no(prompt: str) -> bool:
while True:
answer = input(f"{prompt} [s/n]: ").strip().lower()
if answer in {"s", "sí", "si"}:
return True
if answer in {"n", "no"}:
return False
print("Responde s o n.")Un set expresa claramente los valores permitidos. La guía de sets en Python muestra operaciones de pertenencia y valores únicos.
Crear un menú en terminal
def show_menu():
print("\n1. Añadir tarea")
print("2. Listar tareas")
print("3. Salir")
while True:
show_menu()
option = input("Elige una opción: ").strip()
if option == "1":
print("Añadir tarea")
elif option == "2":
print("Listar tareas")
elif option == "3":
print("Hasta luego")
break
else:
print("Opción inválida")Mantener la opción como texto evita una conversión innecesaria.
Leer varios valores en una línea
numbers = [
int(value)
for value in input("Escribe números: ").split()
]
print(sum(numbers))Una versión más segura valida la lista completa:
def read_integer_list(prompt: str) -> list[int]:
while True:
parts = input(prompt).split()
try:
return [int(part) for part in parts]
except ValueError:
print("Utiliza enteros separados por espacios.")Valores opcionales y predeterminados
city = input("Ciudad [Madrid]: ").strip() or "Madrid"
print(city)Para un número opcional, comprueba si la cadena está vacía antes de convertir:
text = input("Descuento [0]: ").strip()
discount = 0.0 if text == "" else float(text)Contraseñas con getpass
input() muestra los caracteres escritos. Para una contraseña en terminal, utiliza getpass:
from getpass import getpass
username = input("Usuario: ").strip()
password = getpass("Contraseña: ")La documentación oficial de getpass explica su comportamiento. No imprimas ni guardes contraseñas en texto plano.
Cancelar la entrada correctamente
El usuario puede pulsar Ctrl+C o enviar una señal de fin de archivo:
def main():
name = input("Nombre: ").strip()
print(f"Hola, {name}")
try:
main()
except (KeyboardInterrupt, EOFError):
print("\nEntrada cancelada")Este manejo suele colocarse en el punto de entrada del programa, no alrededor de cada línea.
input() bloquea la ejecución
Mientras espera una respuesta, el hilo actual no continúa. Esto es correcto para aplicaciones de terminal, pero puede congelar una interfaz gráfica o bloquear un servidor web. En una web, los datos llegan mediante formularios, JSON, parámetros y archivos.
Separar entrada y lógica
def calculate_total(price: float, quantity: int) -> float:
if price < 0:
raise ValueError("El precio no puede ser negativo")
if quantity < 1:
raise ValueError("La cantidad debe ser positiva")
return price * quantity
price = read_float("Precio: ", minimum=0)
quantity = read_integer("Cantidad: ", minimum=1)
print(f"Total: {calculate_total(price, quantity):.2f}")La función de cálculo puede probarse sin simular el teclado. El tutorial de Pytest muestra cómo comprobar resultados y excepciones.
Proyecto práctico: calculadora de notas
def read_grade(label: str) -> float:
while True:
try:
grade = float(input(f"{label} (0-100): "))
except ValueError:
print("Introduce una nota numérica.")
continue
if 0 <= grade <= 100:
return grade
print("La nota debe estar entre 0 y 100.")
grades = [
read_grade("Tarea"),
read_grade("Proyecto"),
read_grade("Examen"),
]
average = sum(grades) / len(grades)
status = "aprobado" if average >= 60 else "suspendido"
print(f"Promedio: {average:.1f}")
print(f"Resultado: {status}")Errores frecuentes
- Hacer cálculos directamente con cadenas.
- Convertir una cadena vacía con
int(). - Utilizar
eval()con texto del usuario. - Validar el tipo pero no las reglas del negocio.
- Mostrar contraseñas con
input(). - Mezclar toda la lógica con preguntas y mensajes.
Conclusión
input() hace interactivas las aplicaciones de terminal, pero una entrada útil necesita normalización, conversión, validación y mensajes claros. Trata todo dato externo como no confiable, separa la interfaz de la lógica y utiliza funciones reutilizables para que el programa sea más fácil de probar y mantener.






