La entrada y salida en Python conectan un programa con usuarios, archivos y otros sistemas. La entrada introduce información en la aplicación. La salida muestra resultados, guarda datos o envía respuestas.
Una calculadora recibe números, realiza operaciones y presenta una respuesta. Un registro solicita nombre y correo, valida los datos y guarda el resultado. Aunque una aplicación sea grande, el flujo básico sigue siendo el mismo: recibir, procesar y devolver.
Qué se considera entrada y salida
La entrada puede llegar desde el teclado, un archivo, argumentos del terminal, una API, una base de datos o una interfaz gráfica. La salida puede dirigirse al terminal, un archivo, una respuesta web, una base de datos o un registro.
Esta guía se centra en el terminal y los archivos, que son el mejor punto de partida. También puedes consultar las guías específicas de input() en Python y print() en Python.
Leer texto con input()
La función input() muestra un mensaje opcional, pausa el programa y devuelve lo escrito:
name = input("¿Cómo te llamas? ")
print(f"Hola, {name}")El resultado siempre es una cadena, incluso cuando se escriben números:
age = input("Edad: ")
print(type(age)) # strLa documentación oficial de input() describe este comportamiento y las condiciones de fin de archivo.
Convertir entrada numérica
Utiliza int() para enteros y float() para decimales:
quantity = int(input("Cantidad: "))
price = float(input("Precio unitario: "))
total = quantity * price
print(f"Total: ${total:.2f}")La conversión puede fallar si el usuario escribe texto incompatible. Por eso una aplicación robusta valida los datos.
Validar la entrada
while True:
raw_age = input("Introduce tu edad: ").strip()
try:
age = int(raw_age)
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}")Este patrón separa un error de conversión de una regla de negocio. La guía de try y except en Python explica cómo capturar errores específicos.
Limpiar texto
Los métodos strip(), lower() y casefold() facilitan comparaciones consistentes:
answer = input("¿Continuar? [s/n] ").strip().casefold()
if answer in {"s", "sí", "si"}:
print("Continuando...")
elif answer in {"n", "no"}:
print("Finalizando...")
else:
print("Opción desconocida")Normalizar no significa cambiar todos los datos indiscriminadamente. Conserva el valor original cuando sea necesario para auditoría.
Leer varios valores
split() divide una línea:
first_name, last_name = input(
"Nombre y apellido: "
).split(maxsplit=1)Para varios números:
numbers = [
float(value)
for value in input("Escribe números: ").split()
]
print(sum(numbers))Cuando el formato sea fijo, valida el número de partes y comunica claramente el error.
Salida con print()
product = "Auriculares"
price = 49.90
print(product)
print("Precio:", price)
print("Producto:", product, "Precio:", price)Por defecto, los argumentos se separan con espacios y cada llamada termina con un salto de línea.
Controlar sep y end
print("2026", "07", "11", sep="-")
print("Cargando", end="")
print("...listo")sep define el texto entre argumentos. end cambia el final de la salida.
Formatear con f-strings
name = "Jordan"
score = 87.456
print(f"{name} obtuvo {score:.1f} puntos")Las f-strings admiten alineación, porcentajes, separadores y expresiones:
revenue = 1_250_340.5
rate = 0.1875
print(f"Ingresos: ${revenue:,.2f}")
print(f"Crecimiento: {rate:.1%}")La guía de formato de números con f-strings presenta más opciones.
Crear tablas simples
products = [
("Keyboard", 59.90),
("Mouse", 24.50),
("Monitor", 219.00),
]
print(f"{'Producto':<15} {'Precio':>10}")
print("-" * 26)
for name, price in products:
print(f"{name:<15} ${price:>9.2f}")La alineación produce informes legibles sin bibliotecas externas.
Caracteres de escape
print("Primera línea\nSegunda línea")
print("Nombre\tPuntuación")
print("Ella dijo: \"Hola\"")Las cadenas raw son útiles cuando las barras deben mantenerse:
path = r"C:\Users\Alex\Documents"Escribir en archivos
print() también puede escribir en un archivo abierto:
with open("report.txt", "w", encoding="utf-8") as file:
print("Informe mensual", file=file)
print("Ingresos: $12,500.00", file=file)El bloque with cierra el archivo incluso si ocurre un error.
Leer archivos de texto
with open("notes.txt", "r", encoding="utf-8") as file:
content = file.read()
print(content)Para archivos grandes, recorre las líneas:
with open("events.log", encoding="utf-8") as file:
for line_number, line in enumerate(file, start=1):
print(line_number, line.rstrip())Este patrón evita cargar todo el archivo en memoria. También se relaciona con la guía de bucles for en Python.
Escribir sin reemplazar
El modo "w" reemplaza el contenido. El modo "a" añade al final:
with open("activity.log", "a", encoding="utf-8") as file:
print("Usuario conectado", file=file)Elige el modo con cuidado. Abrir un archivo importante en modo escritura puede borrar su contenido anterior.
Argumentos del terminal
Los scripts de automatización pueden recibir parámetros al iniciarse:
import sys
if len(sys.argv) != 2:
print("Uso: python greet.py NOMBRE")
raise SystemExit(2)
print(f"Hola, {sys.argv[1]}")Para una interfaz más profesional, argparse añade ayuda, tipos y opciones. Consulta la guía de argparse en Python.
Separar interacción y lógica
Las funciones que calculan resultados deberían recibir datos y devolver valores, sin depender directamente de input():
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 = float(input("Precio: "))
quantity = int(input("Cantidad: "))
print(calculate_total(price, quantity))La guía de funciones en Python explica cómo esta separación mejora las pruebas.
Proyecto práctico: resumen de gastos
def read_positive_float(prompt):
while True:
try:
value = float(input(prompt))
except ValueError:
print("Introduce un número válido.")
continue
if value < 0:
print("El valor no puede ser negativo.")
continue
return value
expenses = []
while True:
description = input(
"Gasto, vacío para terminar: "
).strip()
if not description:
break
amount = read_positive_float("Importe: ")
expenses.append((description, amount))
print("\nResumen")
print("-" * 32)
for description, amount in expenses:
print(f"{description:<20} ${amount:>9.2f}")
print("-" * 32)
print(f"{'Total':<20} ${sum(a for _, a in expenses):>9.2f}")Errores frecuentes
- Olvidar que
input()devuelve texto. - Capturar todas las excepciones con un
exceptgeneral. - No eliminar espacios antes de comparar.
- Abrir archivos sin indicar la codificación.
- Usar modo escritura cuando se quería añadir.
- Mezclar toda la lógica con preguntas y mensajes.
- Confiar en la entrada sin validar rangos.
Referencia oficial
La guía oficial de entrada y salida de Python cubre formato de cadenas y archivos con mayor detalle.
Conclusión
Dominar input(), conversión, validación, print(), f-strings y archivos permite crear aplicaciones de terminal útiles. Mantén la interacción separada de la lógica, utiliza context managers y comunica errores de forma específica.






