Aplicación de gestión de tareas
Introducción
La gestión de tareas es una aplicación práctica muy común en el mundo de la programación y representa un excelente proyecto para consolidar los conocimientos adquiridos sobre Python. Una aplicación de gestión de tareas permite al usuario añadir tareas, marcarlas como completadas, eliminarlas y visualizarlas de diferentes maneras. Este tipo de proyecto nos permite aplicar conceptos como estructuras de datos, funciones, entrada/salida y persistencia de datos, integrándolos en una aplicación funcional de uso cotidiano.
En este artículo, crearemos paso a paso una aplicación de gestión de tareas que podrás utilizar para organizar tus actividades diarias. El proyecto nos permitirá poner en práctica múltiples conceptos aprendidos hasta ahora, y resultará en una herramienta útil que podrás seguir mejorando con el tiempo.
Planificación de la aplicación
Antes de empezar a programar, es importante tener claro qué funcionalidades queremos implementar:
- Añadir nuevas tareas con descripción y prioridad
- Mostrar todas las tareas pendientes
- Marcar tareas como completadas
- Eliminar tareas
- Guardar las tareas en un archivo para mantenerlas entre sesiones
- Cargar las tareas desde el archivo al iniciar la aplicación
Estructura de datos
Para almacenar nuestras tareas, utilizaremos una lista de diccionarios. Cada diccionario representará una tarea con sus atributos:
# Ejemplo de estructura de una tarea
tarea = {
"id": 1,
"descripcion": "Comprar pan",
"prioridad": "Alta",
"completada": False,
"fecha_creacion": "2023-10-15"
}
Implementación de la aplicación
Comencemos implementando nuestra aplicación de gestión de tareas:
import os
import json
from datetime import date
# Variables globales
ARCHIVO_TAREAS = "tareas.json"
tareas = []
contador_id = 0
# Funciones principales
def cargar_tareas():
"""Carga las tareas desde el archivo JSON."""
global tareas, contador_id
if os.path.exists(ARCHIVO_TAREAS):
try:
with open(ARCHIVO_TAREAS, 'r', encoding='utf-8') as archivo:
tareas = json.load(archivo)
# Actualizar el contador de ID al más alto encontrado
if tareas:
contador_id = max(tarea["id"] for tarea in tareas)
except Exception as e:
print(f"Error al cargar tareas: {e}")
tareas = []
else:
tareas = []
def guardar_tareas():
"""Guarda las tareas en el archivo JSON."""
try:
with open(ARCHIVO_TAREAS, 'w', encoding='utf-8') as archivo:
json.dump(tareas, archivo, indent=4)
print("Tareas guardadas correctamente.")
except Exception as e:
print(f"Error al guardar tareas: {e}")
def añadir_tarea(descripcion, prioridad="Media"):
"""Añade una nueva tarea a la lista."""
global contador_id
contador_id += 1
nueva_tarea = {
"id": contador_id,
"descripcion": descripcion,
"prioridad": prioridad,
"completada": False,
"fecha_creacion": str(date.today())
}
tareas.append(nueva_tarea)
print(f"Tarea '{descripcion}' añadida con ID {contador_id}.")
guardar_tareas()
def mostrar_tareas(mostrar_completadas=False):
"""Muestra la lista de tareas pendientes o todas si se especifica."""
if not tareas:
print("No hay tareas en la lista.")
return
print("\n=== LISTA DE TAREAS ===")
for tarea in tareas:
if not tarea["completada"] or mostrar_completadas:
estado = "✓" if tarea["completada"] else " "
print(f"[{estado}] {tarea['id']}. {tarea['descripcion']} (Prioridad: {tarea['prioridad']})")
print("=====================")
def marcar_completada(id_tarea):
"""Marca una tarea como completada."""
for tarea in tareas:
if tarea["id"] == id_tarea:
tarea["completada"] = True
print(f"Tarea '{tarea['descripcion']}' marcada como completada.")
guardar_tareas()
return
print(f"No se encontró ninguna tarea con ID {id_tarea}.")
def eliminar_tarea(id_tarea):
"""Elimina una tarea de la lista."""
global tareas
tareas_filtradas = [tarea for tarea in tareas if tarea["id"] != id_tarea]
if len(tareas_filtradas) < len(tareas):
tareas = tareas_filtradas
print(f"Tarea con ID {id_tarea} eliminada.")
guardar_tareas()
else:
print(f"No se encontró ninguna tarea con ID {id_tarea}.")
def menu_principal():
"""Muestra el menú principal y procesa la elección del usuario."""
while True:
print("\n=== GESTOR DE TAREAS ===")
print("1. Añadir tarea")
print("2. Mostrar tareas pendientes")
print("3. Mostrar todas las tareas")
print("4. Marcar tarea como completada")
print("5. Eliminar tarea")
print("6. Salir")
opcion = input("\nElige una opción (1-6): ")
if opcion == "1":
descripcion = input("Descripción de la tarea: ")
print("Prioridades disponibles: Baja, Media, Alta")
prioridad = input("Prioridad (por defecto 'Media'): ")
if not prioridad:
prioridad = "Media"
añadir_tarea(descripcion, prioridad)
elif opcion == "2":
mostrar_tareas(mostrar_completadas=False)
elif opcion == "3":
mostrar_tareas(mostrar_completadas=True)
elif opcion == "4":
mostrar_tareas(mostrar_completadas=True)
id_tarea = int(input("ID de la tarea a marcar como completada: "))
marcar_completada(id_tarea)
elif opcion == "5":
mostrar_tareas(mostrar_completadas=True)
id_tarea = int(input("ID de la tarea a eliminar: "))
eliminar_tarea(id_tarea)
elif opcion == "6":
print("¡Hasta pronto!")
break
else:
print("Opción no válida. Intenta de nuevo.")
# Punto de entrada del programa
if __name__ == "__main__":
print("Bienvenido al Gestor de Tareas")
cargar_tareas()
menu_principal()
Prueba de la aplicación
Para probar nuestra aplicación, simplemente ejecutamos el script y seguimos las instrucciones del menú. Por ejemplo:
- Elegimos la opción
1
para añadir una tarea - Ingresamos la descripción: "Estudiar Python"
- Seleccionamos la prioridad: "Alta"
- Elegimos la opción
2
para ver nuestras tareas pendientes - Podemos marcar tareas como completadas con la opción
4
- Y eliminar tareas con la opción
5
Mejoras posibles
Esta aplicación de gestión de tareas es funcional pero básica. Aquí hay algunas mejoras que podrías implementar:
- Fechas de vencimiento: Añadir fechas límite para las tareas
- Categorías: Permitir agrupar tareas por categorías
- Filtros: Filtrar tareas por prioridad o categoría
- Interfaz gráfica: Implementar una interfaz más amigable con una biblioteca como Tkinter
- Búsqueda: Permitir buscar tareas por palabras clave
- Estadísticas: Mostrar estadísticas sobre tareas completadas y pendientes
Resumen
En este artículo, hemos creado una aplicación de gestión de tareas funcional utilizando Python. Hemos aplicado varios conceptos importantes como estructuras de datos (listas y diccionarios), manipulación de archivos JSON para guardar datos, funciones para organizar el código y entrada/salida para interactuar con el usuario.
Esta aplicación sirve como un ejemplo práctico de cómo integrar diferentes elementos de Python en un proyecto útil. A medida que sigas avanzando en tu aprendizaje, podrás añadir más funcionalidades y mejorar la interfaz de usuario para crear una herramienta más potente y personalizada para la gestión de tus tareas diarias.