miércoles, 11 de febrero de 2026

Python

Logo de Python


Usos prácticos de listas (1)


Sabemos qué es una lista en Python y cómo podemos usarla, pero nos interesa conocer xómo y para qué podemos usarlas en la práctica. Una de estas utilidades será el tema de esta entrada, concretamente su uso como soporte para la recopilación de datos.

Dado que las listas permiten incluir diferentes tipos de datos, que los datos estén repetidos y que sea posoble modificarlos, estas colecciones son muy útiles para situaciones en las que tenemos que recopilar datos de distintos tipos y además desconocemos cuantos.

Un ejemplo de ello es cuando introducimos por teclado los resultados de la aplicación de una prueba grupal. En este caso tenemos datos de distinto tipo (string para nombres, datos en formato fecha, valores numéricos que se pueden repetir...) y no sabemos a priori de cuantos datos estamos hablando, ya que unos alumnos pueden haber resulto n ejercicios y otros n+/x.

En estas condiciones, podemos empezar declarando una lista vacía y después darle contenido desde teclado mediante un bucle. Una vez cumplimentado el "registro" procedemos a almacenarlo en un archivo a modo de base de datos.

Vamos a pedirle a Gemini que genere un script que cumpla estos objetivos y a analizar el modo en que plantea el uso de la lista.



import os

def registrar_evaluacion_continua():
    nombre_archivo = "base_datos_alumnos.txt"

    # Si el archivo no existe, creamos la cabecera para identificar columnas
    if not os.path.exists(nombre_archivo):
        with open(nombre_archivo, "w", encoding="utf-8") as f:
            headers = ["Nombre", "Apellidos", "Edad", "Curso"]
            items_headers = [f"Item_{i:02d}" for i in range(1, 31)]
            f.write(",".join(headers + items_headers + ["PD"]) + "\n")

    while True:
        print("\n" + "="*40)
        # 1. Recogida de identificación
        nombre = input("Nombre: ")
        apellidos = input("Apellidos: ")
        edad = input("Edad: ")
        curso = input("Curso (1º a 6º EP): ")

        # Iniciamos lista: [Nombre, Apellidos, Edad, Curso]
        sujeto_datos = [nombre, apellidos, edad, curso]

        aciertos = 0
        finalizado_por_tiempo = False

        print(f"\nIntroduzca resultados para {nombre} (1:Acierto, 0:Fallo, Enter:Fin tiempo)")

        # 2. Bucle de 30 ítems
        for i in range(1, 31):
            if not finalizado_por_tiempo:
                res = input(f"Ítem {i:02d}: ").strip()
                if res == "":
                    finalizado_por_tiempo = True
                    sujeto_datos.append("") # Celda vacía para el resto
                else:
                    sujeto_datos.append(res)
                    if res == "1":
                        aciertos += 1
            else:
                sujeto_datos.append("") # Relleno por no finalizado

        # 3. Añadir Puntuación Directa (PD) al final
        sujeto_datos.append(str(aciertos))

        # Feedback inmediato al usuario
        print(f"\n>>> REGISTRO FINALIZADO: {nombre} {apellidos}")
        print(f">>> Puntuación Directa obtenida: {aciertos}")

        # 4. Guardado persistente (Modo 'a' para no borrar sesiones previas)
        with open(nombre_archivo, "a", encoding="utf-8") as f:
            f.write(",".join(sujeto_datos) + "\n")

        # Opción de cerrar el script tras este alumno
        if input("\n¿Desea registrar a otro alumno ahora? (s/n): ").lower() != 's':
            break

    print(f"\n[SISTEMA] Datos sincronizados en '{nombre_archivo}'.")

if __name__ == "__main__":
    registrar_evaluacion_continua()


Este script funciona correctamente en local (trasladándolo al IDE) y se ajusta a lo solicitado al bot, aunque fue necesario ir puliendo la demanda hasta conseguirlo.

El problema, no obstante, es que no nos ayuda a entender y a aprender. Resuelve la tarea según unos parámetros que no quedan explicitados y que son corregidos cuando se le requiere, aunque tampoco se explica porqué no hizo antes lo que ahora es necesario, pero reincide en una propuesta que se aleja del modo "didáctico" en que queremos que lo haga para, ajustándose al nuestro actual nivel de complejidad en la demanda, facilite nuestro proceso de aprendizaje: su meta es fundamentalmente la eficiencia, resolver el problema.

Para lograr esto es necesario:

  • Subdivir la tarea paso a paso.
  • Pedir al chatbot que ejecute esa construcción secuencial del script.
  • Realizar sobre esas propuestas las modificaciones que consideremos pertinente.

De este modo es posible alcanzar nuestro objetivo, que es comprender el script antes que conseguir que funcione.Y todo ello en relación con nuestro objetivo inicial: el uso práctico de una lista como recurso para recopilar datos.

Desarrollaremos este procedimiento en entradas próximas. Dada su complejidad y el tiempo que requiere para su desarrollo, por el momento será suficiente con presentarlo.