Saltar a contenido

Unidad 1 · Lenguaje Python

Esta unidad abre el módulo de Programación de Inteligencia Artificial. Es la base sobre la que se apoyan las tres unidades siguientes: aquí consolidas Python desde cero —estructuras de datos, funciones, módulos, programación orientada a objetos, asincronía y testing— para poder construir después APIs, servir modelos y crear aplicaciones con IA.

El módulo es práctico e ingenieril: no se trata solo de "saber Python", sino de organizar proyectos, escribir código legible y verificable, y automatizar tareas. Por eso cada capítulo termina con un producto ejecutable, y los entregables son scripts y cuadernos marimo (no Jupyter).

Objetivos de la unidad

Al terminar esta unidad, sabrás:

  • Escribir y ejecutar programas Python con uv, en script o en el intérprete, dentro de un proyecto ordenado.
  • Manejar con soltura tipos, operadores, condicionales, bucles y estructuras de datos (list, tuple, dict, set), eligiendo la más adecuada.
  • Definir y documentar funciones, usar lambda, decoradores y generadores, y organizar el código en módulos y paquetes.
  • Trabajar con cadenas, ficheros, JSON y las librerías de la biblioteca estándar (datetime, pathlib, re, csv, collections e itertools).
  • Manejar errores con try/except, usar logging y escribir programas asíncronos con asyncio.
  • Aplicar programación orientada a objetos (clases, herencia, polimorfismo, @property, Enum).
  • Verificar tu código con anotaciones de tipo y tests sencillos con pytest.

En la práctica, al final de la unidad serás capaz de entregar un proyecto Python completo, tipado, testeado y reproducible, conectando con las librerías externas que necesitarás en el resto del módulo.

Evidencia de logro

Al final de la unidad deberás ser capaz de escribir, organizar y verificar un programa Python de tamaño medio (un proyecto que procese datos, genere resultados y esté cubierto por tests), justificando las decisiones de diseño. La capacidad se demostrará con el proyecto final de la unidad (1.18) y con los cuadernos de prácticas de los capítulos.

Prerrequisitos

Necesitas tener preparado el entorno: Python con uv y VS Code. Si todavía no lo tienes, empieza por la página Entorno de trabajo.

No hace falta que sepas programar: esta unidad empieza desde cero y construye el lenguaje entero, desde las variables hasta la programación orientada a objetos. Todo el grupo recorre los capítulos en orden, y cada uno reutiliza lo del anterior.

Cómo leer esta unidad

Sigue los capítulos en orden. Cada uno reutiliza el artefacto del anterior y termina con una práctica de transferencia. Tras 1.7 llega el proyecto corto 1, tu primer programa completo: hazlo sin prisa, es la foto de todo lo anterior. Los capítulos 1.16 y 1.17 preparan herramientas que se reutilizan en el proyecto final 1.18.

Hilo conductor: el asistente que crece

Toda la unidad gira en torno a un hilo conductor: una aplicación de asistente/cli que iremos construyendo y ampliando. Al principio es un script que saluda; después procesa datos, guarda notas, valida entradas, y termina siendo un pequeño proyecto Python verificado que podrás conectar a una API o a un modelo en la Unidad 2.

Cada capítulo aporta una pieza y conecta con un caso práctico que se retoma más adelante (una agenda de contactos, un contador de palabras, un sistema de notas o un mini-programa de análisis). Los ejemplos no son idénticos, pero comparten las mismas decisiones: definir entradas y salidas, separar la lógica y comprobar el comportamiento.

Y en la semana 4, tras 1.7, llega tu primer programa completo: el proyecto corto 1, la caja registradora de TechShop (3 h). Después, cada bloque de capítulos cierra con un mini-reto breve (gestor de notas con JSON tras 1.10–1.11, gestor de inventario con POO tras 1.13), resuelto con las horas de práctica de los propios capítulos.

La progresión es: script → datos → proyecto corto (primer programa completo) → funciones → módulos → POO → proyecto verificado. En la Unidad 2 ese asistente se convierte en una API; en la 3, en una aplicación con LLM.

Cómo trabajamos

  • Formato de entrega: cuadernos marimo (no Jupyter) y scripts Python. En Jupyter el estado oculto y la ejecución desordenada de celdas producen cuadernos irreproducibles; marimo ejecuta como grafo reactivo y mantiene el estado coherente.
  • Herramientas: Python 3.14 con uv, VS Code y Git/GitHub. La instalación y el uso están en las páginas comunes del sitio: Entorno de trabajo, VS Code, Cuadernos marimo, Git y GitHub y uv.
  • Regla del curso: todo ejemplo y práctica debe poder ejecutarse y mostrar su "Salida esperada". Si algo no funciona en tu equipo, el problema es reproducible y se corrige; no se entrega código "que a mí me funciona".

