Entrada y salida: input(), print() y archivos

Actualizado el: 20/08/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

    notebook com código saindo da tela
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    Variables: asignación, tipos y alcance en Python

    Aprende variables en Python: asignación, nombres, tipos, conversiones, referencias, mutabilidad, alcance, constantes, None y errores frecuentes.

    Ler mais

    Tempo de leitura: 4 minutos
    12/07/2026
    Diferença entre operadores is e == em Python
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    == vs is en Python: igualdad vs identidad

    Entiende la diferencia entre == e is en Python, igualdad, identidad, None, interning, copias superficiales, deepcopy y objetos personalizados.

    Ler mais

    Tempo de leitura: 4 minutos
    12/07/2026
    Menu interativo no terminal criado com Python
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    Menú interactivo en terminal con Python

    Crea un menú interactivo en Python con while, funciones, diccionarios, validación, submenús, persistencia JSON y manejo seguro de errores.

    Ler mais

    Tempo de leitura: 4 minutos
    12/07/2026
    ícone de loop com o texto 'While' abaixo
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    while: repite acciones con condiciones en Python

    Aprende bucles while en Python con condiciones, validación, menús, break, continue, else, centinelas, reintentos y buenas prácticas.

    Ler mais

    Tempo de leitura: 5 minutos
    11/07/2026
    Imagem de um quadro negro com várias interrogações no lugar de lâmpadas, e uma lâmpada conectada no meio
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    if, elif y else: lógica condicional en Python

    Aprende if, elif y else en Python con comparaciones, operadores lógicos, validación, rangos, menús, retornos tempranos y pruebas.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026
    Manipulação de dados JSON em Python
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    JSON en Python: leer, escribir y validar datos

    Aprende JSON en Python con load, loads, dump, dumps, archivos UTF-8, validación, APIs, Decimal, fechas y escritura segura.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026