Entrada y salida en Python: guía completa

Publicado el: 11/07/2026
Tempo de leitura: 4 minutos
notebook mostrando tela a teclado

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))  # str

La 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 except general.
  • 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.

Compartilhe:

Facebook
WhatsApp
Twitter
LinkedIn

Contenido del artículo

    Artículos relacionados

    Logo do Python com as palavras global e local
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    Alcance de variables en Python: entiende la regla LEGB

    Entiende el alcance de variables en Python con la regla LEGB, global, nonlocal, closures, sombreado, mutabilidad y UnboundLocalError.

    Ler mais

    Tempo de leitura: 5 minutos
    11/07/2026
    Operações matemáticas usando o módulo math em Python
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    Módulo math en Python: operaciones matemáticas esenciales

    Aprende el módulo math en Python: raíces, potencias, redondeos, trigonometría, logaritmos, constantes, isclose y ejemplos prácticos.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026
    Geração de números aleatórios seguros usando secrets em Python
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    Módulo secrets en Python: números y tokens seguros

    Aprende secrets en Python para generar contraseñas, códigos y tokens seguros con randbelow, choice, token_hex, token_urlsafe y compare_digest.

    Ler mais

    Tempo de leitura: 5 minutos
    11/07/2026
    Uso do operador walrus para atribuições inline em Python
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    Operador walrus en Python: guía con ejemplos

    Aprende el operador walrus := en Python: condiciones, while, comprensiones, lectura por bloques, regex, alcance y buenas prácticas.

    Ler mais

    Tempo de leitura: 5 minutos
    11/07/2026
    Uso da função zip para combinar listas em Python
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    zip() en Python: combina listas e iterables correctamente

    Aprende zip() en Python para combinar listas, crear diccionarios, usar strict, zip_longest, desempaquetar valores y evitar pérdidas silenciosas.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026
    Uso do módulo time para controlar tempo em scripts Python
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    Módulo time en Python: pausas, timestamps y rendimiento

    Aprende el módulo time en Python: timestamps, sleep, monotonic, perf_counter, struct_time, strftime y buenas prácticas para medir tiempo.

    Ler mais

    Tempo de leitura: 5 minutos
    11/07/2026