Python es uno de los lenguajes fundamentales en la formación en informática, matemáticas y ciencias de la computación. Su sintaxis clara y su amplio ecosistema lo convierten en una herramienta idónea tanto para iniciarse en la programación como para abordar problemas algorítmicos avanzados.
En el ámbito académico, Python no solo se utiliza para aprender a programar, sino también como vehículo para estudiar estructuras de datos, técnicas algorítmicas y aplicaciones matemáticas. En este contexto se sitúa esta obra, que propone un recorrido sistemático mediante ejercicios cuidadosamente estructurados.
Introducción al libro
Ejercicios de programación con Python es una colección organizada de relaciones de ejercicios orientadas al aprendizaje progresivo del lenguaje y de los fundamentos de la algoritmia. La obra está basada en materiales previamente utilizados en cursos universitarios de informática en el Grado en Matemáticas de la Universidad de Sevilla.
El libro está dirigido a:
- Estudiantes universitarios de informática, matemáticas o disciplinas afines.
- Personas en formación autodidacta que deseen consolidar fundamentos de programación.
- Desarrolladores que quieran reforzar conceptos formales y algorítmicos.
El nivel requerido es introductorio en sus primeros capítulos, pero avanza hacia contenidos intermedios y estructurales, especialmente en las secciones dedicadas a tipos abstractos de datos, grafos, búsqueda en espacios de estados y programación dinámica.
La obra combina definición formal, implementación en Python y resolución de problemas clásicos de la informática y las matemáticas.
Contenido del libro
El libro se divide en tres grandes bloques temáticos.
En la primera parte se introducen los fundamentos de programación en Python, incluyendo definiciones de funciones por composición, comprensión y recursión, funciones de orden superior y tipos de datos algebraicos.
La segunda parte está dedicada a la algoritmia. Se desarrollan e implementan tipos abstractos de datos como pilas, colas, conjuntos, grafos y polinomios. También se abordan técnicas algorítmicas clásicas como divide y vencerás, búsquedas en espacios de estados y programación dinámica, incluyendo problemas como las n reinas, la mochila, el 8-puzzle o el cálculo de distancias de edición.
La tercera parte presenta aplicaciones a problemas matemáticos, incluyendo cálculo numérico, teoría de números y diversas construcciones combinatorias.
El enfoque es eminentemente práctico: cada sección propone ejercicios con implementación directa en Python, apoyándose en módulos estándar como math, tipado estático mediante typing y herramientas de prueba como hypothesis.
Índice del libro
I. Introducción a la programación con Python
- Definiciones elementales de funciones
1.1 Definiciones por composición sobre números, listas y booleanos
1.2 Definiciones con condicionales, guardas o patrones - Definiciones por comprensión
2.1 Definiciones por comprensión - Definiciones por recursión
3.1 Definiciones por recursión
3.2 Operaciones conjuntistas con listas
3.3 El algoritmo de Luhn
3.4 Números de Lychrel
3.5 Funciones sobre cadenas - Funciones de orden superior
4.1 Funciones de orden superior y definiciones por plegado - Tipos definidos y de datos algebraicos
5.1 Tipos de datos algebraicos: Árboles binarios
5.2 Tipos de datos algebraicos: Árboles
5.3 Tipos de datos algebraicos: Expresiones
II. Algorítmica
- El tipo abstracto de datos de las pilas
6.1 El TAD de las pilas
6.2 Implementación mediante listas
6.3 Implementación mediante deque
6.4 Ejercicios con pilas - El tipo abstracto de datos de las colas
7.1 El TAD de las colas
7.2 Implementación mediante listas
7.3 Implementación mediante dos listas
7.4 Implementación mediante deque
7.5 Ejercicios con colas - El tipo abstracto de datos de las colas de prioridad
8.1 El TAD de las colas de prioridad
8.2 Implementación mediante listas - El tipo abstracto de datos de los conjuntos
9.1 El TAD de los conjuntos
9.2 Implementación mediante listas no ordenadas con duplicados
9.3 Implementación mediante listas no ordenadas sin duplicados
9.4 Implementación mediante listas ordenadas sin duplicados
9.5 Implementación mediante librería
9.6 Operaciones con conjuntos - Relaciones binarias homogéneas
- El tipo abstracto de datos de los polinomios
11.1 El TAD de los polinomios
11.2 Implementación mediante listas densas
11.3 Implementación mediante listas dispersas
11.4 Operaciones con polinomios
11.5 División y factorización mediante la regla de Ruffini - El tipo abstracto de datos de los grafos
12.1 El TAD de los grafos
12.2 Implementación mediante listas
12.3 Problemas básicos
12.4 Algoritmos sobre grafos
12.5 Ejercicios sobre grafos - Procedimiento de divide y vencerás
13.1 Algoritmo divide y vencerás
13.2 Rompecabezas del triominó - Problemas con búsquedas en espacio de estados
14.1 Búsqueda por profundidad
14.2 Problema de las n reinas (profundidad)
14.3 Búsqueda por anchura
14.4 Problema de las n reinas (anchura)
14.5 Problema de la mochila
14.6 Búsqueda por primero el mejor
14.7 Problema del 8-puzzle
14.8 Búsqueda en escalada
14.9 Algoritmo de Prim
14.10 Problema del granjero
14.11 Problema de las fichas
14.12 Problema del calendario
14.13 Problema del dominó
14.14 Problema de suma cero
14.15 Problema de las jarras - Programación dinámica
15.1 Fibonacci por programación dinámica
15.2 Coeficientes binomiales
15.3 Longitud de la subsecuencia común máxima
15.4 Subsecuencia común máxima
15.5 Distancia de Levenshtein
15.6 Caminos en una retícula
15.7 Caminos en una matriz
15.8 Máxima suma de caminos en una matriz
15.9 Camino de máxima suma en una matriz
III. Aplicaciones a las matemáticas
- Cálculo numérico
16.1 Diferenciación y métodos de Herón y Newton
16.2 Límites, bisección e integrales - Miscelánea
17.1 Números de Pentanacci
17.2 Teorema de Navidad de Fermat
17.3 Números primos de Hilbert
17.4 Factorizaciones de números de Hilbert
17.5 Sumas de dos cuadrados
17.6 Serie de Thue-Morse
17.7 Sucesión de Thue-Morse
17.8 Huecos maximales entre primos
17.9 Función indicatriz de Euler
17.10 Ceros finales del factorial
17.11 Primos cubanos
17.12 Cuadrado más cercano
17.13 Suma de cadenas
17.14 Sistema factorádico de numeración
17.15 Duplicación de cada elemento
17.16 Suma de fila del triángulo de los impares
17.17 Reiteración de suma de consecutivos
17.18 Producto de la diagonal principal
17.19 Reconocimiento de potencias de 4
17.20 Exponente en la factorización
17.21 Mayor órbita de la sucesión de Collatz
17.22 Máximos locales
Datos del libro
- Título: Ejercicios de programación con Python
- Autor: José A. Alonso Jiménez
- Categoría principal: Programación
- Subcategoría: Python
- Idioma: Español
- Licencia: Creative Commons Reconocimiento–NoComercial–CompartirIgual 2.5 España (CC BY-NC-SA 2.5 ES)
Más libros en: Programación, Python
Aviso legal: Este libro se comparte únicamente con fines educativos. El contenido se distribuye bajo licencias Creative Commons o permisos explícitos de sus autores. OpenLibro no aloja material con derechos reservados.