Aprende Python en una tarde: 3 proyectos que puedes construir HOY

Persona vista desde atrás trabajando en un portátil en un café cálido y acogedor. En la pantalla se muestra el logo de Python. La escena tiene luz natural, tonos pasteles y una taza de café sobre la mesa, transmitiendo un ambiente tranquilo y creativo.

Si has pensado alguna vez en aprender a programar pero no sabes por dónde empezar, Python es tu mejor aliado. Es un lenguaje versátil, fácil de leer y con una curva de aprendizaje suave que lo hace ideal para principiantes. Pero aprender la sintaxis leyendo tutoriales puede resultar aburrido si no pones en práctica lo aprendido de inmediato.

Por eso, en este artículo te propongo algo diferente: aprender Python creando 3 mini-proyectos útiles que podrás completar en aproximadamente 90 minutos. Estos proyectos están diseñados para que entiendas los conceptos fundamentales mientras construyes algo real y funcional.

Al final de esta guía, habrás creado:

  • Un conversor de unidades en consola (temperatura, distancia, peso)
  • Una lista de tareas (to-do list) que guarda datos en un archivo CSV
  • Un bot de resumen de texto que extrae las ideas clave de cualquier texto

No necesitas experiencia previa en programación. Solo curiosidad, ganas de aprender y 90 minutos de tu tiempo.


Antes de empezar: instala Python en tu computadora

Para seguir este tutorial, necesitas tener Python instalado. Te recomiendo usar la versión Python 3.12 o superior.

Instalación en Windows

  1. Ve a python.org/downloads y descarga el instalador.
  2. Ejecuta el instalador y marca la casilla “Add Python to PATH” antes de hacer clic en “Install Now”.
  3. Abre la terminal (Command Prompt o PowerShell) y escribe:
python --version

Si ves algo como Python 3.12.x, ¡todo está listo!

Instalación en macOS

  1. Descarga el instalador desde python.org o usa Homebrew:
brew install python@3.12
  1. Verifica la instalación:
python3 --version

Instalación en Linux

La mayoría de distribuciones ya incluyen Python. Para asegurarte de tener la versión correcta:

sudo apt update
sudo apt install python3.12 python3-pip

Verifica:

python3 --version

Configura un entorno virtual

Antes de empezar con los proyectos, es buena práctica crear un entorno virtual. Esto mantiene las dependencias de cada proyecto separadas y evita conflictos.

python -m venv mi_entorno
# En Windows:
mi_entorno\\Scripts\\activate
# En macOS/Linux:
source mi_entorno/bin/activate

Cuando el entorno esté activo, verás (mi_entorno) al inicio de tu línea de comandos.


Proyecto 1: Conversor de unidades en consola

¿Qué aprenderás?

  • Entrada y salida de datos con input() y print()
  • Tipos de datos (strings, números)
  • Funciones y estructura de un programa
  • Condicionales (if, elif, else)

Descripción del proyecto

Vamos a crear un programa que convierta entre diferentes unidades: kilómetros a millas, grados Celsius a Fahrenheit, y kilogramos a libras.

Código completo

def km_a_millas(km):
    return km * 0.621371

def millas_a_km(millas):
    return millas / 0.621371

def celsius_a_fahrenheit(celsius):
    return (celsius * 9/5) + 32

def fahrenheit_a_celsius(fahrenheit):
    return (fahrenheit - 32) * 5/9

def kg_a_libras(kg):
    return kg * 2.20462

def libras_a_kg(libras):
    return libras / 2.20462

def menu():
    print("\\n=== CONVERSOR DE UNIDADES ===")
    print("1. Kilómetros ↔ Millas")
    print("2. Celsius ↔ Fahrenheit")
    print("3. Kilogramos ↔ Libras")
    print("4. Salir")
    return input("Elige una opción: ")

