🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

【Copia y Pega para Ejecutar】¡Creemos una Aplicación de Lista de Tareas Simple con Python! (Basada en Texto)

Para ejecutar Python desde el símbolo del sistema o PowerShell en tu PC, necesitas descargar e instalar Python.
Si aún no lo has hecho, consulta el artículo Instalación de Python y configuración del entorno de desarrollo para instalar Python.

¡Hola! Hace solo unos meses no sabía nada de programación, y ahora estoy compartiendo lo que he aprendido creando sitios web junto a una IA.

Esta vez, vamos a crear una "Aplicación de Lista de Tareas" (ToDo List) en Python, algo que recomiendo encarecidamente como primer paso en el aprendizaje de la programación. ¡El objetivo de este artículo es solo uno! Que experimentes la emoción de "¡El programa que hice por mi cuenta funciona!".

¡Dejemos la teoría complicada para después! Primero, juguemos con el código que puedes copiar y pegar para sentir ese "¡Ah, así es como funciona!". Explicaré los términos técnicos de la forma más sencilla posible, basándome en mis propias experiencias y tropiezos, ¡así que no te preocupes!


¡Primero, ejecutemos el producto final!

¡Ver para creer! Primero, ejecutemos la versión final de la aplicación de lista de tareas. Copia todo el código de abajo, crea un archivo llamado todo.py, y pégalo dentro para guardarlo.


# -*- coding: utf-8 -*-

TASKS_FILE = "tasks.txt"

def load_tasks():
    """Función para cargar tareas desde el archivo"""
    try:
        with open(TASKS_FILE, "r", encoding="utf-8") as f:
            # strip() para eliminar el carácter de nueva línea al final de cada línea
            tasks = [line.strip() for line in f.readlines()]
    except FileNotFoundError:
        # Si el archivo no existe, devuelve una lista vacía
        tasks = []
    return tasks

def save_tasks(tasks):
    """Función para guardar tareas en el archivo"""
    with open(TASKS_FILE, "w", encoding="utf-8") as f:
        # Añade un salto de línea al final de cada tarea al escribir
        for task in tasks:
            f.write(task + "\n")

def list_tasks(tasks):
    """Función para mostrar una lista de las tareas"""
    if not tasks:
        print("✅ Aún no hay tareas.")
        return
    
    print("--- Lista de Tareas ---")
    # Usa enumerate para obtener el índice (número) y la tarea al mismo tiempo
    for i, task in enumerate(tasks):
        print(f"{i + 1}: {task}")
    print("---------------------")

def add_task(tasks):
    """Función para añadir una tarea"""
    task = input("Introduce la tarea a añadir: ")
    if task:
        tasks.append(task)
        save_tasks(tasks)
        print(f"✨ Tarea '{task}' añadida.")
    else:
        print("⚠️ No se ha introducido ninguna tarea.")

def delete_task(tasks):
    """Función para eliminar una tarea"""
    list_tasks(tasks)
    if not tasks:
        return
        
    try:
        # Pedir al usuario que elija una tarea por su número
        num_str = input("Introduce el número de la tarea a eliminar: ")
        num = int(num_str)
        
        # El usuario cuenta desde 1, pero el índice de la lista es desde 0, así que ajustamos
        if 1 <= num <= len(tasks):
            removed_task = tasks.pop(num - 1)
            save_tasks(tasks)
            print(f"🗑️ Tarea '{removed_task}' eliminada.")
        else:
            print("⚠️ No existe ninguna tarea con ese número.")
            
    except ValueError:
        # Manejo de error si se introduce algo que no es un número
        print("⚠️ Por favor, introduce un número válido.")

def main():
    """Función para ejecutar el proceso principal"""
    tasks = load_tasks()
    
    while True:
        print("\n¿Qué te gustaría hacer?")
        command = input("1:Listar, 2:Añadir, 3:Eliminar, 9:Salir > ")
        
        if command == "1":
            list_tasks(tasks)
        elif command == "2":
            add_task(tasks)
        elif command == "3":
            delete_task(tasks)
        elif command == "9":
            print("👋 Saliendo de la aplicación. ¡Buen trabajo!")
            break
        else:
            print("⚠️ Por favor, introduce 1, 2, 3 o 9.")

if __name__ == "__main__":
    main()
        

Una vez guardado, abre tu terminal (o Símbolo del sistema/PowerShell en Windows), navega al directorio donde guardaste el archivo y ejecuta el siguiente comando:


python todo.py
        

¿Qué tal ha ido? ¿Te preguntó "¿Qué te gustaría hacer?"? Prueba a introducir "2" para añadir una tarea, "1" para ver la lista y "3" para eliminar una. Puedes salir de la aplicación introduciendo "9". ¡Increíble, ya es una aplicación en toda regla!

A partir de aquí, desvelemos juntos qué es lo que hace realmente este conjuro mágico (el código).


Paso 1: Una versión súper simple con solo "Añadir" y "Listar"

Intentar entenderlo todo de golpe puede ser abrumador. Empecemos con una versión mucho más simple del código, centrándonos solo en el corazón de la aplicación: las funciones de añadir y listar tareas.


# Prepara una lista vacía (como un array) para guardar las tareas
tasks = []

