Algoritmos y programación I con lenguaje Python - UTIC [PDF] [DU]

Jun 17, 2015
801
694
4,093
upload_2018-12-18_11-33-45.gif
DESCRIPCIÓN


Contenido:

1. Conceptos básicos 7
1.1. Computadoras y programas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2. El mito de la máquina todopoderosa . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3. Cómo darle instrucciones a la máquina usando Python . . . . . . . . . . . . . . . 9
1.4. Devolver un resultado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.5. Una instrucción un poco más compleja: el ciclo definido . . . . . . . . . . . . . . . 13
1.5.1. Ayuda desde el intérprete . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.6. Construir programas y módulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.7. La forma de un programa Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.8. Estado y computación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.9. Depuración de programas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.10. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2. Programas sencillos 21
2.1. Construcción de programas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.2. Realizando un programa sencillo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.3. Piezas de un programa Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.3.1. Nombres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.3.2. Expresiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.4. No sólo de números viven los programas . . . . . . . . . . . . . . . . . . . . . . . 26
2.5. Instrucciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.6. Ciclos definidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.7. Una guía para el diseño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.8. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3. Funciones 30
3.1. Documentación de funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.2. Imprimir versus Devolver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.3. Cómo usar una función en un programa . . . . . . . . . . . . . . . . . . . . . . . . 32
3.4. Más sobre los resultados de las funciones . . . . . . . . . . . . . . . . . . . . . . . 34
3.5. Un ejemplo completo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.6. Devolver múltiples resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.7. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4. Decisiones 41
4.1. Expresiones booleanas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.1.1. Expresiones de comparación . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.1.2. Operadores lógicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42


4.2. Comparaciones simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.3. Múltiples decisiones consecutivas . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.4. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
4.5. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5. Más sobre ciclos 50
5.1. Ciclos indefinidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.2. Ciclo interactivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.3. Ciclo con centinela . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.4. Cómo romper un ciclo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
5.5. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
5.6. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
6. Cadenas de caracteres 58
6.1. Operaciones con cadenas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
6.1.1. Obtener el largo de una cadena . . . . . . . . . . . . . . . . . . . . . . . . . 58
6.1.2. Recorrer una cadena . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
6.1.3. Acceder a una posición de la cadena . . . . . . . . . . . . . . . . . . . . . . 59
6.2. Segmentos de cadenas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
6.3. Las cadenas son inmutables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
6.4. Procesamiento sencillo de cadenas . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
6.5. Nuestro primer juego . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
6.6. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
6.7. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
7. Tuplas y listas 72
7.1. Tuplas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
7.1.1. Elementos y segmentos de tuplas . . . . . . . . . . . . . . . . . . . . . . . . 72
7.1.2. Las tuplas son inmutables . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
7.1.3. Longitud de tuplas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
7.1.4. Empaquetado y desempaquetado de tuplas . . . . . . . . . . . . . . . . . . 74
7.1.5. Ejercicios con tuplas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
7.2. Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
7.2.1. Longitud de la lista. Elementos y segmentos de listas . . . . . . . . . . . . 76
7.2.2. Cómo mutar listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
7.2.3. Cómo buscar dentro de las listas . . . . . . . . . . . . . . . . . . . . . . . . 77
7.3. Ordenar listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
7.4. Listas y cadenas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
7.4.1. Ejercicios con listas y cadenas . . . . . . . . . . . . . . . . . . . . . . . . . . 84
7.5. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
8. Algoritmos de búsqueda 87
8.1. El problema de la búsqueda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
8.2. Cómo programar la búsqueda lineal a mano . . . . . . . . . . . . . . . . . . . . . 88
8.3. Búsqueda lineal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
8.4. Buscar sobre una lista ordenada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
8.5. Búsqueda binaria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
8.6. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