def main():
    while True:
        opcion = menu()
        
        if opcion == "1":
            direccion = input("¿Convertir (1) km→mi o (2) mi→km? ")
            valor = float(input("Ingresa el valor: "))
            if direccion == "1":
                print(f"{valor} km = {km_a_millas(valor):.2f} millas")
            else:
                print(f"{valor} millas = {millas_a_km(valor):.2f} km")
        
        elif opcion == "2":
            direccion = input("¿Convertir (1) °C→°F o (2) °F→°C? ")
            valor = float(input("Ingresa el valor: "))
            if direccion == "1":
                print(f"{valor}°C = {celsius_a_fahrenheit(valor):.2f}°F")
            else:
                print(f"{valor}°F = {fahrenheit_a_celsius(valor):.2f}°C")
        
        elif opcion == "3":
            direccion = input("¿Convertir (1) kg→lb o (2) lb→kg? ")
            valor = float(input("Ingresa el valor: "))
            if direccion == "1":
                print(f"{valor} kg = {kg_a_libras(valor):.2f} libras")
            else:
                print(f"{valor} libras = {libras_a_kg(valor):.2f} kg")
        
        elif opcion == "4":
            print("¡Hasta luego!")
            break
        
        else:
            print("Opción no válida. Intenta de nuevo.")

if __name__ == "__main__":
    main()

Cómo ejecutarlo

  1. Copia el código en un archivo llamado conversor.py
  2. Abre la terminal en la carpeta donde guardaste el archivo
  3. Ejecuta:
python conversor.py

Qué está pasando aquí

  • Funciones: Cada conversión tiene su propia función. Esto hace el código más organizado y reutilizable.
  • Bucle while True: Mantiene el programa activo hasta que el usuario elija salir.
  • input(): Captura lo que el usuario escribe en la consola.
  • float(): Convierte el texto ingresado en un número decimal.
  • f-strings: La sintaxis f"{variable}" permite insertar variables dentro de cadenas de texto de forma elegante.

Siguientes pasos

  • Añade más conversiones (metros a pies, litros a galones, etc.)
  • Valida que el usuario ingrese números válidos con bloques try/except
  • Guarda un historial de conversiones en un archivo de texto

Proyecto 2: To-do list en archivo CSV

¿Qué aprenderás?

  • Listas y diccionarios
  • Lectura y escritura de archivos
  • Módulos estándar de Python (csv, os)
  • Manipulación de datos estructurados

Descripción del proyecto

Crearemos una lista de tareas que permite agregar, listar, marcar como completadas y eliminar tareas. Todos los datos se guardan en un archivo CSV para que persistan entre sesiones.

Código completo

import csv
import os

ARCHIVO = "tareas.csv"

def cargar_tareas():
    if not os.path.exists(ARCHIVO):
        return []
    
    with open(ARCHIVO, "r", encoding="utf-8") as f:
        lector = csv.DictReader(f)
        return list(lector)

def guardar_tareas(tareas):
    with open(ARCHIVO, "w", encoding="utf-8", newline="") as f:
        campos = ["id", "tarea", "completada"]
        escritor = csv.DictWriter(f, fieldnames=campos)
        escritor.writeheader()
        escritor.writerows(tareas)

def agregar_tarea(tareas, descripcion):
    nuevo_id = str(len(tareas) + 1)
    tareas.append({"id": nuevo_id, "tarea": descripcion, "completada": "No"})
    guardar_tareas(tareas)
    print(f"✓ Tarea '{descripcion}' agregada con ID {nuevo_id}")

def listar_tareas(tareas):
    if not tareas:
        print("No hay tareas pendientes.")
        return
    
    print("\\n=== TUS TAREAS ===")
    for t in tareas:
        estado = "✓" if t["completada"] == "Sí" else "○"
        print(f"{estado} [{t['id']}] {t['tarea']}")

def marcar_completada(tareas, id_tarea):
    for t in tareas:
        if t["id"] == id_tarea:
            t["completada"] = "Sí"
            guardar_tareas(tareas)
            print(f"✓ Tarea {id_tarea} marcada como completada")
            return
    print(f"No se encontró la tarea con ID {id_tarea}")

def eliminar_todas(tareas):
    tareas.clear()
    guardar_tareas(tareas)
    print("Todas las tareas han sido eliminadas")