Capítulos

Capítulo Qué conseguirás (evidencia observable) Horas Estado
1.1 · Introducción y entorno Crear un proyecto con uv, ejecutar un script y usar el intérprete (REPL) 2 Disponible
1.2 · Variables y tipos Distinguir y convertir los tipos básicos, tratando None sin confundirlo 3 Disponible
1.3 · Operadores y expresiones Clasificar y combinar operadores (aritméticos, lógicos, is/in) con precedencia correcta 2 Disponible
1.4 · Condicionales Escribir ramas if/elif/else, anidadas y con ternario 3 Disponible
1.5 · Bucles Repetir con for/while, controlar con break/continue y usar el operador walrus := 4 Disponible
1.6 · Listas y tuplas Crear, segmentar y modificar secuencias; usar enumerate/zip/map/filter y comprehensions 4 Disponible
1.7 · Diccionarios y conjuntos Modelar claves→valores y operar conjuntos; elegir la estructura adecuada 4 Disponible
Proyecto corto 1 · La caja registradora de TechShop Primer programa completo: menú, carrito, totales y ticket 3 Disponible
1.8 · Funciones Definir y documentar funciones; reconocer *args/**kwargs y explorar decoradores y generadores 4 Disponible
1.9 · Cadenas Manipular y formatear texto, aplicando lo básico de expresiones regulares 3 Disponible
1.10 · Archivos Leer/escribir ficheros y JSON de forma segura, con pathlib 3 Disponible
1.11 · Excepciones y logging Manejar errores con try/except y registrar con logging 3 Disponible
1.12 · Módulos y paquetes Organizar el código en módulos/paquetes y usar __name__ y __init__.py 2 Disponible
1.13 · Programación orientada a objetos Modelar con clases, herencia, polimorfismo, @property y Enum 6 Disponible
1.14 · Biblioteca estándar Aprovechar datetime, os, pathlib, re, csv, collections 3 Disponible
1.15 · Librerías externas Elegir dependencias y usar httpx2, python-dotenv, pandas y NumPy 2 Disponible
1.16 · Asincronía con asyncio Escribir programas concurrentes con async/await y asyncio.gather 3 Disponible
1.17 · Type hints y testing con pytest Anotar tipos y escribir tests básicos con pytest 2 Disponible
1.18 · Proyecto final de la unidad Integrar todo en un proyecto Python completo y verificado 4 Disponible
Total 60

Reparto semanal orientativo

Semanas Contenido Horas Hito orientativo
1 1.1 + 1.2 + comienzo de 1.3 6 Proyecto hola_ia, conversiones y primera expresión
2 Fin de 1.3 + 1.4 + comienzo de 1.5 6 Lógica de una decisión y primer bucle
3 Fin de 1.5 + 1.6 6 Programas repetitivos y resumen de una colección
4 1.7 + comienzo del proyecto corto 1 6 Colecciones y la caja registradora en marcha
5 Fin del proyecto corto 1 + 1.8 + comienzo de 1.9 6 Primer programa completo y funciones reutilizables
6 Fin de 1.9 + 1.10 + comienzo de 1.11 6 Análisis de texto y notas que persisten
7 Fin de 1.11 + 1.12 + comienzo de 1.13 6 Fallos gestionados y proyecto modular
8 Fin de 1.13 + comienzo de 1.14 6 Modelo orientado a objetos
9 Fin de 1.14 + 1.15 + 1.16 6 Dependencias y consultas concurrentes
10 1.17 + 1.18 6 Suite de pruebas y proyecto final

El reparto es orientativo y se ajusta al ritmo real del grupo. Los capítulos largos se han repartido entre semanas consecutivas para que las seis horas semanales incluyan explicación, práctica y documentación. El proyecto final se inicia con el diseño durante la semana 10 y se trabaja en las sesiones previstas. El trabajo autónomo, cuando se indique, sirve para completar la práctica, no para sustituir contenidos de la unidad.

Qué significan las etiquetas de los bloques

Los capítulos distinguen núcleo, ampliación guiada y profundización para ordenar la explicación y el tiempo de clase. Todo el grupo trabaja los contenidos de esas secciones; las etiquetas indican el nivel de detalle y el momento de la práctica, no contenidos que se puedan omitir ni recorridos alternativos.

Cómo leer los bloques de código

Cuando una valla incluye un título, ese título indica el papel didáctico del bloque, no solo el lenguaje empleado:

Etiqueta Qué debe hacer el alumnado
Núcleo Comprenderlo porque pertenece al recorrido principal.
Núcleo · Ejecutable Comprenderlo y probarlo en el contexto indicado.
Ejercicio Modificarlo o completarlo para comprobar una decisión.
Ampliación Estudiarlo después; no bloquea el producto evaluable.
Referencia Consultar un esquema, plantilla o contrato.
Infraestructura Ejecutar una instalación, configuración o prueba del entorno.

«Ejecutable» significa que puede reproducirse siguiendo las instrucciones de la página; no que un fragmento aislado tenga todas sus dependencias. Cuando el texto ya explica claramente el propósito, no se añade una etiqueta redundante.

Productos evaluables

A lo largo de la unidad entregarás, en scripts y cuadernos marimo, siempre ejecutados y con su "Salida esperada", interpretación y conclusiones:

Cuaderno/script Capítulo Qué entregas
Proyecto hola_ia/ 1.1 Proyecto con uv, saludo y sesión de REPL
02_variables_tipos.py 1.2–1.3 Conversión de tipos y uso de operadores
03_decisiones.py 1.4 Condicionales (validación de acceso, IMC)
04_bucles.py 1.5 Bucles (factorial, menú, tabla de multiplicar)
05_colecciones.py 1.6–1.7 Procesar listas y tuplas, añadir diccionarios y conjuntos, y justificar la estructura elegida
05b_caja_registradora.py Proyecto corto 1 Primer programa completo: menú, carrito, totales y ticket
06_funciones.py 1.8 Funciones con parámetros, docstrings y las técnicas previstas en el capítulo
07_cadenas.py 1.9 Análisis y validación de texto
08_archivos_log.py 1.10–1.11 Sistema de notas con persistencia, validación y logging
09_modulos.py 1.12 Proyecto modular con funciones y responsabilidades separadas
09_modulos_poo.py 1.13 Modelado orientado a objetos con propiedades y Enum
10_biblioteca_estandar.py 1.14 Informe reproducible con módulos de la biblioteca estándar
11_dependencias.py 1.15 Dependencias declaradas y respuesta HTTP simulada
12_asyncio.py 1.16 Consultas concurrentes con errores y timeout
13_tipos_y_tests.py 1.17 Funciones anotadas y suite de pruebas con pytest
14_proyecto_final.py 1.18 Proyecto Python completo, tipado y testeado

La práctica final (1.18) integra la unidad: procesa datos, guarda/recupera información, define funciones y clases, y verifica el código con tests. No introduce una herramienta nueva: comprueba que sabes elegir y conectar lo aprendido.

Metodología y atención a la diversidad

  • Aprendizaje por construcción: cada capítulo termina en un artefacto ejecutable que se amplía en el siguiente (script → datos → funciones → módulos → POO → proyecto).
  • Práctica de recuperación: cada sesión abre con preguntas breves sobre lo anterior, no con un repaso pasivo.
  • Línea de base primero: todo programa se valida con el caso más simple antes de complicarlo; si el caso trivial falla, hay un bug antes de añadir funcionalidad.
  • Retroalimentación formativa: entregas pequeñas y frecuentes con corrección rápida antes de la prueba del cuatrimestre.
  • DUA: formatos alternativos (texto, cuaderno marimo, diagrama, demo en vivo), andamiaje progresivo y tiempo extra cuando se justifica.
  • Pair/mob programming: resolución de errores en parejas y revisión de código entre iguales como práctica habitual.
  • Ruta reproducible: cada práctica debe ejecutarse sin servicios externos de pago y documentar cuándo se necesita una clave o un recurso externo.

Frontera con Machine Learning

Aquí usamos el ecosistema de datos sin repetir su teoría: NumPy, Pandas y SQL se estudian a fondo en el módulo de Machine Learning (UD1). En este módulo los utilizamos (capítulo 1.15 y unidades siguientes) para servir modelos y construir aplicaciones, sin volver a explicar groupby, joins ni sintaxis SQL.

Sistema de evaluación

Instrumentos y pesos (provisionales, a alinear con los resultados de aprendizaje):

Instrumento Peso
Portfolio de prácticas y mini-proyectos (aplicaciones) 40 %
Prueba práctica de programación (en vivo) 30 %
Proyecto final (UD4) 20 %
Participación, actitud y documentación 10 %

Calendario (1º cuatrimestre, semanas 1–10 de la UD1):

Momento Instrumentos
Final UD1 (semana 10) Prácticas de Python (portfolio) + proyecto final de la UD1
Prueba de cuatrimestre (semana 15) Prueba práctica de programación

Recuperación: las prácticas no superadas se reentregan corregidas; la prueba práctica tiene recuperación al final del cuatrimestre; el proyecto puede reentregarse tras revisión; existe convocatoria extraordinaria.

Siguiente paso

Empieza por 1.1 · Introducción y entorno y recorre la unidad en orden, hasta 1.18 · Proyecto final.

Si en algún punto te bloqueas, la página Qué volver a mirar cuando algo no cuadra relaciona lo que te pasa con el capítulo que lo explica.