diff --git a/README.es.md b/README.es.md
index be3c259c..1259a4d3 100644
--- a/README.es.md
+++ b/README.es.md
@@ -1,72 +1,172 @@
-# 🐍 Tutorial Master Python
+
-Por [@alesanchezr](https://twitter.com/alesanchezr) y [otros colaboradores](https://github.com/4GeeksAcademy//master-python-programming-exercises/graphs/contributors) de [4Geeks Academy](http://4geeksacademy.co/)
+# Domina Python Practicando (interactivo)
-

-
+[](https://4geeks.com/es/interactive-exercise/practice-python)
+[](https://learnpack.co)
+[](https://codespaces.new/?repo=4GeeksAcademy/master-python-programming-exercises)
+
+
-
-Después de terminar la serie de principiantes, funciones y bucles; esta serie te preparará para tu próximo trabajo o cualquier otro desafío de programación. Practica todo lo necesario para construir algoritmos con Python, desde desafíos intermedios hasta difíciles.
-Todo el tutorial es 👆 interactivo y ✅ calificado automáticamente.
+Domina Python Practicando es un tutorial interactivo con 47 ejercicios de código que resuelves dentro de VS Code, más una página de bienvenida. 43 se corrigen solos con pytest y todos traen una solución de referencia. Se completa en unas 10 horas y va de la aritmética con enteros y el manejo de dígitos a las expresiones regulares, los generadores y la programación orientada a objetos con herencia, métodos estáticos y métodos de clase.
-Estos Ejercicios son colaborativos, ¡te necesitamos! Si encuentras algún error o falta de ortografía, por favor contribuye y repórtalo.
-
+## 📋 Sobre este tutorial
+
+- **Dificultad**: declarada como `easy` en [learn.json](https://github.com/4GeeksAcademy/master-python-programming-exercises/blob/HEAD/learn.json), aunque el rango es amplio: el ejercicio 001 es un solo `print()` y el 045 es un método de clase con una variable de clase.
+- **Duración**: 10 horas (`"duration": 10` en learn.json).
+- **Ejercicios**: 48 carpetas dentro de [`exercises/`](https://github.com/4GeeksAcademy/master-python-programming-exercises/tree/HEAD/exercises) — 1 página de bienvenida y 47 ejercicios de código.
+- **Corrección automática**: sí, `"graded": true`. 43 de los 47 ejercicios de código incluyen una batería de tests `test.py`.
+- **Tecnologías**: Python 3 (el dev container fija la 3.10), pytest 6.2.5, pytest-testdox, mock y LearnPack sobre Node.js 22.
+- **Soluciones en vídeo**: no hay (`"videoSolutions": false`), pero los 47 ejercicios de código traen un archivo `solution.hide.py`.
+- **Instrucciones disponibles en**: [English](https://github.com/4GeeksAcademy/master-python-programming-exercises/blob/HEAD/README.md) y [Español](https://github.com/4GeeksAcademy/master-python-programming-exercises/blob/HEAD/README.es.md) — las 48 carpetas llevan `README.md` y `README.es.md`.
+
+
+## 🎯 ¿Qué vas a aprender?
+
+Los ejercicios están ordenados para que cada bloque se apoye en el anterior:
+
+- **Aritmética con enteros y decimales**: división entera `//`, módulo `%`, potencia `**`, `round()` y el módulo `math` (importado en 6 de las soluciones de referencia).
+- **Manejo de dígitos sin pasar por texto**: sacar la cifra de las decenas, sumar los dígitos de un número de tres cifras, intercambiar dígitos, leer la cifra que va justo después de la coma decimal.
+- **Listas, tuplas y diccionarios**: construir un diccionario de cuadrados, generar una matriz de dos dimensiones, convertir un número indefinido de argumentos en una lista y en una tupla a la vez, contar la frecuencia de palabras.
+- **Ordenación por varias claves**: `from operator import itemgetter` para ordenar tuplas `(nombre, edad, nota)` por tres criterios con prioridad.
+- **Bases numéricas**: convertir cadenas binarias de 4 dígitos con `int(binario, 2)`.
+- **Expresiones regulares**: `import re` y `re.search()` para validar una contraseña contra seis reglas a la vez.
+- **Generadores**: una clase con una función generadora que usa `yield` para recorrer los múltiplos de 7.
+- **Programación orientada a objetos**: `__init__`, `__str__`, herencia con `super()`, polimorfismo sobrescribiendo un método del padre, `@staticmethod` y `@classmethod` con variables de clase.
+
+Hay dos temas que no aparecen: no se toca el manejo de errores con `try`/`except` ni la lectura o escritura de ficheros en ninguna de las 48 carpetas (comprobado en todos los `README.md`, `app.py` y `solution.hide.py`). La recursividad y `async` tampoco salen.
+
+## 👀 ¿Qué vas a construir?
+
+47 programas pequeños en Python, cada uno en su carpeta numerada. Los tres bloques:
+
+**Ejercicios 001 a 022 — 23 problemas numéricos** (la carpeta `006.1` desdobla uno de ellos). Escribes `digits_sum()`, que debe devolver 17 para la entrada 854; `day_of_week()`, que devuelve 4 para el día 1 de un año que empieza en jueves; `digital_clock()`, que convierte 150 minutos después de medianoche en `(2, 30)`; `square_root()`, que devuelve `7.07` para 50; además de un factorial, un cálculo de siglo, un reparto de manzanas y una ruta de coche.
+
+**Ejercicios 023 a 041 — 19 problemas de estructuras de datos y algoritmos** (dos de ellos, el `024` y el `039`, ya te piden escribir una clase). `two_dimensional_list(3, 5)` tiene que devolver `[[0, 0, 0, 0, 0], [0, 1, 2, 3, 4], [0, 2, 4, 6, 8]]`. `divisible_binary("0100,0011,1010,1001")` tiene que devolver la cadena `"1010"`. `computed_value(9)` tiene que devolver 11106, la suma de 9 + 99 + 999 + 9999. `net_amount("D 300 D 300 W 200 D 100")` tiene que devolver 500. `valid_password("ABd1234@1")` tiene que devolver exactamente la cadena `"Valid password"`. `compute_robot_distance(["UP 5", "DOWN 3", "LEFT 3", "RIGHT 2"])` tiene que devolver 2. Y `compute_word_frequency()` tiene que informar `Python:5` para la frase de ejemplo.
+
+**Ejercicios 042 a 045 — 5 ejercicios de orientación a objetos.** Construyes una clase `Student`, le añades `__init__` y `__str__` a una clase `Book`, extiendes `Student` en un `CollegeStudent` con un atributo `major` y un método `attend_lecture()`, y terminas con una clase `MathOperations` con un `add_numbers()` estático y un método de clase `calculate_circle_area()` que devuelve `78.53975` para un radio de 5.
+
+## 🎓 ¿Qué necesitas antes de empezar?
+
+No necesitas instalar nada si abres el repositorio en GitHub Codespaces: el dev container ya provisiona Python 3.10, Node.js 22, pytest y el plugin de Python de LearnPack.
+
+Lo que sí necesitas es Python previo: esta es la cuarta y última serie de un recorrido, y la página de bienvenida te remite a las tres anteriores.
+
+- [Python para principiantes](https://github.com/4GeeksAcademy/python-beginner-programming-exercises) — variables, `print()`, condicionales.
+- [Practica funciones](https://github.com/4GeeksAcademy/python-functions-programming-exercises) — parámetros, valores de retorno, ámbito.
+- [Practica bucles y listas](https://github.com/4GeeksAcademy/python-lists-loops-programming-exercises) — `for`, `while`, manejo de listas.
+
+Si ya sabes declarar una función y recorrer una lista, puedes empezar por aquí sin más. El ejercicio 001 sigue siendo un `print("Hello World")` a secas, así que la entrada es suave.
+
+## ✅ ¿Cómo funciona la corrección automática?
+
+Cada ejercicio corregido lleva un `test.py` escrito con pytest. Cada comprobación va etiquetada con `@pytest.mark.it("...")` y `pytest-testdox` imprime esas etiquetas como frases legibles, así que un fallo te dice qué se esperaba en vez de soltarte un traceback.
+
+Las baterías comprueban dos cosas distintas según el ejercicio:
+
+- **Valores devueltos.** En `013-sum_of_digits` los tests verifican que `digits_sum` existe y es invocable, que devuelve algo, que el tipo devuelto es `int` y, por último, que `digits_sum(854) == 17`.
+- **Lo que se imprime.** En `001-hello_world` el test captura la salida estándar y la compara carácter a carácter con `"Hello World\n"`.
+
+Cuatro ejercicios no tienen `test.py` y son práctica libre: `031-sum-eigth-digit`, `033-number-of-uppercase`, `035-square-each-odd-number` y `039-class-that-iterates`. Es decir, 43 corregidos de 47.
+
+> 💡 La corrección es estricta a propósito, y los propios mantenedores del repositorio lo advierten: toma un test en rojo como una pista sobre la forma que se espera de tu respuesta, no como un veredicto sobre tu lógica.
-## Instalación en un clic (recomendado)
+## 💡 ¿Qué errores conviene evitar?
-Puedes empezar estos ejercicios en pocos segundos haciendo clic en: [Abrir en Codespaces](https://codespaces.new/?repo=4GeeksAcademy/master-python-programming-exercises) (recomendado) o [Abrir en Gitpod](https://gitpod.io#https://github.com/4GeeksAcademy/master-python-programming-exercises.git).
+- **Imprimir cuando el test espera un `return`.** La mayoría de las baterías llaman a tu función y miran el valor que devuelve. `digits_sum(854)` tiene que *devolver* 17; imprimir 17 falla la comprobación de tipo.
+- **Fiarte del enunciado en vez del test en los ejercicios 019 y 030.** Las instrucciones de `019-digital_clock` dicen que la función debe *imprimir* dos números, pero su test comprueba `digital_clock(194) == (3, 14)`. La misma trampa está en `030-divisable-binary`: el enunciado dice *imprimir* los números divisibles entre 5, mientras que el test comprueba `divisible_binary("0100,0011,1010,1001") == "1010"`. En los dos hay que devolver el valor.
+- **Formatear el ejercicio 041 línea a línea.** El enunciado pide una clave por línea, pero el test compara la salida contra una sola línea: `"2:2 3.:1 3?:1 New:1 Python:5 Read:1 and:1 between:1 choosing:1 or:2 to:1\n"`. Fíjate en que no hay espacio después de los dos puntos.
+- **Olvidar `import re` en el ejercicio 037**, y olvidar que las reglas de la contraseña incluyen *los dos* límites: mínimo 6 caracteres y máximo 12. La cadena de fallo tiene que ser exactamente `"Invalid password. Please try again"`.
+- **Cambiar filas por columnas en el ejercicio 026.** `two_dimensional_list(3, 5)` devuelve 3 filas de 5 elementos, no 5 filas de 3.
+- **Redondear con la precisión equivocada.** El ejercicio 021 se queda con dos decimales (`square_root(50)` da `7.07`); el 040 redondea la distancia del robot al entero más cercano.
+- **Confundir métodos estáticos con métodos de clase.** Un `@staticmethod` (ejercicio 044) no recibe ni `self` ni `cls` y no puede leer el estado de la clase; un `@classmethod` (ejercicio 045) recibe `cls`, y eso es lo que permite que `calculate_circle_area()` llegue a la variable de clase `pi`.
+- **Cambiarle el nombre a la función.** La primera comprobación de casi todas las baterías es `assert callable(app.)`, así que una errata en el nombre tumba todo lo que viene detrás.
-> Una vez ya tengas abierto VSCode, los ejercicios de LearnPack deberían empezar automáticamente; si esto no sucede puedes intentar empezar los ejercicios escribiendo este comando en tu terminal: `$ learnpack start`
+## ❓ Preguntas frecuentes
-## Instalación local:
+### ¿Cuánto se tarda en terminar estos ejercicios de Python?
-1. Asegúrate de instalar [LearnPack](https://learnpack.co), node.js version 14+ y Python version 3+. Este es el comando para instalar LearnPack:
+El tutorial declara 10 horas. Repartidas entre 47 ejercicios de código salen unos 13 minutos de media, pero la distribución es desigual: el bloque numérico (001–022) va rápido en cuanto dominas `//` y `%`, mientras que los de expresiones regulares, ordenación y objetos cuestan bastante más.
+
+### ¿Hace falta saber Python antes de empezar?
+
+Algo sí. Esta es la última serie de un recorrido de cuatro, y la página de bienvenida da por sabidos las variables, las funciones, los bucles y las listas. No necesitas base de orientación a objetos: la teoría se explica desde cero en el ejercicio 042, con un ejemplo resuelto de la clase `Student` antes de pedirte que escribas nada. Eso sí, avisamos: hay dos ejercicios anteriores que ya dan por hecho que sabes escribir una clase casi sin explicación previa, el `024-class-with-two-methods` (que además está corregido) y el `039-class-that-iterates`.
+
+### ¿Es gratis y puedo reutilizar el contenido?
+
+Abrirlo y resolverlo no cuesta nada. Reutilizar el contenido sí tiene condiciones: [LICENSE.md](https://github.com/4GeeksAcademy/master-python-programming-exercises/blob/HEAD/LICENSE.md) reserva todos los derechos de propiedad intelectual y prohíbe expresamente republicar, vender, sublicenciar, reproducir o redistribuir el material. No es una licencia de código abierto. El Python que escribas en tus propios `app.py` es tuyo.
+
+### ¿Tengo que instalar algo en mi ordenador?
+
+No. Abrir el repositorio en Codespaces te da un entorno listo. La instalación local también es posible y está documentada más abajo: necesita Python 3, Node.js y el plugin de Python de LearnPack.
+
+### ¿Hay soluciones en vídeo?
+
+No. `learn.json` pone `videoSolutions` en `false`. Lo que sí tienes es un archivo `solution.hide.py` en cada una de las 47 carpetas de código, además de las pistas al final de la mayoría de los ejercicios (39 de las 48 carpetas llevan sección de pistas), que enlazan a referencias externas como las lecciones de snakify sobre números enteros y decimales.
+
+### ¿Sigue mereciendo la pena practicar algoritmos así?
+
+Los ejercicios apuntan a la mecánica que una entrevista o una revisión de código siguen mirando: razonar con división entera en lugar de convertir a texto, elegir el contenedor adecuado, ordenar por varias claves y entender por qué un método está atado a la clase y no a la instancia. Eso no caduca. Lo que esta serie no enseña es manejo de errores, ficheros ni ninguna librería de terceros.
+
+
+## 🚀 Cómo empezar
+
+El camino más rápido es un clic: [abrir este tutorial en GitHub Codespaces](https://codespaces.new/?repo=4GeeksAcademy/master-python-programming-exercises). También existe la alternativa de [Gitpod](https://gitpod.io#https://github.com/4GeeksAcademy/master-python-programming-exercises).
+
+Cuando se abra VS Code, los ejercicios de LearnPack deberían arrancar solos. Si no lo hacen, ejecuta esto en la terminal:
```bash
-npm i @learnpack/learnpack@2.1.20 -g && learnpack plugins:install @learnpack/python@1.0.0
+learnpack start
```
-2. Clona o descarga este repositorio en tu ambiente local.
+## 💻 Instalación local
+
+1. Instala LearnPack y el plugin de Python, con las mismas versiones que provisiona el dev container:
```bash
-$ git clone https://github.com/4GeeksAcademy/master-python-programming-exercises.git
-$ cd master-python-programming-exercises
+npm i @learnpack/learnpack@5.0.348 -g && learnpack plugins:install @learnpack/python@1.0.6
```
-> Nota: Una vez que termine de descargar, encontrarás la carpeta "exercises" que contiene todos los ejercicios.
-
-3. Comienza con los ejercicios ejecutando los siguientes comandos en el mismo nivel que tu archivo learn.json:
+2. Clona el repositorio y entra en él:
```bash
-$ pip3 install pytest==6.2.5 pytest-testdox mock
-$ learnpack start
+git clone https://github.com/4GeeksAcademy/master-python-programming-exercises.git
+cd master-python-programming-exercises
```
-
-## ¿Cómo están organizados los ejercicios?
+3. Instala las dependencias de test y arranca el tutorial desde la misma carpeta donde está `learn.json`:
-Cada ejercicio es un pequeño proyecto en Python que contiene los siguientes archivos:
+```bash
+pip3 install pytest==6.2.5 pytest-testdox mock
+learnpack start
+```
-1. **app.py:** representa el archivo de entrada de Python que será ejecutado en el computador.
-2. **README.md:** contiene las instrucciones del ejercicio.
-3. **test.py:** no tienes que abrir este archivo. Contiene los scripts de pruebas del ejercicio.
+## 📚 Cómo están organizados los ejercicios
-> Nota: Estos ejercicios tienen calificación automática. Los tests son muy rígidos y estrictos, mi recomendación es que no prestes demasiada atención a los tests y los uses solo como una sugerencia o podrías frustrarte.
+Cada ejercicio es una carpeta dentro de `exercises/` y contiene hasta cinco archivos:
-# Colaboradores
-
-Gracias a estas personas maravillosas ([emoji key](https://github.com/kentcdodds/all-contributors#emoji-key)):
+- `app.py` — el archivo que editas y el que ejecuta el ordenador. Está en los 47 ejercicios de código.
+- `README.md` — las instrucciones, en inglés.
+- `README.es.md` — las mismas instrucciones en español. Está en las 48 carpetas.
+- `test.py` — la batería de pytest. No hace falta que lo abras. Está en 43 carpetas.
+- `solution.hide.py` — una solución de referencia. Está en los 47 ejercicios de código.
-1. [Alejandro Sanchez (alesanchezr)](https://github.com/alesanchezr), contribución: (programador) 💻, (idea) 🤔, (build-tests) ⚠️, (pull-request-review) 👀, (build-tutorial) ✅, (documentación) 📖
+La carpeta `000-welcome` solo tiene los dos READMEs: es la página de introducción, no un ejercicio.
-2. [Paolo (plucodev)](https://github.com/plucodev), contribución: (bug reports) 🐛, (programador) 💻, (traducción) 🌎
+¿Encuentras un fallo o una errata? Abre una incidencia en [este repositorio](https://github.com/4GeeksAcademy/master-python-programming-exercises/issues) — los ejercicios se construyeron en colaboración y los reportes son bienvenidos.
-3. [Marco Gómez (marcogonzalo)](https://github.com/marcogonzalo), contribution: (bug reports) 🐛, (translation) 🌎
+## 🤝 Colaboradores
-Este proyecto sigue la especificación [all-contributors](https://github.com/kentcdodds/all-contributors). ¡Todas las contribuciones son bienvenidas!
+Gracias a estas personas ([leyenda de emojis](https://github.com/kentcdodds/all-contributors#emoji-key)):
-Este y otros ejercicios son usados para [aprender a programar](https://4geeksacademy.com/es/aprender-a-programar/aprender-a-programar-desde-cero) por parte de los alumnos de 4Geeks Academy [Coding Bootcamp](https://4geeksacademy.com/us/coding-bootcamp) realizado por [Alejandro Sánchez](https://twitter.com/alesanchezr) y muchos otros contribuyentes. Conoce más sobre nuestros [Cursos de Programación](https://4geeksacademy.com/es/curso-de-programacion-desde-cero?lang=es) para convertirte en [Full Stack Developer](https://4geeksacademy.com/es/coding-bootcamps/desarrollador-full-stack/?lang=es), o nuestro [Data Science Bootcamp](https://4geeksacademy.com/es/coding-bootcamps/curso-datascience-machine-learning).
+- [Alejandro Sánchez (alesanchezr)](https://github.com/alesanchezr) — código 💻, idea 🤔, tests ⚠️, revisión de pull requests 👀, construcción del tutorial ✅, documentación 📖
+- [Paolo (plucodev)](https://github.com/plucodev) — reportes de fallos 🐛, código 💻, traducción 🌎
+- [Marco Gómez (marcogonzalo)](https://github.com/marcogonzalo) — reportes de fallos 🐛, traducción 🌎
+Y a [todo el mundo que aparece en el gráfico de colaboradores](https://github.com/4GeeksAcademy/master-python-programming-exercises/graphs/contributors). Este proyecto sigue la especificación [all-contributors](https://github.com/kentcdodds/all-contributors) y toda contribución es bienvenida.
+
+Este tutorial es uno de tantos construidos por alumnos y profesores de [4Geeks Academy](https://4geeks.com).
+
diff --git a/README.md b/README.md
index 8dc62c3a..4dccfc27 100644
--- a/README.md
+++ b/README.md
@@ -1,74 +1,172 @@
-# 🐍 Mastering Python Algorithms Tutorial
+
-By [@alesanchezr](https://twitter.com/alesanchezr) and [other contributors](https://github.com/4GeeksAcademy//master-python-programming-exercises/graphs/contributors) at [4Geeks Academy](http://4geeksacademy.co/)
+# Master Python by practice (interactive)
-

+[](https://4geeks.com/en/interactive-exercise/practice-python)
+[](https://learnpack.co)
+[](https://codespaces.new/?repo=4GeeksAcademy/master-python-programming-exercises)
+
-*Estas instrucciones [están disponibles en 🇪🇸 español](https://github.com/4GeeksAcademy/master-python-programming-exercises/blob/master/README.es.md) :es:*
+Master Python by practice is an interactive tutorial with 47 coding exercises that you solve inside VS Code, plus a welcome page. 43 of them are auto-graded by pytest and every one ships a reference solution. It takes roughly 10 hours and goes from integer arithmetic and digit manipulation to regular expressions, generators and object-oriented programming with inheritance, static methods and class methods.
-After you finish the begginers, functions, and loop series, this series will really prepare you for your next job or any other programming challenge. Practice everything there is to know to build algorithms with Python, from intermediate to hard challenges.
+
+## 📋 About this tutorial
+
+- **Difficulty**: declared as `easy` in [learn.json](https://github.com/4GeeksAcademy/master-python-programming-exercises/blob/HEAD/learn.json), although the range is wide: exercise 001 is a single `print()` and exercise 045 is a class method with a class variable.
+- **Duration**: 10 hours (`"duration": 10` in learn.json).
+- **Exercises**: 48 folders inside [`exercises/`](https://github.com/4GeeksAcademy/master-python-programming-exercises/tree/HEAD/exercises) — 1 welcome page and 47 coding exercises.
+- **Automatic grading**: yes, `"graded": true`. 43 of the 47 coding exercises include a `test.py` pytest suite.
+- **Technologies**: Python 3 (the dev container pins 3.10), pytest 6.2.5, pytest-testdox, mock, LearnPack on Node.js 22.
+- **Video solutions**: none (`"videoSolutions": false`), but all 47 coding exercises ship a `solution.hide.py` file.
+- **Instructions available in**: [English](https://github.com/4GeeksAcademy/master-python-programming-exercises/blob/HEAD/README.md) and [Español](https://github.com/4GeeksAcademy/master-python-programming-exercises/blob/HEAD/README.es.md) — all 48 folders carry both a `README.md` and a `README.es.md`.
+
-The entire tutorial is 👆 interactive and ✅ auto-graded.
+## 🎯 What will you learn?
-These exercises were built in collaboration, we need you! If you find any bugs or misspellings, please contribute and report them.
+The exercises are ordered so that each block builds on the previous one:
-
+- **Integer and float arithmetic**: floor division `//`, modulo `%`, exponentiation `**`, `round()` and the `math` module (imported in 6 of the reference solutions).
+- **Digit manipulation without strings**: extracting the tens digit, summing the digits of a three-digit number, swapping digits, reading the digit right after the decimal point.
+- **Lists, tuples and dictionaries**: building a squares dictionary, generating a 2-D matrix, turning a variable number of arguments into both a list and a tuple, counting word frequency.
+- **Multi-key sorting**: `from operator import itemgetter` to order `(name, age, score)` tuples by three criteria in priority order.
+- **Number bases**: converting 4-digit binary strings with `int(binary, 2)`.
+- **Regular expressions**: `import re` and `re.search()` to validate a password against six rules at once.
+- **Generators**: a class with a generator function that uses `yield` to walk the multiples of 7.
+- **Object-oriented programming**: `__init__`, `__str__`, inheritance with `super()`, polymorphism by overriding a parent method, `@staticmethod` and `@classmethod` with class variables.
+
+Two topics are deliberately absent: there is no `try`/`except` error handling and no file input/output anywhere in the 48 exercise folders (verified across every `README.md`, `app.py` and `solution.hide.py`). Recursion and `async` do not appear either.
+
+## 👀 What will you build?
+
+47 small Python programs, each in its own numbered folder. The three blocks:
+
+**Exercises 001 to 022 — 23 numeric problems** (folder `006.1` splits one of them in two). You write `digits_sum()`, which must return 17 for the input 854; `day_of_week()`, which returns 4 for day 1 of a year that starts on a Thursday; `digital_clock()`, which turns 150 minutes past midnight into `(2, 30)`; `square_root()`, which returns `7.07` for 50; plus a factorial, a century calculator, an apple-sharing problem and a car-route problem.
+
+**Exercises 023 to 041 — 19 data-structure and algorithm problems** (two of them, `024` and `039`, already ask you to write a class). `two_dimensional_list(3, 5)` must return `[[0, 0, 0, 0, 0], [0, 1, 2, 3, 4], [0, 2, 4, 6, 8]]`. `divisible_binary("0100,0011,1010,1001")` must return the string `"1010"`. `computed_value(9)` must return 11106, the sum of 9 + 99 + 999 + 9999. `net_amount("D 300 D 300 W 200 D 100")` must return 500. `valid_password("ABd1234@1")` must return the exact string `"Valid password"`. `compute_robot_distance(["UP 5", "DOWN 3", "LEFT 3", "RIGHT 2"])` must return 2. `compute_word_frequency()` must report `Python:5` for the sample sentence.
+
+**Exercises 042 to 045 — 5 object-oriented exercises.** You build a `Student` class, add `__init__` and `__str__` to a `Book` class, extend `Student` into a `CollegeStudent` with a `major` attribute and an `attend_lecture()` method, then write a `MathOperations` class with a static `add_numbers()` and a class method `calculate_circle_area()` that returns `78.53975` for a radius of 5.
+
+## 🎓 What do you need before starting?
+
+Nothing installed, if you open the repository in GitHub Codespaces: the dev container provisions Python 3.10, Node.js 22, pytest and the LearnPack Python plugin on its own.
+
+What you do need is prior Python: this is the fourth and last set in a series, and the welcome page points you to the three that come first.
+
+- [Python for beginners](https://github.com/4GeeksAcademy/python-beginner-programming-exercises) — variables, `print()`, conditionals.
+- [Practice functions](https://github.com/4GeeksAcademy/python-functions-programming-exercises) — parameters, return values, scope.
+- [Practice loops and lists](https://github.com/4GeeksAcademy/python-lists-loops-programming-exercises) — `for`, `while`, list handling.
+
+If you already know how to declare a function and loop over a list, you can start here directly. Exercise 001 is still a plain `print("Hello World")`, so the on-ramp is gentle.
+
+## ✅ How does the automatic grading work?
+
+Every graded exercise carries a `test.py` written with pytest. Each assertion is labelled with `@pytest.mark.it("...")`, and `pytest-testdox` prints those labels as readable sentences, so a failure tells you what was expected instead of dumping a traceback.
+
+The suites check two different things depending on the exercise:
+
+- **Returned values.** In `013-sum_of_digits` the tests assert that `digits_sum` is callable, that it returns something, that the return type is `int`, and finally that `digits_sum(854) == 17`.
+- **Printed output.** In `001-hello_world` the test captures stdout and compares it byte for byte against `"Hello World\n"`.
+
+Four exercises have no `test.py` and are free practice: `031-sum-eigth-digit`, `033-number-of-uppercase`, `035-square-each-odd-number` and `039-class-that-iterates`. That is 43 graded out of 47.
+
+> 💡 The grading is strict on purpose, and the repository maintainers say so themselves: treat a red test as a hint about the expected shape of your answer, not as a verdict on your logic.
-## One click installation (recommended):
+## 💡 What mistakes should you avoid?
-You can open these exercises in just a few seconds by clicking: [Open in Codespaces](https://codespaces.new/?repo=4GeeksAcademy/master-python-programming-exercises) (recommended) or [Open in Gitpod](https://gitpod.io#https://github.com/4GeeksAcademy/master-python-programming-exercises).
+- **Printing when the test wants a `return`.** Most suites call your function and inspect the value it hands back. `digits_sum(854)` has to *return* 17; printing 17 fails the type assertion.
+- **Trusting the wording over the test in exercises 019 and 030.** The instructions of `019-digital_clock` say the function should *print* two numbers, but its test asserts `digital_clock(194) == (3, 14)`. Same trap in `030-divisable-binary`: the instructions say *print* the numbers divisible by 5, while the test asserts `divisible_binary("0100,0011,1010,1001") == "1010"`. Return the value in both.
+- **Formatting exercise 041 line by line.** The instructions ask for one key per line, yet the test compares stdout against a single line: `"2:2 3.:1 3?:1 New:1 Python:5 Read:1 and:1 between:1 choosing:1 or:2 to:1\n"`. Note there is no space after the colon.
+- **Forgetting `import re` in exercise 037**, and forgetting that the password rules include *both* bounds: minimum 6 characters and maximum 12. The failure string must be exactly `"Invalid password. Please try again"`.
+- **Swapping rows and columns in exercise 026.** `two_dimensional_list(3, 5)` returns 3 rows of 5 items, not 5 rows of 3.
+- **Rounding to the wrong precision.** Exercise 021 keeps two decimals (`square_root(50)` gives `7.07`); exercise 040 rounds the robot distance to the nearest integer.
+- **Confusing static methods with class methods.** A `@staticmethod` (exercise 044) receives neither `self` nor `cls` and cannot read class state; a `@classmethod` (exercise 045) receives `cls` and is what lets `calculate_circle_area()` reach the class variable `pi`.
+- **Renaming the function.** The first assertion of most suites is `assert callable(app.)`, so a typo in the function name fails everything downstream.
-> Once you have VSCode open the LearnPack exercises should start automatically. If exercises don't run automatically you can try typing on your terminal: `$ learnpack start`
+## ❓ Frequently asked questions
-## Local Installation
+### How long does it take to finish these Python exercises?
-1. Make sure you have [LearnPack](https://learnpack.co) installed, node.js version 14+, and Python version 3+. This is the command to install LearnPack:
+The tutorial declares 10 hours. Spread over 47 coding exercises that averages about 13 minutes each, but the distribution is uneven: the numeric block (001–022) tends to go fast once you know `//` and `%`, while the regex, sorting and OOP exercises take noticeably longer.
+
+### Do I need to know Python before starting?
+
+Yes, some. This is the last set of a four-part series, and the welcome page assumes you have already covered variables, functions, loops and lists. You do not need an object-oriented background: the theory is taught from scratch in exercise 042, with a worked `Student` example before you are asked to write anything. Be warned, though, that two earlier exercises already expect a class with barely any explanation — `024-class-with-two-methods`, which is graded, and `039-class-that-iterates`.
+
+### Is this tutorial free, and can I reuse the content?
+
+Opening and solving it costs nothing. Reusing the content does not: [LICENSE.md](https://github.com/4GeeksAcademy/master-python-programming-exercises/blob/HEAD/LICENSE.md) reserves all intellectual property rights and explicitly forbids republishing, selling, sub-licensing, reproducing or redistributing the material. It is not an open source licence. The Python you write in your own `app.py` files is yours.
+
+### Do I have to install anything on my computer?
+
+No. Opening the repository in Codespaces gives you a ready dev container. A local setup is possible and documented below, and needs Python 3, Node.js and the LearnPack Python plugin.
+
+### Are there video solutions?
+
+No. `learn.json` sets `videoSolutions` to `false`. What you do get is a `solution.hide.py` file in each of the 47 coding folders, plus the hints at the bottom of most exercises (39 of the 48 folders carry a hints section), which link to outside references such as the snakify lessons on integer and float numbers.
+
+### Is practising algorithms like this still worth it?
+
+The exercises target the mechanics an interview or a code review still checks: reasoning about integer division instead of reaching for a string cast, picking the right container, sorting with several keys, and knowing why a method is bound to the class rather than to the instance. Those do not expire. What this set does not teach is error handling, file I/O or any third-party library.
+
+
+## 🚀 How to start
+
+The fastest path is one click: [open this tutorial in GitHub Codespaces](https://codespaces.new/?repo=4GeeksAcademy/master-python-programming-exercises). There is also a [Gitpod](https://gitpod.io#https://github.com/4GeeksAcademy/master-python-programming-exercises) alternative.
+
+Once VS Code is open, the LearnPack exercises should start on their own. If they do not, run this in the terminal:
```bash
-npm i @learnpack/learnpack@2.1.20 -g && learnpack plugins:install @learnpack/python@1.0.0
+learnpack start
```
-2. Clone or download this repository in your local environment.
+## 💻 Local installation
+
+1. Install LearnPack and the Python plugin, using the same versions the dev container provisions:
```bash
-$ git clone https://github.com/4GeeksAcademy/master-python-programming-exercises.git
-$ cd master-python-programming-exercises
+npm i @learnpack/learnpack@5.0.348 -g && learnpack plugins:install @learnpack/python@1.0.6
```
-> Note: Once you finish downloading, you will find an "exercises" folder that contains all the exercises within.
-
-3. Start the tutorial/exercises by running the following command at the same level your learn.json file is:
+2. Clone the repository and move into it:
```bash
-$ pip3 install pytest==6.2.5 pytest-testdox mock
-$ learnpack start
+git clone https://github.com/4GeeksAcademy/master-python-programming-exercises.git
+cd master-python-programming-exercises
```
-
+3. Install the Python test dependencies and start the tutorial from the same folder as `learn.json`:
-## How are the exercises organized?
+```bash
+pip3 install pytest==6.2.5 pytest-testdox mock
+learnpack start
+```
-Each exercise is a small Python application containing the following files:
+## 📚 How the exercises are organized
-1. **app.py:** represents the entry Python file that will be executed by the computer.
-2. **README.md:** contains exercise instructions.
-3. **test.py:** you don't have to open this file, it contains the testing script for the exercise.
+Each exercise is a folder inside `exercises/` and contains up to five files:
-> Note: The exercises have automatic grading, but it's very rigid and strict, my recommendation is to not take the tests too serious and use them only as a suggestion, or you may get frustrated.
+- `app.py` — the file you edit and the one the computer runs. Present in all 47 coding exercises.
+- `README.md` — the instructions, in English.
+- `README.es.md` — the same instructions in Spanish. Present in all 48 folders.
+- `test.py` — the pytest suite. You never open it. Present in 43 folders.
+- `solution.hide.py` — a reference solution. Present in all 47 coding exercises.
-## Contributors
+The folder `000-welcome` holds only the two READMEs: it is the intro page, not an exercise.
-Thanks goes to these wonderful people ([emoji key](https://github.com/kentcdodds/all-contributors#emoji-key)):
+Found a bug or a typo? Open an issue in [this repository](https://github.com/4GeeksAcademy/master-python-programming-exercises/issues) — the exercises were built collaboratively and reports are welcome.
-1. [Alejandro Sanchez (alesanchezr)](https://github.com/alesanchezr), contribution: (coder) 💻, (idea) 🤔, (build-tests) ⚠️, (pull-request-review) 👀, (build-tutorial) ✅, (documentation) 📖
+## 🤝 Contributors
-2. [Paolo (plucodev)](https://github.com/plucodev), contribution: (bug reports) 🐛, (coder) 💻, (translation) 🌎
+Thanks to these people ([emoji key](https://github.com/kentcdodds/all-contributors#emoji-key)):
-3. [Marco Gómez (marcogonzalo)](https://github.com/marcogonzalo), contribution: (bug reports) 🐛, (translation) 🌎
+- [Alejandro Sánchez (alesanchezr)](https://github.com/alesanchezr) — code 💻, idea 🤔, tests ⚠️, pull request review 👀, tutorial build ✅, documentation 📖
+- [Paolo (plucodev)](https://github.com/plucodev) — bug reports 🐛, code 💻, translation 🌎
+- [Marco Gómez (marcogonzalo)](https://github.com/marcogonzalo) — bug reports 🐛, translation 🌎
-This project follows the [all-contributors](https://github.com/kentcdodds/all-contributors) specification. Contributions of any kind are welcome!
+Plus [everyone in the contributors graph](https://github.com/4GeeksAcademy/master-python-programming-exercises/graphs/contributors). This project follows the [all-contributors](https://github.com/kentcdodds/all-contributors) specification, and contributions of any kind are welcome.
-This and many other exercises are built by students as part of the 4Geeks Academy [Coding Bootcamp](https://4geeksacademy.com/us/coding-bootcamp) by [Alejandro Sánchez](https://twitter.com/alesanchezr) and many other contributors. Find out more about our [Full Stack Developer Course](https://4geeksacademy.com/us/coding-bootcamps/part-time-full-stack-developer), and [Data Science Bootcamp](https://4geeksacademy.com/us/coding-bootcamps/datascience-machine-learning).
+This tutorial is one of many built by students and teachers at [4Geeks Academy](https://4geeks.com).
+