def main():
    tareas = cargar_tareas()
    
    while True:
        print("\\n=== TO-DO LIST ===")
        print("1. Agregar tarea")
        print("2. Listar tareas")
        print("3. Marcar como completada")
        print("4. Eliminar todas")
        print("5. Salir")
        
        opcion = input("Elige una opción: ")
        
        if opcion == "1":
            descripcion = input("Describe la tarea: ")
            agregar_tarea(tareas, descripcion)
        
        elif opcion == "2":
            listar_tareas(tareas)
        
        elif opcion == "3":
            id_tarea = input("ID de la tarea a completar: ")
            marcar_completada(tareas, id_tarea)
        
        elif opcion == "4":
            confirmar = input("¿Seguro? (s/n): ")
            if confirmar.lower() == "s":
                eliminar_todas(tareas)
        
        elif opcion == "5":
            print("¡Hasta luego!")
            break
        
        else:
            print("Opción no válida")

if __name__ == "__main__":
    main()

Cómo ejecutarlo

  1. Guarda el código en todo.py
  2. Ejecuta:
python todo.py

El programa creará automáticamente el archivo tareas.csv en la misma carpeta.

Qué está pasando aquí

  • Módulo csv: Facilita leer y escribir archivos CSV de forma estructurada.
  • Diccionarios: Cada tarea es un diccionario con campos id, tarea y completada.
  • os.path.exists(): Verifica si el archivo existe antes de intentar leerlo.
  • Context manager (with): Abre y cierra archivos de forma segura.

Siguientes pasos

  • Añade fechas límite a cada tarea
  • Implementa búsqueda por palabra clave
  • Crea categorías o etiquetas para las tareas
  • Exporta las tareas a un formato JSON o PDF

Proyecto 3: Bot de resumen de texto local

¿Qué aprenderás?

  • Instalación de paquetes externos con pip
  • Uso de entornos virtuales
  • Procesamiento básico de texto
  • Extracción de información relevante

Descripción del proyecto

Este programa toma un texto largo (que puedes pegar o cargar desde un archivo .txt) y extrae las 3 frases más representativas como resumen.

Instalación de dependencias

Primero, necesitamos instalar algunas librerías. Asegúrate de tener tu entorno virtual activado.

pip install nltk scikit-learn

Código completo

import nltk
from sklearn.feature_extraction.text import TfidfVectorizer
from nltk.tokenize import sent_tokenize
import numpy as np

# Descargar recursos necesarios de NLTK (solo la primera vez)
try:
    nltk.data.find('tokenizers/punkt')
except LookupError:
    nltk.download('punkt')

def cargar_texto_desde_archivo(ruta):
    with open(ruta, 'r', encoding='utf-8') as f:
        return f.read()

def resumir_texto(texto, num_frases=3):
    # Dividir el texto en oraciones
    oraciones = sent_tokenize(texto, language='spanish')
    
    if len(oraciones) <= num_frases:
        return oraciones
    
    # Crear matriz TF-IDF
    vectorizador = TfidfVectorizer()
    matriz_tfidf = vectorizador.fit_transform(oraciones)
    
    # Calcular la puntuación de cada oración (suma de valores TF-IDF)
    puntuaciones = np.array(matriz_tfidf.sum(axis=1)).flatten()
    
    # Obtener índices de las frases con mayor puntuación
    indices_top = puntuaciones.argsort()[-num_frases:][::-1]
    
    # Devolver frases en orden original
    indices_ordenados = sorted(indices_top)
    return [oraciones[i] for i in indices_ordenados]

def main():
    print("=== BOT DE RESUMEN DE TEXTO ===\\n")
    print("Opciones:")
    print("1. Pegar texto directamente")
    print("2. Cargar desde archivo .txt")
    
    opcion = input("\\nElige una opción: ")
    
    if opcion == "1":
        print("\\nPega tu texto (presiona Enter dos veces para terminar):")
        lineas = []
        while True:
            linea = input()
            if linea == "":
                break
            lineas.append(linea)
        texto = "\\n".join(lineas)
    
    elif opcion == "2":
        ruta = input("Ruta del archivo .txt: ")
        try:
            texto = cargar_texto_desde_archivo(ruta)
        except FileNotFoundError:
            print("Archivo no encontrado.")
            return
    
    else:
        print("Opción no válida")
        return
    
    if not texto.strip():
        print("No se ingresó ningún texto.")
        return
    
    print("\\n--- RESUMEN ---\\n")
    resumen = resumir_texto(texto)
    for i, frase in enumerate(resumen, 1):
        print(f"{i}. {frase}\\n")