# Repite el proceso infinitamente
while True:
    print("\n¿Qué te gustaría hacer?")
    command = input("1:Listar, 2:Añadir, 9:Salir > ")

    if command == "1":
        print("--- Lista de Tareas ---")
        for task in tasks:
            print(task)
        print("---------------------")
    
    elif command == "2":
        task = input("Introduce la tarea a añadir: ")
        tasks.append(task)
        print(f"✨ Tarea '{task}' añadida.")

    elif command == "9":
        print("👋 Saliendo de la aplicación.")
        break # Sale del bucle

    else:
        print("⚠️ Por favor, introduce 1, 2 o 9.")
        

Este breve fragmento de código contiene los fundamentos de la programación.


Paso 2: Añadir la función de "Eliminar" y el manejo de errores

A continuación, hagamos posible eliminar las tareas añadidas. Para que no sea incómodo, permitiremos que el usuario elija qué tarea eliminar mediante un número. ¡Aquí subimos un poco de nivel!


# ... (Sustituye la parte de `if command == "1":` del código del Paso 1 por lo siguiente) ...

    if command == "1":
        print("--- Lista de Tareas ---")
        # Usar enumerate te permite obtener el número de la lista y el contenido a la vez
        for i, task in enumerate(tasks):
            # i empieza en 0, así que al mostrarlo le sumamos 1
            print(f"{i + 1}: {task}") 
        print("---------------------")

# ... (Añade lo siguiente después de `elif command == "2":` en el código del Paso 1) ...
    
    elif command == "3": # Añadir la función de eliminar
        # Primero, muestra la lista actual para que el usuario elija más fácil
        for i, task in enumerate(tasks):
            print(f"{i + 1}: {task}")

        try:
            num_str = input("Introduce el número de la tarea a eliminar: ")
            num = int(num_str) # Convierte el texto introducido a número

            # pop() elimina el elemento de la lista en la posición (índice) especificada
            removed_task = tasks.pop(num - 1) 
            print(f"🗑️ Tarea '{removed_task}' eliminada.")
        
        except ValueError:
            print("⚠️ Por favor, introduce un número válido.")
        except IndexError:
            print("⚠️ No existe ninguna tarea con ese número.")
        

Han aparecido algunos puntos nuevos.

Una regla de oro es que "los usuarios no operan como el desarrollador espera". Al incluir este tipo de manejo de errores, evitas que la aplicación se cierre inesperadamente y creas un programa más amigable y robusto.


Paso 3: Guardar los datos en un archivo para que no desaparezcan

Nuestra aplicación actual tiene una gran debilidad. Una vez que cierras el programa, todas las tareas que añadiste se borran. Así no sirve como lista de tareas, ¿verdad? Por eso, vamos a añadir una función para guardar las tareas en un archivo y cargarlas la próxima vez que se inicie.


# Decidir un nombre de archivo
TASKS_FILE = "tasks.txt"

# --- Definición de funciones ---
def load_tasks():
    try:
        # "r" es el modo de lectura (read)
        with open(TASKS_FILE, "r", encoding="utf-8") as f:
            # readlines() lee todas las líneas en una lista, y strip() elimina los saltos de línea
            tasks = [line.strip() for line in f.readlines()]
    except FileNotFoundError:
        # La primera vez o si el archivo no existe, dará error, así que devolvemos una lista vacía
        tasks = []
    return tasks

def save_tasks(tasks):
    # "w" es el modo de escritura (write). Si el archivo no existe, se creará.
    with open(TASKS_FILE, "w", encoding="utf-8") as f:
        for task in tasks:
            # Al escribir en el archivo, añade un salto de línea (\n) al final de cada tarea
            f.write(task + "\n")

# --- Proceso principal ---
# Al iniciar la app, primero carga las tareas del archivo
tasks = load_tasks()

# Cada vez que se añade o elimina una tarea, modifícalo para que llame a save_tasks(tasks)
# (Consulta el código completo del principio)
        

El punto clave aquí es la "lectura y escritura de archivos".

Y finalmente, como se muestra en el código completo del principio, agrupar los bloques de procesamiento usando def para crear "funciones" (a esto se le llama refactorizar) hace que el código sea mucho más limpio y fácil de entender. Cuando tu código empiece a alargarse, acostumbrarte a organizarlo en cajas (funciones) por cada funcionalidad te facilitará mucho la vida en el futuro.


Conclusión: ¡Si funciona, ganas! Y al siguiente paso

¡Buen trabajo! Ahora tienes el poder de crear tu propia aplicación de lista de tareas en Python. Lo importante no es entenderlo todo a la perfección, sino "primero, hacerlo funcionar, aunque sea copiando y pegando". Tener algo que funciona y modificarlo poco a poco, experimentando con "¿qué pasará si cambio esto?", es el camino más rápido para mejorar, y lo he vivido en carne propia.

Los errores no son algo a lo que temer, sino pistas para que tu programa sea aún mejor. Aunque no entiendas un mensaje de error, puedes pegarlo directamente en una IA y preguntar "¿qué significa este error y cómo lo arreglo?", y la mayoría de las veces te dará una solución.

¡Anímate a añadirle a la aplicación que hemos creado hoy una "función de editar tareas" o una "función para marcar tareas completadas" y haz que evolucione hasta convertirse en tu propia lista de tareas definitiva!

Siguientes pasos

Ahora que ya sabes crear una aplicación básica, ¿por qué no te atreves con los cálculos? A continuación, te enseñamos a crear una aplicación de calculadora simple que realiza las cuatro operaciones aritméticas básicas.

¡Vamos a crear una aplicación de calculadora con Python! (operaciones aritméticas)