
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
- Ve a python.org/downloads y descarga el instalador.
- Ejecuta el instalador y marca la casilla “Add Python to PATH” antes de hacer clic en “Install Now”.
- 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
- Descarga el instalador desde python.org o usa Homebrew:
brew install python@3.12
- 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()yprint() - 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
- Copia el código en un archivo llamado
conversor.py - Abre la terminal en la carpeta donde guardaste el archivo
- 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
- Guarda el código en
todo.py - 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,tareaycompletada. 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
- Guarda el código en
resumen.py - Ejecuta:
python resumen.py
- 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?