9. Diccionarios 95
9.1. Qué es un diccionario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
9.2. Utilizando diccionarios en Python . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
9.3. Algunos usos de diccionarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
9.4. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
10. Contratos y Mutabilidad 99
10.1. Pre y Postcondiciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
10.1.1. Precondiciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
10.1.2. Postcondiciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
10.1.3. Aseveraciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
10.1.4. Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
10.2. Invariantes de ciclo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
10.2.1. Comprobación de invariantes desde el código . . . . . . . . . . . . . . . . 102
10.3. Mutabilidad e Inmutabilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
10.3.1. Parámetros mutables e inmutables . . . . . . . . . . . . . . . . . . . . . . . 103
10.4. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
10.5. Apéndice - Acertijo MU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
11. Manejo de archivos 107
11.1. Cerrar un archivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
11.2. Ejemplo de procesamiento de archivos . . . . . . . . . . . . . . . . . . . . . . . . . 108
11.3. Modo de apertura de los archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
11.4. Escribir en un archivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
11.5. Agregar información a un archivo . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
11.6. Manipular un archivo en forma binaria . . . . . . . . . . . . . . . . . . . . . . . . 112
11.7. Persistencia de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
11.7.1. Persistencia en archivos CSV . . . . . . . . . . . . . . . . . . . . . . . . . . 115
11.7.2. Persistencia en archivos binarios . . . . . . . . . . . . . . . . . . . . . . . . 117
11.8. Directorios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
11.9. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
11.10.Apéndice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
12. Manejo de errores y excepciones 124
12.1. Errores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
12.2. Excepciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
12.2.1. Manejo de excepciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
12.2.2. Procesamiento y propagación de excepciones . . . . . . . . . . . . . . . . . 127
12.2.3. Acceso a información de contexto . . . . . . . . . . . . . . . . . . . . . . . 128
12.3. Validaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
12.3.1. Comprobaciones por contenido . . . . . . . . . . . . . . . . . . . . . . . . . 129
12.3.2. Entrada del usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
12.3.3. Comprobaciones por tipo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
12.3.4. Comprobaciones por características . . . . . . . . . . . . . . . . . . . . . . 132
12.4. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
12.5. Apéndice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
CONTENIDOS 5
13. Procesamiento de archivos 135
13.1. Corte de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
13.2. Apareo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
13.3. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
14. Objetos 139
14.1. Tipos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
14.2. Qué es un objeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
14.3. Definiendo nuevos tipos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
14.3.1. Nuestra primera clase: Punto . . . . . . . . . . . . . . . . . . . . . . . . . . 141
14.3.2. Agregando validaciones al constructor . . . . . . . . . . . . . . . . . . . . 142
14.3.3. Agregando operaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
14.4. Métodos especiales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
14.4.1. Un método para mostrar objetos . . . . . . . . . . . . . . . . . . . . . . . . 145
14.4.2. Métodos para operar matemáticamente . . . . . . . . . . . . . . . . . . . . 145
14.5. Creando clases más complejas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
14.5.1. Métodos para comparar objetos . . . . . . . . . . . . . . . . . . . . . . . . . 148
14.5.2. Ordenar de menor a mayor listas de hoteles . . . . . . . . . . . . . . . . . 149
14.5.3. Otras formas de comparación . . . . . . . . . . . . . . . . . . . . . . . . . . 150
14.5.4. Comparación sólo por igualdad o desigualdad . . . . . . . . . . . . . . . . 151
14.6. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
14.7. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
15. Polimorfismo, Herencia y Delegación 154
15.1. Polimorfismo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
15.1.1. Interfaz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
15.1.2. Redefinición de métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
15.1.3. Un ejemplo de polimorfismo . . . . . . . . . . . . . . . . . . . . . . . . . . 155
15.2. Herencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
15.3. Delegación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
15.4. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
16. Listas enlazadas 163
16.1. Una clase sencilla de vagones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
16.1.1. Caminos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
16.1.2. Referenciando el principio de la lista . . . . . . . . . . . . . . . . . . . . . . 165
16.2. Tipos abstractos de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
16.3. La clase ListaEnlazada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
16.3.1. Construcción de la lista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
16.3.2. Eliminar un elemento de una posición . . . . . . . . . . . . . . . . . . . . . 168
16.3.3. Eliminar un elemento por su valor . . . . . . . . . . . . . . . . . . . . . . . 169
16.3.4. Insertar nodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
16.4. Invariantes de objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
16.5. Otras listas enlazadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
16.6. Iteradores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
16.7. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178

17. Pilas y colas 179
17.1. Pilas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
17.1.1. Pilas representadas por listas . . . . . . . . . . . . . . . . . . . . . . . . . . 179
17.1.2. Uso de pila: calculadora científica . . . . . . . . . . . . . . . . . . . . . . . 181
17.1.3. ¿Cuánto cuestan los métodos? . . . . . . . . . . . . . . . . . . . . . . . . . 186
17.2. Colas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
17.2.1. Colas implementadas sobre listas . . . . . . . . . . . . . . . . . . . . . . . . 186
17.2.2. Colas y listas enlazadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
17.3. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
17.4. Apéndice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
18. Modelo de ejecución de funciones y recursividad 194
18.1. La pila de ejecución de las funciones . . . . . . . . . . . . . . . . . . . . . . . . . . 194
18.2. Pasaje de parámetros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
18.3. Devolución de resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
18.4. La recursión y cómo puede ser que funcione . . . . . . . . . . . . . . . . . . . . . 199
18.5. Una función recursiva matemática . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
18.6. Algoritmos recursivos y algoritmos iterativos . . . . . . . . . . . . . . . . . . . . . 202
18.7. Un ejemplo de recursividad elegante . . . . . . . . . . . . . . . . . . . . . . . . . . 203
18.8. Un ejemplo de recursividad poco eficiente . . . . . . . . . . . . . . . . . . . . . . . 205
18.9. Limitaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
18.10.Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
19. Ordenar listas 208
19.1. Ordenamiento por selección . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
19.1.1. Invariante en el ordenamiento por selección . . . . . . . . . . . . . . . . . 209
19.1.2. ¿Cuánto cuesta ordenar por selección? . . . . . . . . . . . . . . . . . . . . . 211
19.2. Ordenamiento por inserción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
19.2.1. Invariante del ordenamiento por inserción . . . . . . . . . . . . . . . . . . 214
19.2.2. ¿Cuánto cuesta ordenar por inserción? . . . . . . . . . . . . . . . . . . . . . 214
19.2.3. Inserción en una lista ordenada . . . . . . . . . . . . . . . . . . . . . . . . . 214
19.3. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
20. Algunos ordenamientos recursivos 216
20.1. Ordenamiento por mezcla, o Merge sort . . . . . . . . . . . . . . . . . . . . . . . . 216
20.2. ¿Cuánto cuesta el Merge sort? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
20.3. Ordenamiento rápido o Quick sort . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
20.4. ¿Cuánto cuesta el Quick sort? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
20.5. Una versión mejorada de Quick sort . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
20.6. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
A. Licencia y Copyright 224


DATOS TÉCNICOS
PESO: 2,1 MB
EXTENSIÓN: PDF
HOST: DoUploads
IDIOMA: ESPAÑOL


descargar.gif


Enlace de descarga:
https://bit.ly/2S6DdCz

Si el enlace no funciona o el material ha sido eliminado, envíame un mensaje privado a mi perfil y con gusto lo solucionaré.