if __name__ == "__main__":
    main()

Cómo ejecutarlo

  1. Guarda el código en resumen.py
  2. Ejecuta:
python resumen.py
  1. Sigue las instrucciones en pantalla para pegar texto o cargar un archivo

Qué está pasando aquí

  • NLTK: Es una librería para procesamiento de lenguaje natural. La usamos para dividir el texto en oraciones.
  • TF-IDF: (Term Frequency-Inverse Document Frequency) es una técnica que identifica las palabras más importantes en un documento.
  • NumPy: Nos permite trabajar con arrays y hacer operaciones matemáticas eficientes.
  • Puntuación de oraciones: Sumamos los valores TF-IDF de cada palabra en una oración para obtener su “importancia”.

Siguientes pasos

  • Integra una API de resumen más avanzada (como OpenAI o Hugging Face)
  • Permite al usuario elegir el número de frases en el resumen
  • Añade soporte para múltiples idiomas
  • Crea una interfaz gráfica con Tkinter o web con Flask

Herramientas recomendadas para programar en Python

Para seguir aprendiendo y trabajando cómodamente, te recomiendo usar un editor de código profesional:

Visual Studio Code (VS Code)

Es gratuito, ligero y tiene extensiones excelentes para Python:

  • Python (Microsoft): Soporte completo para Python con autocompletado y depuración
  • Pylance: Análisis de código y mejor IntelliSense
  • Jupyter: Para ejecutar notebooks interactivos
  • Black Formatter: Formatea tu código automáticamente según las mejores prácticas

Descárgalo desde code.visualstudio.com

PyCharm Community Edition

Si prefieres un IDE más completo y específico para Python, PyCharm es una excelente opción. La versión Community es gratuita y muy poderosa.

Descárgalo desde jetbrains.com/pycharm


Problemas comunes y cómo solucionarlos

Error: “python no se reconoce como comando”

Solución: Asegúrate de haber marcado “Add Python to PATH” durante la instalación. Si no lo hiciste, desinstala Python y vuelve a instalarlo marcando esa casilla.

Error: “ModuleNotFoundError: No module named ‘nltk'”

Solución: Verifica que tu entorno virtual esté activado y ejecuta nuevamente:

pip install nltk scikit-learn

El programa no guarda los datos del to-do list

Solución: Asegúrate de que el programa tenga permisos de escritura en la carpeta donde se ejecuta. Intenta ejecutarlo desde una carpeta en tu directorio de usuario.

Error de codificación con acentos o caracteres especiales

Solución: Verifica que todos tus archivos usen codificación UTF-8. En VS Code, mira la esquina inferior derecha y selecciona “UTF-8” si aparece otra codificación.


Conclusión: tu viaje con Python apenas comienza

¡Felicidades! Si llegaste hasta aquí y completaste los tres proyectos, ya sabes más Python que la mayoría de personas. Has trabajado con:

  • Estructuras de control (if, while, for)
  • Funciones y modularización de código
  • Manejo de archivos y persistencia de datos
  • Librerías externas y procesamiento de texto

Pero esto es solo el comienzo. Python es un lenguaje increíblemente versátil que te permite crear desde aplicaciones web hasta modelos de inteligencia artificial.

¿Qué hacer ahora?

  • Expande estos proyectos: Implementa las ideas de “siguientes pasos” que compartí en cada proyecto
  • Aprende frameworks web: Flask o Django te permitirán crear aplicaciones web completas
  • Explora análisis de datos: Pandas, NumPy y Matplotlib son esenciales para ciencia de datos
  • Automatiza tareas: Python es perfecto para scripts que te ahorran tiempo en el trabajo diario
  • Únete a la comunidad: Participa en foros como Stack Overflow o subreddits como r/learnpython

Lo más importante es seguir practicando. Cada proyecto que completes fortalecerá tu comprensión y confianza. No tengas miedo de equivocarte: los errores son la mejor forma de aprender.

¿Listo para tu siguiente desafío?

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *