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,collectionseitertools). - Manejar errores con
try/except, usarloggingy escribir programas asíncronos conasyncio. - 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.