293
8/10/2019 Manual De Programacion Python http://slidepdf.com/reader/full/manual-de-programacion-python 1/293  "#$%&'( )%*&+,-+ .-',/0$1,$( 2&' 3,/-+(' .4/5-1 .+-6+(7($,81 9&:/- 2,6,/(' ;&+#,81 <=> ? @A<B 3%,# C-2+D6%&E FG&2( 

Manual De Programacion Python

Embed Size (px)

Citation preview

Page 1: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 1/293

 

"#$%&'( )%*&+,-+ .-',/0$1,$( 2&' 3,/-+('

.4/5-1

.+-6+(7($,81

9&:/- 2,6,/('

;&+#,81 <=> ? @A<B

3%,# C-2+D6%&E FG&2( 

Page 2: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 2/293

2

Python Programación

Prefacio

Este documento es una contribución bibliográfica para los estudiantes que toman un

primer curso de Programación de Computadoras a nivel universitario. El estudio delmaterial incluido en los primeros doce capítulos no tiene pre-requistos, solamente elinterés en conocer un lenguaje actual que posteriormente pueda ser usado como elsoporte para resolver computacionalmente problemas de diferente nivel de complejidad eningeniería, matemáticas y otras áreas.

El enfoque didáctico utilizado en este documento es el aprendizaje mediante ejemplos ydesarrollo de ejercicios propuestos. El material incluye muchos ejemplos para describir losconceptos algorítmicos en forma práctica y su traducción al lenguaje computacionalPython.

Python es un interpretador de instrucciones muy eficiente y de acceso libre y públicodisponible para su instalación desde la red internet. El lenguaje Python es fácil de aprendery aplicar, versátil y muy conveniente para iniciar el aprendizaje de lenguajes deprogramación de manera progresiva y creativa usando diferentes metodologías deprogramación.

El soporte de este documento es la experiencia desarrollada por el autor impartiendocursos de enseñanza de lenguajes de programación para estudiantes de ingeniería y elhaber desarrollado otros documentos digitales de apoyo bibliográfico.

Este documento es de uso público y distribución libre y se adhiere a la corriente dedesarrollar textos digitales que puedan ser actualizados y mejorados continuamente ydisponibles para su uso en línea, reduciendo el consumo de papel y tinta, contribuyendoasí con el cuidado del medio ambiente.

El documento ha sido compilado en un formato que facilita el uso de la información. Sepuede controlar el tamaño del texto en pantalla, agregar un índice electrónico para facilitarbúsqueda de temas, resaltar digitalmente texto, insertar comentarios, notas, enlaces,revisiones, etc. y que no sería posible en un texto impreso.

Escuela Superior Politécnica del LitoralLuis Rodríguez Ojeda, M.Sc.

Profesor2014

[email protected] 

ESPOL – Python Programación

Page 3: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 3/293

3

Organización del material

El capítulo 1  establece un modelo general para la resolución de problemas con el

computador. Los usuarios pudieran darle unos pocos minutos a su lectura.

Los capítulos 2 y 3 son opcionales. Pueden ser de interés para los usuarios que quieran

entender los conceptos abstractos de algoritmos y la construcción de algoritmos

computacionales independientemente de un lenguaje de programación específico.

El capítulo 4  tiene información general acerca de lenguajes de programación y

metodologías de programación. Su lectura tomará pocos minutos

Los capítulos 5, 6, 7, 8, y 9 contienen el material para conocer y practicar el lenguaje de

programación Python. Su estudio cubriría el tiempo de un semestre académico para

estudiantes de carreras de ingeniería.

Los capítulos 10, 11  y 12 son una introducción a temas que normalmente son de interés

para estudiantes que siguen una carrera orientada a áreas computacionales.

Los capítulos 13  y 14  pueden ser de interés para usuarios que tienen un nivel de

conocimientos matemáticos más avanzados y requieren resolver problemas matemáticosde este tipo con el soporte de librerías especializadas de Python.

ESPOL – Python Programación

Page 4: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 4/293

4

Contenido

1 Introducción 9

1.1 Objetivo y requisitos 9

1.2 Metodología 9

1.3 Un modelo para resolver problemas con el computador 9

2 Algoritmos 11

2.1 Estructura de un algoritmo 11

2.2 Lenguajes para escribir algoritmos 12

2.3 Definiciones 12

2.4 Introducción a la construcción de algoritmos 12

2.5 Ejercicios de creación de algoritmos 15

3. Construcción de algoritmos computacionales 183.1 Instrucciones u operaciones elementales 18

3.1.1 Algunas instrucciones típicas de asignación en 23

notación algorítmica 

3.1.2 Ejercicios con la notación algorítmica: Algoritmos 24

secuenciales

3.2 Estructuras de control de flujo de un algoritmo 25

3.2.1 Decisones 25

3.2.2 Ejercicios con la notación algorítmica: Algoritmos 30con decisiones

3.2.3 Ciclos 31

3.2.4 Ejercicios con la notación algorítmica: Algoritmos 37

con ciclos

4. Lenguajes de Programación de Computadoras 38

4.1 Metodologías de programación 39

4.2 Factores para elegir un lenguaje de programación 39

4.3 Lenguajes compilados y lenguajes interpretados 405. El lenguaje Python 41

5.1 Origen del lenguaje Python 41

5.2 Caracteristicas del lenguaje computacional Python 42

5.3 Carga e instalación 44

5.4 Extensiones al lenguaje 46 

5.5 Desarrollo de programas 47

5.6 Algunos elementos básicos para escribir programas 47

5.6.1 Tipos de datos básicos 47

5.6.2 Variables o identificadores 48

ESPOL – Python Programación

Page 5: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 5/293

5

5.6.3 Operadores 48

5.6.4 Conversión entre tipos de datos 51

5.6.5 Uso de módulos especiales 52

5.6.6 El sistema de ayuda 53

5.6.7 Documentación en linea 535.6.8 Depuración de programas 53

5.6.9 Funciones del módulo math 55

5.6.10 Traducción de expresiones 56

5.6.11 Ejercicios de traducción de expresiones 56

5.6.12 Un ejemplo introductorio 57

5.6.13 Práctica computacional en la ventana interactiva 58

5.6.14 Ejercicios de resolución de problemas en la ventana 59

interactiva5.7 Instrucciones básicas para programar con Python 60

5.7.1 Instrucción de asignación 60

5.7.2 Asignaciones especiales 60

5.7.3 Instrucción para ingreso de datos 62

5.7.4 Instrucción para salida de resultados 63

5.7.5 Documentación de los programas 64

5.7.6 Encolumnamiento de instrucciones 64

5.7.7 El primer programa 65

5.7.8 Ejercicios de programación con las instrucciones 68

básicas

5.7.9 Operadores para aritmética entera 69

5.7.10 Ejercicios de programación con los operadores para 70

aritmética entera

5.8 Decisiones en Python 71

5.8.1 Ejecución condicionada de un bloque de instrucciones 71

5.8.2 Ejecución selectiva entre dos bloques de instrucciones 74

5.8.3 Decisiones anidadas 76

5.8.4 Decisiones consecutivas 79

5.8.5 Ejercicios de programación con decisiones 82

5.9 Números aleatorios 86

5.10 Ciclos en Python 88

5.10.1 Ejecución repetida de un bloque mediante 88

una condición

5.10.2 Ejecución repetida de un bloque mediante 94

una secuencia

ESPOL – Python Programación

Page 6: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 6/293

6

5.10.3 Ciclos anidados 109

5.10.4 La instrucción break 118

5.10.5 La instrucción continue 121

5.10.6 La instrucción exit 122

5.10.7 La instrucción pass 1225.10.8 El objeto None 122

5.11 Introducción a validación de datos 123

5.11.1 Control de excepciones 124

5.12 Ejercicios de programación con ciclos 128

5.13 Programas que interactúan con un menú 133

5.13.1 Ejercicios de programación con menú 137

6 Creación de funciones 138

6.1 Declaración de una función 1386.2 Parámetros empaquetados 142

6.3 Parámetros por omisión 142

6.4 Espacio de las variables de programas y funciones 145

6.5 Declaración de variables globales 146

6.6 Funciones sin parámetros 147

6.7 Expresiones lambda 147

6.8 Funciones recursivas 148

6.9 Funciones generadoras 151

6.10 Ejercicios con funciones 156

7 Tipos de datos estructurados 158

7.1 Listas 158

7.2 Tuplas 163

7.3  Cadenas de caracteres (strings) 165

7.4 Diccionarios 166

7.5 Conjuntos 168

7.6 Programación de iteraciones con tipos de datos estructurados 170

7.7 Operaciones con listas 172

7.7.1 Métodos, operadores y funciones para manejo 172

de listas

7.7.2 Construcción declarativa de listas numéricas 176

7.7.3  Algunas funciones de la librería estándar para listas 178

numéricas

7.7.4 Algunas funciones de la librería NumPy para listas 179

Numéricas

7.7.5 Resolución de problemas con listas y vectores 180

ESPOL – Python Programación

Page 7: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 7/293

7

7.7.6 Ejercicios con listas y vectores 192

7.8 Operaciones con cadenas de caracteres 196

7.8.1 Cadenas de caracteres constantes 196

7.8.2 Métodos, operadores y funciones para cadenas de 197

caracteres7.8.3 Resolución de problemas con cadenas de 200

caracteres

7.8.4 Ejercicios con cadenas de caracteres 205

7.9 Operaciones con matrices 207

7.9.1 Construcción declarativa de listas numéricas 208

(matrices)

7.9.2 Algunas funciones de la librería NumPy para matrices 209

7.9.3 Operaciones matemáticas de NumPy con matrices 2117.9.4 Algunas funciones especiales de NumPy con matrices 211

7.9.5 Resolución de problemas con matrices 215

7.9.6 Ejercicios con matrices 221

8 Registros y archivos 226

8.1 Definición de registros 226

8.2 Desarrollo de una aplicación con registros en memoria 227

8.3 Funciones y métodos para manejo de archivos secuenciales 231

en disco

8.4 Conversión de registros a líneas de texto para almacenar 232

en archivos secuenciales en el disco

8.5 Desarrollo de una aplicación con registros y archivos 233

secuenciales en el disco

8.6 Ejercicios con registros y archivos 237

9 Programación modular 239

9.1 Desarrollo de una aplicación de manejo de registros 239

en memoria

9.2 Desarrollo de una aplicación con acceso directo a registros 242

almacenados en disco

9.3 Ejercicios de desarrollo de programas de aplicación 252

10 Programación Orientada a Objetos 254

10.1 Diseño de clases para representar estructuras de datos 256

especiales

10.1.1 Estructura de datos Pila 256

10.1.2 Estructura de datos Cola 261

10.2 Ejercicios de Programación Orientada a Objetos 265

ESPOL – Python Programación

Page 8: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 8/293

8

11 Diseño de Interfaz de Usuario 266

11.1 Diseño de interfaz de usuario con Programación Orientada 267

a Objetos

12 Eficiencia de algoritmos y programas 271

12.1 La notación O( ) 27313 Librerías especializadas 275

13.1 Librerías gráficas: Pylab, Matplotlib 275

13.1.1 Gráficos en el plano 275

13.1.2 Gráficos en coordenadas polares 276

13.1.3 Gráficos de ecuaciones implícitas 277

13.1.4 Graficación de histogramas 277

13.1.5 Gráficos 3D 278

13.2 Librería para manejo matemático simbólico: SymPy 27913.2.1 Declaración de variables smbólicas 279

13.2.2 Operaciones algebraicas 279

13.2.3 Evaluación de expresiones 279

13.2.4 Operaciones del cálculo 280

13.2.5 Resolución de ecuaciones 281

13.2.6 Salida formateada de expresiones 282

13.2.7 Gráficos en el plano con SymPy 282

13.2.7 Gráficos 3D con SymPy 282

14 Métodos Numéricos 283

14.1 Resolución de problemas en la ventana interactiva 283

14.2 Librería de métodos numéricos 285

14.3 Aplicación de los métodos numericos de la librería Métodos 288

14.4 Librerías de Python para resolver numéricamente ecuaciones 291

diferenciales

14.5 Problemas de aplicación de los métodos numéricos 292

15 Bibliografía 293

ESPOL – Python Programación

Page 9: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 9/293

9

Python Programación

1 Introducción

1.1 Objetivo y requisitosEsta obra es una contribución para el desarrollo de una metodología computacional pararesolver problemas basada en los principios de la construcción de algoritmos.

El soporte computacional es el lenguaje Python con el que se explora y se adquiere la práctica yel conocimiento suficiente para la programación de computadoras aplicada a la resolución deproblemas matemáticos, de ingeniería y otras ciencias. Se supondrá que los interesados tienenalgun conocimiento básico de la lógica matemática.

1.2 Metodología

Mediante explicaciones basadas en ejemplos el usuario puede adquirir en forma progresiva losconocimientos necesarios para resolver problemas y su programación en Python. El desarrollode variados ejercicios proporcionará la base para extenderlos y aplicarlos a la resolución deproblemas más complejos. Al mismo tiempo, el usuario podrá desarrollar su propio estilo deprogramación.

1.3 Un modelo para resolver problemas con el computador

El análisis y diseño de soluciones computacionales es una ciencia que facilita el usoeficiente del poder de las computadoras para resolver problemas.

Para facilitar el desarrollo de estas soluciones, es adecuado usar un lenguajecomputacional simple, general y eficiente como el que ofrece Python.

El siguiente gráfico describe los pasos en la solución computacional de un problema

Problema Análisis Diseño Instrumentación Resultados

Revisión

Primero, es necesario asegurarnos que el problema que intentamos resolver está ennuestro ámbito de conocimiento. No es recomendable intentar resolver problemas si notenemos el conocimiento y la práctica para enfrentar su solución.

En la etapa de Análisis se estudia el problema en forma detallada: sus características, lasvariables y los procesos que intervienen. Asimismo, se deben definir los datos que serequieren y cual es el objetivo esperado. El resultado de esta etapa son las

especificaciones  detalladas de los requerimientos que en algunos casos se puedenexpresar en forma matemática.

ESPOL – Python Programación

Page 10: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 10/293

10

En la etapa de Diseño se procede a elaborar los procedimientos necesarios para cumplircon los requerimientos especificados en el análisis, incluyendo fórmulas, tablas, etc. Elobjeto resultante se denomina algoritmo.

En la etapa de Instrumentación, si el problema es simple, se puede obtener la solución

interactuando directamente mediante instrumentos disponibles en el entornocomputacional. Si el problema es más complejo, deben construirse programas y definir elingreso y la organización de los datos necesarios.

 Al concluir la etapa de la instrumentación, se usan datos para realizar pruebas de losprogramas. Es necesario que se realice una revisión en cada etapa de este proceso y quese validen los resultados obtenidos antes de aceptarlos y continuar.

Posteriormente se efectúa la instalación y operación. Debe preverse la necesidad demantenimiento y cambios en los programas para ajustarlos al entorno en el que se usarán.

Este proceso necesita ser planificado y sistematizado para que su desarrollo sea eficientesiendo imprescindible seguir normas, utilizar metodologías de programación y manteneruna documentación adecuada.

Los instrumentos computacionales modernos tales como Python disponen de facilidadespara probar interactivamente instrucciones y programas a medida que son desarrollados,mejorando así la productividad. También ofrece librerías que facilitan el desarrollo de losproyectos de programación.

ESPOL – Python Programación

Page 11: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 11/293

11

2 Algoritmos

Un algoritmo es una descripción ordenada de las instrucciones que deben realizarse pararesolver un problema en un tiempo finito.

Para crear un algoritmo es necesario conocer en forma detallada el problema, lasvariables, los datos que se necesitan, los procesos involucrados, las restricciones, y losresultados esperados o por lo menos los criterios para considerarlos correctos.

La descripción del algoritmo debe orientarse a la instrumentación computacional, perocuando los problemas son simples, puede omitirse la elaboración detallada del algoritmo eir directamente a la codificación en el lenguaje computacional siempre que este ofrezcauna sintaxis fácil de usar y entender.

Es muy importante desarrollar el pensamiento algorítmico progresivamente con la ayudade ejemplos y con la práctica. El objetivo final es estructurar una metodología para facilitar

la resolución de problemas, investigando sus componentes y cumpliendo losrequerimientos.

2.1 Estructura de un algoritmo

Un algoritmo es un objeto que debe comunicarse con el entorno. Por lo tanto debe incluirfacilidades para el ingreso de datos y la salida de resultados.

Dentro de un algoritmo se describe el procedimiento, mediante instrucciones, que realizarála transformación de los datos y producirá los resultados esperados.

Algoritmo

Entrada Instrucciones Salida

ESPOL – Python Programación

Page 12: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 12/293

12

2.2 Lenguajes para escribir algoritmos

Para escribir algoritmos se pueden usar diferentes notaciones: lenguaje natural, lenguajesgráficos, lenguajes simbólicos, etc.

Para que una notación sea útil debe poseer algunas características que permitan produciralgoritmos fáciles de construir, entender y aplicar:

1) Las instrucciones deben ser simples para facilitar su uso.2) Las instrucciones deben ser claras y precisas para evitar ambigüedades.3) Debe incluir suficientes instrucciones para describir la solución de problemas.4) Preferentemente, las instrucciones deben tener orientación computacional.

Los algoritmos deben ser reproducibles, es decir que al ejecutarse deben entregar losmismos resultados si se utilizan los mismos datos.

2.3 Definiciones

a) Proceso

Conjunto de acciones realizadas al ejecutar las instrucciones descritas en un algoritmo.

b) Estado

Situación de un proceso en cada etapa de su realización, desde su inicio hasta sufinalización. En cada etapa, las variables pueden modificarse.

c) Variables

Símbolos con los que se representan los valores que se producen en el proceso.

Componentes de una variable:

Nombre: Identificación de cada variableTipo:  Conjunto de valores o dominio asociado a la variableContenido:  Valor asignado a una variableCelda:  Dispositivo que almacena el valor asignado a una variable

2.4 Introducción a la construcción de algoritmos

El desarrollo de algoritmos constituye una metodología para resolver problemas en formaorganizada.

Primero debe definirse el objetivo al que se desea llegar, luego deben identificarse loscomponentes o variables y escribir las instrucciones necesarias para poder realizar loscambios que permitirán llegar al objetivo propuesto. Para validar el algoritmo deberealizarse alguna prueba con la cual se puede verificar que el resultado es correcto.

 A continuación se propone un problema y se describe un procedimiento algorítmico parallegar a la solución.

ESPOL – Python Programación

Page 13: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 13/293

13

Ejemplo. En el gráfico siguiente se muestra un recipiente grande con algún refresco y sepropone el problema de obtener exactamente 4 cc. usando solamente los instrumentosmostrados los cuales tienen indicada su capacidad. Se supondrá que el recipiente grandecontiene suficiente cantidad de refresco. Es posible trasladar el contenido entre recipientespero no se dispone de ningún dispositivo adicional para medición.

Describa un algoritmo para llegar a la solución.

Objetivo propuesto: Que el recipiente de 5 cc. contenga 4 cc. del refresco

VariablesSean A: Representación del recipiente cuya capacidad es 5 cc. 

B: Representación del recipiente cuya capacidad es 3 cc. C: Representación del recipiente grande con cantidad suficiente de refresco.

Algoritmo1. Llene A con el refresco de C2. Vierta A en B hasta llenarlo 3. Vierta todo el contenido de B en C 4. Vierta el resto del contenido de A en B5. Llene A con el refresco de C6. Vierta el contenido de A en B hasta llenarlo7. El recipiente A contendrá 4 cc.

PruebaRecorrer el algoritmo anotando los valores que toman las variables A y B 

Instrucción Contenido de A Contenido de BInicio 0 0

1 5 02 2 33 2 04 0 25 5 26 4 3

ResultadoSe verifica que en el recipiente A quedarán 4 cc. 

5 cc. 3 cc.

ESPOL – Python Programación

Page 14: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 14/293

14

Observe los componentes que intervienen en la construcción del algoritmo:

a) Propuesta del objetivob) Definición de variablesc) Lista de instrucciones

d) Prueba del algoritmoe) Verificación del resultado obtenido

Ejemplo. Describa un algoritmo para revisar un vehículo antes de un viaje. 

Algoritmo

1 Si el nivel de agua del radiador está bajoComplete el nivel de agua del radiador

2 Si el nivel de gasolina es bajo

 Acuda a la estación de gasolina y llene el tanque3 Si el nivel de aceite del motor es bajo

 Acuda a la estación de servicio para chequear el vehículo4 Para cada llanta repita la siguiente instrucción

Compruebe la presión del aire5 Si alguna llanta registró presión baja

 Acuda a la estación de servicio para revisión de llantas

Este algoritmo pretende ser un algoritmo para la revisión del vehículo. Contiene acciones condicionadas  y también una instrucción para repetir una acción  varias veces. Sin

embargo, el uso del lenguaje común no permite que la descripción sea suficientementeprecisa para facilitar el seguimiento de las instrucciones. Tampoco se puede constatar quese cumple el objetivo propuesto como en el ejemplo anterior. Por lo tanto, se lo puedeconsiderar simplemente como un isntructivo de ayuda.

Los lenguajes algorítmicos deben ser descripciones claras, de tal manera que no hayaposibilidad de interpretar las instrucciones de más de una manera.

ESPOL – Python Programación

Page 15: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 15/293

15

2.5 Ejercicios de creación de algoritmos

Para cada ejercicio proponga un algoritmo para obtener la solución.

1. Se tienen 3 recipientes cilíndricos, opacos y sin marcas, de 12, 7, y 5 galones de

capacidad. El recipiente de 12 galones está lleno de combustible. El objetivo es repartir elcombustible en dos partes iguales usando únicamente los tres recipientes. Considere quepuede trasladar el combustible entre recipientes pero no se dispone de algún instrumentode medición.

12 gal. 7 gal. 5 gal.

a) Describa gráficamente el resultado esperadob) Asigne símbolos a las variables (Representan la cantidad de combustible)c) Construya un algoritmo para obtener la solución. Numere las instruccionesd) Ejecute las instrucciones y registre los cambios del contenido de las variablese) Verifique que el algoritmo produce la solución esperada.

Para probar su algoritmo puede completar una tabla como la siguiente. Suponga que A, B,C representan a los recipientes con la capacidad y en el orden dados en el gráfico anterior.

Nota: Existe una solución en 12 pasos (en cada paso se traslada de un recipiente a otro).

2. Describa un algoritmo para resolver el siguiente conocido problema. Defina lasvariables, escriba y numere las instrucciones y luego efectúe una prueba para verificar quefunciona: 

Tres misioneros y tres caníbales deben atravesar un río en un bote en el que sólo cabendos personas. Pueden hacer los viajes que quieran, pero en en las orillas y en el bote elnúmero de caníbales no debe ser mayor al de los misioneros porque ya podemos suponerlo que ocurriría. El bote no puede cruzar el río si no hay al menos una persona dentro paraque lo dirija.

Sugerencia: Defina los misioneros como M1, M2, M3 y los caníbales como C1, C2, C3. Lasvariables R1, R2  son las orillas del río y B  el bote. El contenido de estas variablescambiará mediante las instrucciones del algoritmo. Después de construir el algoritmopuede completar una tabla como la siguiente para verificar el resultado:

Instrucción A B CInicio 12 0 0

12

. . .

ESPOL – Python Programación

Page 16: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 16/293

16

Instrucción R1 B R2Inicio M1,M2,M3,C1,C2,C3

12

. . .

Final M1,M2,M3,C1,C2,C3

3. Describa un algoritmo para resolver el siguiente problema, también muy conocido.Defina las variables, escriba y numere las instrucciones y luego efectúe una prueba paraverificar que funciona: 

Había un pastor que cuidaba a un lobo, una oveja y una canasta de lechugas. El pastortenía que cruzar un río, para lo cual disponía de un pequeño bote en el que solamentecabían él y un animal, o él y la canasta de lechugas. El problema es conseguir que pasentodos al otro lado del río sanos y salvos, sin que nadie se coma a nadie. Al lobo no legustan las lechugas, pero como se puede suponer, el lobo no puede quedarse a solas conla oveja y tampoco la oveja puede quedarse sola con las lechugas. El pastor debe guiar albote en cada viaje.

Sugerencia: Defina símbolos para los datos P: pastor, L: lobo, O: oveja, C: canasta. Lasvariables R1, R2  son las orillas del río y B  el bote. El contenido de estas variablescambiará mediante las instrucciones del algoritmo. Después de construir el algoritmopuede completar una tabla como la siguiente para verificar el resultado:

Instrucción R1 B R2

Inicio P, L, O, C12

. . .Final P, L, O, C

4. Describa un algoritmo para resolver el siguiente problema. Defina las variables, escribay numere las instrucciones y luego efectúe una prueba para verificar que funciona: 

Se tiene una caja con nueve bolas, semejantes en apariencia, entre las cuales hay una

más pesada que las otras ocho. No se sabe cuál es y se trata de hallarla efectuandosolamente dos pesadas en una balanza de dos platillos en equilibrio.

Después de construir el algoritmo puede completar una tabla como la siguiente paraverificar el resultado, en donde a, b, c, d, e, f, g, h, i representan a las nueve bolas.

ESPOL – Python Programación

Page 17: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 17/293

17

Instrucción Caja Platillo izquierdo Platillo derechoInicio a, b, c, d, e, f, g, h, i

12

. . .

Final

5.  Describa en forma precisa las instrucciones necesarias para preparar una fiestasorpresa para su amiga o su amigo. En las instrucciones debe incluir los días y horas enlos que serán desarrolladas las actividades. Haga referencia a la fecha y hora cero en laque ocurrirá el evento. Verifique su algoritmo mediante un cuadro con fechas y horas. Eneste cuadro anote el desarrollo de las actividades siguiendo las instrucciones de sualgoritmo. Note que este tipo de algoritmos no se puede verificar que cumplen el objetivopropuesto como en los ejercicios anteriores. Pueden considerarse únicamente comoinstructivos para organizar el desarrollo de actividades.

ESPOL – Python Programación

Page 18: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 18/293

18

3. Construcción de algoritmos computacionales

En esta sección se describirá una notación para construir algoritmos computacionales. Lanotación es suficientemente simple y clara para ser usada en problemas básicos,facilitando la construcción de su solución, contribuyendo además al desarrollo del

pensamiento algorítmico y la lógica de programación de computadoras. Esta notación esútil especialmente en la etapa inicial de aprendizaje de la programación. Posteriormente sepuede prescindir de ella.

Un algoritmo es la descripción ordenada de la idea que se propone para resolver unproblema. Esta idea debe desarrollarse identificando los componentes que permitiránllegar a solución. Cada componente puede incluir una instrucción simple o un conjunto deinstrucciones.

Para desarrollar una metodología representaremos cada componente gráficamentemediante un bloque:

Bloque para representar componentes del algoritmo

Un algoritmo puede contener varios componentes que son ejecutados en formasecuencial. Este orden se lo puede indicar explícitamente mediante líneas de flujo queunen los bloques: 

Bloque con el primer componente

Bloque con el segundo componente

3.1 Instrucciones u operaciones elementales

Los componentes de un algoritmo contienen instrucciones u operaciones con las que seespecifican cálculos y otros procesos. Si el algoritmo debe comunicarse con el entorno

entonces debe incluir instrucciones para la entrada de datos y la salida de los resultados.

DatosResultados

Las flechas que entran o salen del bloque representan la interacción del algoritmo con elexterior.

La siguiente es la simbología con la que se describirán las instrucciones u operaciones

elementales para construir los componentes de un algoritmo.

ESPOL – Python Programación

Page 19: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 19/293

Page 20: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 20/293

20

Prueba del algoritmo

Para probar un algoritmo, se recorren las instrucciones y se registran los valores quetoman las variables

Prueba del algoritmo del ejemplo anterior

a b c t s5 6 8 9.5 14.9812

El algoritmo producirá el resultado 14.9812 cuando sean ejecutadas las instrucciones.

Observación importante:  Es preferible que los datos para las variables sean ingresadosal algoritmo desde fuera del bloque. De esta manera el algoritmo se independiza de losdatos y no hay que cambiar las instrucciones dentro del bloque para realizar pruebas connuevos datos. Modificamos el ejemplo anterior para desarrollar este concepto.

Ejemplo.  Modifique el algoritmo anterior para que los datos ingresen desde fuera delbloque cuando el algoritmo sea probado o ejecutado.

Algoritmo: Área de un triángulo

Variablesa, b, c: Lados del triángulo (Datos desconocidos)s:  Área del triángulo (Es el resultado esperado)t:  semiperímetro (Valor usado para la fórmula del área)

s t(t a)(t b)(t c) 

, (Fórmula del área del triángulo)siendo t = (a + b + c)/2

abct ← (a + b + c)/2

s ← t(t a)(t b)(t c) 

s

Los datos ya no están dentro del bloque. El resultado que producirá el algoritmodependerá de los valores que entrarán para las variables en cada prueba o ejecución.

Realice algunas pruebas del algoritmo anterior. En cada prueba ingrese los datosnecesarios desde fuera del bloque:

Prueba a b c t s1 5 6 8 9.5 14.98122 4 7 6 8.5 11.97653 8 6 9 11.5 23.5252

El algoritmo permanece invariante y produce los resultados esperados para los datosdados en cada prueba.

ESPOL – Python Programación

Page 21: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 21/293

21

Para mejorar la claridad del algoritmo se puede separar el bloque en varios bloques. Estopermite identificar y agrupar las acciones que se realizan:

a

b Bloque de entrada de datos c

t ← (a + b + c)/2 Bloque de cálculos 

s ← t(t a)(t b)(t c) 

s Bloque de salida de resultados 

Se puede hacer una simplificación de la notación para la entrada o salida:

a, b, c  Bloque de entrada de datos 

t ← (a + b + c)/2 Bloque de cálculos s ← t(t a)(t b)(t c) 

s Bloque de salida de resultados 

Si se usan símbolos especiales de diagramas de flujo, el resultado es un objeto muyconocido, un diagrama de flujo para describir algoritmos con orientación computacional.Esta notación será usada en varios ejemplos de este documento.

Diagrama de flujo

Inicio del algoritmo

a, b, c  Entrada manual de datos (por teclado) 

t ← (a + b + c)/2 Instrucciones de cálculos y asignación s ← t(t a)(t b)(t c)

 

s Salida de resultados (por pantalla) 

Final del algoritmo

ESPOL – Python Programación

Page 22: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 22/293

22

Los bloques y las líneas de flujo de los diagramas ayudan a la comprensión de la lógica delos algoritmos, especialmente cuando se deben incluir instrucciones cuya ejecución estácondicionada o cuando se necesita describir la ejecución repetida de bloques deinstrucciones. Esta notación gráfica se usará para describir las instrucciones básicas dellenguaje computacional y en algunos ejemplos iniciales.

Finalmente, con la práctica y cuando se acepta y comprende la lógica algorítmica, sepodrá prescindir del dibujo de bloques y líneas de flujo y escribir el algoritmo mediantealgún seudo lenguaje o directamente con un lenguaje de programación.

Los seudo lenguajes no tienen reglas fijas para escribir instrucciones pero deberían tenerla claridad suficiente para expresar el algoritmo en forma precisa, usualmente orientándoloa su futura instrumentación computacioal. La siguiente descripción en seudo lenguaje seríauna versión aceptable para el ejemplo anterior:

Seudo lenguaje

Entrar a, b, c 

t ← (a + b + c)/2

s ← t(t a)(t b)(t c) 

Mostrar s

En el diseño y construcción de un algoritmo, lo más importante es el conocimiento delproblema y la concepción de la idea para resolverlo.

La notación algorímica es solamente un instrumento para expresar de maneraestructurada la idea propuesta con la que se espera llegar a la solución del problema.

ESPOL – Python Programación

Page 23: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 23/293

23

3.1.1 Algunas instrucciones típicas de asignación en notación algorítmica

Los siguientes ejemplos se proponen para explicar la notación y algunos aspectos del usode las instrucciones de asignación en los algoritmos.

a) Asigne a la variable n  la raiz cuadrada de 5. n ←  5  

b) Asigne a la variable s el valor 0.

s ← 0

Normalmente se inician variables con cero para luego agregar valores. Es costumbredenominar a estas variables con el nombre de ''acumulador'' o ''sumador''.

 Algunas variables también se inician con cero para luego incrementarlas con un valorunitario. Estas variables se usan para conteos y se las distingue con el nombre de"contador''. 

c) Modifique el valor actual de la variable s incrementándolo con el valor de u.s ← s + u

Si las variables u o s no tuviesen asignadas algún valor previo, será un error.En esta instrucción la misma variable s aparece a la izquierda y a la derecha.La asignación modifica el valor de esta variable.Es importante distinguir la asignación algorítmica de la igualdad que se usa en el lenguaje matemático en el cual sería incorrecto escribir: s = s + u 

d) Modifique el valor actual de la variable k incrementándolo en 1.

k ← k + 1

Si k no ha sido asignada previamente, será un error.

e) Modifique el valor de la variable r reduciendo su valor actual en 2r ← r – 2

f) Modifique el valor de la variable  n duplicando su valor actualn ← 2n

g) Modifique el valor de la variable x  incrementando su valor actual en 20% 

x ← 1.2 x

h) Modifique el valor de la variable  t reduciendo su valor actual en 5%t ← 0.95 t

 j) Intercambie el contenido de las variables a y bv ← aa ← bb ← v

Se requiere usar una variable adicional para no perder uno de los valores.

Es un error realizar la asignación de la siguiente manera: a ← bb ← a

Se perdería el valor que contenía la variable  a 

ESPOL – Python Programación

Page 24: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 24/293

24

Cada variable puede contener un solo valor en cualquier momento de la ejecución delalgoritmo. Este valor es el que ha sido asignado más recientemente.

 Algunos ejemplos contienen la misma variable a la izquierda y a la derecha. La variable ala derecha contiene el valor actual. Con este valor se realiza alguna operación y el

resultado es asignado a la variable que también aparece a la izquierda. Este último valores el que conserva la variable al continuar el algoritmo.

Este tipo de asignación es usado frecuentemente en los algoritmos pues permite cambiarel contenido de las variables durante la ejecución.

3.1.2 Ejercicios con la notación algorítmica: Algoritmos secuenciales

Para cada ejercicio escriba una solución en notación algorítmica y realice una prueba

1.  Dados el radio y altura de un cilindro calcule el área total y el volumen

2. Se tiene un recipiente cilíndrico con capacidad en litros. Su altura es un dato en metros.Determine el diámetro de la base

3.  Dadas las tres dimensiones de un bloque rectangular calcule y muestre su área total ysu volumen

4. La siguiente fórmula proporciona el enésimo término u de una progresión aritmética: u = a + (n − 1) r  

en donde a  es el primer término, n es el la cantidad de términos y r   es la razón entre dostérminos consecutivos. Calcular el valor de r dados u, a, n 

5.  El examen de una materia es el 70% de la nota total. Las lecciones constituyen el 20%y las tareas el 10% de la nota total. Ingrese como datos la nota del examen calificadosobre 100 puntos, la nota de una lección calificada sobre 10 puntos, y las notas de trestareas calificadas cada una sobre 10 puntos. Calcule la calificación total sobre 100 puntos.

ESPOL – Python Programación

Page 25: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 25/293

25

3.2 Estructuras de control de flujo de un algoritmo 

La ejecución de los bloques de un algoritmo es secuencial de arriba hacia abajo, pero esteorden puede alterarse mediante estructuras de control de flujo que permiten establecer unorden especial en la ejecución. Para describirlas se usará una representación gráfica.

3.2.1 Decisones

Describen la ejecución selectiva de bloques usando como criterio el resultado de unacondición.

a) Ejecución condicionada de un bloque

F Condición

V

P

 Al entrar a esta estructura, se evalúa la condición. Si el resultado es verdadero (V) seejecutarán las instrucciones en el bloque P caso contrario, si el resultado es falso (F) elbloque no será ejecutarlo. En ambos casos el algoritmo continua debajo del bloque.

La condición es cualquier expresión cuyo resultado puede ser únicamente verdadero (V) ofalso (F). Puede incluir operadores para comparar el contenido de variables y también sepueden usar los conectores de la lógica matemática.

Ejemplo. Expresiones que pudieran ser usadas como una condición

n > 0a ≤ 5

x 4

a < 3 ∨ x > 1

Para que una expresión pueda evaluarse y ser usada como una condición, las variablesincluidas en la expresión deben tener asignado algún valor, caso contrario será un errorpues la condición no podría evaluarse.

ESPOL – Python Programación

Page 26: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 26/293

26

Ejemplo. Describa en notación algorítmica como reducir en 10% el valor que contiene lavariable p,  en caso de que su valor actual sea mayor a 40. Despues obtenga el resultadode la multiplicación de n por  el valor de  p  (con su valor inicial o con su valor corregido).

F p > 40

V

p ← 0.9 p

t←

 n p 

 Antes del bloque, la variable p  debe haber sido asignada con algún valor, caso contrariosería un error.

ESPOL – Python Programación

Page 27: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 27/293

27

Ejemplo. Describa en notación algorítmica una solución al siguiente problema.

Calcular el valor total que una persona debe pagar por la compra de llantas en un almacénque tiene la siguiente promoción: Si la cantidad de llantas comprada es mayor a 4, elprecio unitario tiene un descuento de 10%. El algoritmo debe ingresar como datos la

catidad de llantas y el precio inicial de cada llanta. Mediante una comparación el algoritmodeberá aplicar el descuento.

Algoritmo: Compra de llantas con descuento

Variablesn: Cantidad de llantasp: Precio inicial de cada llantat: Valor a pagar

Diagrama de flijo

n, p Ingreso de datos por teclado 

F n > 4 Verificar el contenido de n

VSi compra más de 4 llantas 

p ← 0.9 p el precio se reduce en 10% 

t←

  n p Cálculo del valor a pagar

t Salida del resultado a pantalla

Prueba. Realice algunas pruebas del algoritmo anterior. En cada prueba ingrese los datosnecesarios desde fuera del bloque:

Pruebas n p t Salida1 2 70 140 1402 6 80 432 4323 5 120 540 540

El algoritmo produce los resultados esperados con los datos de cada prueba

ESPOL – Python Programación

Page 28: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 28/293

28

b) Ejecución selectiva entre dos bloques

F Condición

V

P  Q 

 Al entrar a esta estructura, se evalúa la condición. Si el resultado es verdadero (V) seejecutará el bloque P asociado al valor verdadero, caso contrario, si el resultado es falso(F) se ejecutará el bloque Q. El algoritmo continua abajo, despues de ejecutar alguno delos dos bloques.

Ejemplo. Describa en notación algorítmica como asignar a la variable m  el mayor entredos valores almacenados respectivamente en las variables a y  b

F a ≥ b

V

m ← a  m ← b 

 Antes del bloque, las variables a y b  deben haber sido asignadas algún valor, casocontrario sería un error.

ESPOL – Python Programación

Page 29: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 29/293

Page 30: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 30/293

30

3.2.2 Ejercicios con la notación algorítmica: Algoritmos con decisiones

Para cada ejercicio desarrolle una solución en notación algorítmica y realice una prueba

1. Dados el radio y altura de un cilindro, si la altura es mayor al radio calcule y muestre el

valor del volumen del cilindro, caso contrario muestre el valor del área del cilindro.

2. Lea la cantidad de Kw que ha consumido una familia y el precio por Kw. Si la cantidades mayor a 700, incremente el precio en 5% para el exceso de Kw sobre 700. Muestre elvalor total a pagar.

3.  Lea un valor de temperatura t y un código p que puede ser 1  o 2. Si el código es 1 convierta la temperatura t de grados f  a grados c con la fórmula c=5/9(t-32). Si el códigoes 2  convierta la temperatura t  de grados c  a f   con la fórmula: f=32+9t/5. Muestre elresultado.

4.  Dadas las dimensiones de un bloque rectangular, calcule las diagonales de las trescaras diferentes. Muestre el valor de la mayor diagonal.

5. Dadas las tres calificaciones de un estudiante, encuentre y muestre la calificación masalta.

ESPOL – Python Programación

Page 31: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 31/293

31

3.2.3 Ciclos

Los ciclos o repeticiones son estructuras de control que se usan para describir la ejecuciónrepetida de bloques de instrucciones..

Hay dos formas comunes de ciclos que se usan en la construcción de algoritmos.

a) Ejecución repetida de un bloque mediante una condición

FMientras condición 

V

P

 Al entrar a esta estructura se evalúa la condición. Si el resultado es verdadero (V) seejecutarán las instrucciones dentro del bloque y regresará nuevamente a evaluar lacondición.

Mientras la condición mantenga el valor verdadero (V), el bloque de instrucciones seejecutará nuevamente. Esto significa que en algún ciclo al evaluar la condición deberáobtenerse el resultado falso (F) para salir de la estructura y continuar la ejecución despuésdel bloque. Al diseñar el algoritmo deberán escribirse las instrucciones necesarias.

La condición es cualquier expresión cuyo resultado puede ser únicamente verdadero (V) ofalso (F). Puede incluir operadores para comparar el contenido de variables y también sepueden usar los conectores de la lógica matemática.

Ejemplo de expresiones que pudieran ser usadas como una condición. El resultado de

cada una dependerá del contenido de las variables:

n > 0a ≤ 5

x 4a < 3 ∨ x > 1

Las estructuras de repetición son necesarias cuando las instrucciones de un bloque delalgoritmo deben ejecutarse más de una vez para construír la solución.

Si el algoritmo que se propone para resolver un problema requiere repetir un bloque pero

no se puede anticipar la cantidad de ciclos que deben realizarse, entonces deberia usarsela repetición controlada con una condición.

ESPOL – Python Programación

Page 32: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 32/293

32

Ejemplo. Describa algorítmicamente la repetición de un bloque de instrucciones mientrasla variable x tenga un valor menor a 10

FMientras x < 10 

V

P

 Antes del bloque, la variable x debe haber sido asignada con algún valor, caso contrariosería un error.

Es necesario que la variable x cambie su contenido dentro del bloque de instrucciones quese repiten para que en algún ciclo la repetición pueda terminar y la ejecución continuedespués del bloque. Caso contrario sería un error lógico pues el algoritmo permaneceríaen el ciclo.

NOTA:  Los símbolos gráficos usados en este documentos para representar ciclos no sonsímbolos estandarizados, pero son suficientemente descriptivos.

ESPOL – Python Programación

Page 33: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 33/293

33

Ejemplo. Describa en notación algorítmica una solución para el siguiente problema.

En un cultivo se tiene una cantidad inicial de bacterias. Cada día esta cantidad se duplica.Determine en que día la cantidad excede a un valor máximo.

Algoritmo: Crecimiento de la cantidad de bacterias

Variablesx: Cantidad inicial de bacteriasm: Cantidad máxima de bacteriasd: Día

Diagrama de flujo

x, m Ingreso de los datos 

d←

 0 Iniciar el día en cero 

FMientras x ≤ m El ciclo se repetirá mientras 

la cantidad de bacterias noV exceda al máximo. 

x←

 2x Dentro del bloque sed ← d + 1 modifica la cantidad de 

bacterias y el día. 

d Mostrar el valor final del día 

Note que se debe usar el ciclo condicionado pues no se puede anticipar la cantidad derepeticiones necesarias para que la cantidad de bacterias exceda al valor máximo.

Prueba. Realice una prueba del algoritmo anterior. Ingrese los datos desde fuera del

bloque y registre los cambios en el contenido de las variables.

Prueba x m d Salida200 5000 0400 1800 21600 33200 46400 5 5

Se puede verificar que es el resultado esperado y que coincide con el valor que se puede

calcular matemáticamente con la expresión n2 x m>  

ESPOL – Python Programación

Page 34: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 34/293

34

b) Ejecución repetida de un bloque mediante una secuencia

FPara v ← secuencia 

V

P

Para usar esta estructura de control es necesario especificar una variable para el conteode repeticiones y una lista de valores o secuencia que puede tomar. El ciclo se repetirácon cada valor especificado para la variable. Al ejecutarse cada ciclo el valor de la variablecambiará siguiendo la especificacion.

 Al entrar a esta estructura, se inicia la variable de control. Si esta variable no excede alvalor final, se ejecuta el bloque y regresa nuevamente al inicio del ciclo y la variable tomael siguiente valor de la secuencia. Cuando el valor de la variable llegue al valor final, elciclo finalizará y la ejecución continuará después del bloque.

La variable de control del ciclo puede especificarse con alguna notación que exprese

cuales son los valores que puede tomar.

Ejemplos

Mediante una lista de valores:

v ← [2, 5, 4, 7, 6]

Indicando el valor inicial, el valor final de la secuencia y el incremento:

v←

 1, 10, 1

Equivale a la secuencia: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 

v ← 1, 15, 2

Equivale a la secuencia: 1, 3, 5, 7, 9, 11, 13, 15 

Si no se escribe el incremento, se supondrá que es la unidad

ESPOL – Python Programación

Page 35: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 35/293

35

Ejemplo. Especificar una variable de control para que el bloque de instrucciones P se repita  20 veces

F

Para i←

 1, 20 

V

P

Ejemplo. Describa en notación algorítmica una solución al siguiente problema.

Dado un entero positivo n, se desea verificar que la suma de los primeros n númerosimpares es igual a n2 

Ej. n = 5: 1 + 3 + 5 + 7 + 9 = 52 

Algoritmo: Suma de impares

Variablesn: Cantidad de números imparesk: Cada número impars: Suma de imparesi: Conteo de ciclos

ESPOL – Python Programación

Page 36: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 36/293

36

Diagrama de flujo

n Cantidad de impares 

s←

 0 Inicio de la suma de impares 

FPara i ← 1, n Estructura para realizar ciclos 

La variable de control es i V

k ← 2i - 1 k contiene cada número impar  s ← s + k  Agregar a la suma el valor k 

s = n2  Verificar si se cumple 

‘Verdadero’ ‘Falso’

Prueba. Realice una prueba del algoritmo anterior. Ingrese un dato desde fuera del bloquey registre los cambios en el contenido de las variables.

Prueba n Ciclo i Impar k s Salida5 0

1 1 12 3 43 5 94 7 16

5 9 25 ‘Verdadero’

Se verifica que el resultado es ‘Verdadero’.

Note que este algoritmo no constituye una demostración matemática. Solo verfica que lapropiedad se cumple para valores específicos.

Las estructuras de repetición son necesarias cuando un bloque del algoritmo debeejecutarse más de una vez para construír la solución.

Si se puede anticipar la cantidad de ciclos que se deben realizar, entonces conviene usarla repetición controlada con un conteo de ciclos.

ESPOL – Python Programación

Page 37: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 37/293

37

3.2.4 Ejercicios con la notación algorítmica: Algoritmos con ciclos

Para cada ejercicio desarrolle una solución en notación algorítmica y realice una prueba

1. Calcule el mayor valor de los pesos de n paquetes en una bodega. Estos datos ingresanuno a la vez dentro de un ciclo. Al inicio ingrese el valor de n para especificar la cantidadde ciclos que se realizarán

2.  Lea los votos de n  personas en una consulta. Cada voto es un número 0, o  1 correspondiente a la opción a favor (1) o en contra (0). Al inicio lea el valor de n  paraespecificar la cantidad de ciclos que se realizarán. Muestre el resultado de la consulta.

3. Determine la suma de los n primeros números de la serie: 1, 1, 2, 3, 5, 8, 13, 21, ....en la cual cada término, a partir del tercero, se obtiene sumando los dos términosanteriores

4. Calcule un valor aproximado para la constante π  usando la siguiente expresión:

π/4 = 1 – 1/3 + 1/5 – 1/7 + 1/9 – 1/11 + 1/13 ...

La cantidad de términos es un dato que debe ser ingresado al inicio del algoritmo.

5. Determine la cantidad de términos que deben sumarse de la serie  11 + 22 + 33 + 44 + ... para que el valor de la suma sea mayor a un número x ingresado al inicio.

6. El inventor del juego del ajedréz pidió a su rey que como recompensa le diera por laprimera casilla 2 granos de trigo, por la segunda, 4 granos, por la tercera 8, por la cuarta16, y así sucesivamente hasta llegar a la casilla 64. El rey aceptó. Suponga que cada Kg.de trigo consta de 20000 granos de trigo. Si cada tonelada tiene 1000 Kg. describa unalgoritmo para calcular la cantidad de toneladas de trigo que se hubiesen necesitado.

!" $% &'&%( )$*&+',- %- *./- 0

1

 2 0

0

 2 0

3

 2 0

4

 2 5 2 0

64

ESPOL – Python Programación

Page 38: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 38/293

38

4. Lenguajes de Programación de Computadoras

Un lenguaje de programación es un lenguaje diseñado para describir acciones que puedanser realizadas por una computadora. Para que esto sea posible es necesario que secumplan ciertos requerimietos básicos:

a) Debe haberse construido o elaborado el algoritmo con el procedimiento detalladopara resolver el problema de interés. Este algoritmo debe tener orientacióncomputacional.

b) Se necesita conocer la sintaxis y significado de las instrucciones del lenguaje deprogramación que se va a utilizar

c)  Es necesario tener acceso a un equipo computacional, el cual debe tenerinstalado el traductor del lenguaje computacional que será utilizado.

Los lenguajes de programación están formados por un conjunto de símbolos y reglas parasu uso. La instrumentación del algoritmo mediante estas reglas se denomina programar yel producto obtenido es el programa. El programa escrito se denomina programa fuente,mientras que el programa traducido al lenguaje que entiende el computador se denominaprograma objeto o ejecutable.

La actividad de programación incluye varias etapas: escritura del programa, pruebas,depuración, validación de los resultados y documentación del desarrollo.

La programación requiere precisión y cuidado en los detalles de uso del lenguaje. Loserrores de sintaxis normalmente los detecta el traductor del lenguaje, pero los errores decontenido requieren mayor esfuerzo y la realización de pruebas. Esta etapa se denomina

depuración.En laa aplicaciones reales los programas pueden necesitar cambios y actualizaciones, porlo que el uso de normas y una buena documentación son escenciales.

ESPOL – Python Programación

Page 39: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 39/293

39

4.1 Metodologías de programación

Las siguientes son algunas de las metodologías de programación más comunes utilizadasen programación de computadoras: Programación Estructurada, Programación Modular,Programación Orientada a Objetos

La Programación Estructurada usa instrucciones de control básicas con el objetivo demantener la claridad en la codificación de un programa o módulo. Esta metodologíaenfatiza el desarrollo de la programación al nivel de detalle.

La Programación Modular   divide el desarrollo de programas, usualmente complejos ograndes, en subprogramas o módulos que facilitan la codificación y la validación. Estametodología orienta la organización de la programación mediante la construcción debloques o módulos y su integración.

La Programación Orientada a Objetos permite a los programadores organizar el diseño

de un proyecto de programación definiendo objetos relacionados con el problema que seintenta modelizar. En esta metodología las estructuras de los datos son el centro alrededordel cual se desarrolla la programación.

En este documento se desarrollará el aprendizaje de la programación con el lenguajePython aplicando estas metodologías sucesivamente en el orden indicado. Al final, cadausuario podrá reconocerlas y agregará su propio estilo de programación.

4.2 Factores para elegir un lenguaje de programación

 Algunos aspectos que deben considerarse al elegir un lenguaje de programación:

a) Propósito o aplicación: general o dedicado

b)  Características operativas: interacción, tipos de datos, control de excepciones

c) Soporte técnico: disponibilidad, sistemas operativos, documentación, comunidad

d)  Metodologías de programación aplicables

e)  Facilidad y tiempo para el aprendizaje

f)  Legibilidad de la codificación

g)  Eficiencia de los programas resultantes

h) Productividad: velocidad de desarrollo de los programas

i) Perspectivas a futuro para desarrollo y crecimiento del lenguaje

Se dice que un programador debe conocer al menos dos lenguajes de programación. Elprimero puede ser Python y el siguiente C++, Java, etc. Sin embargo Python puede ser elprimero y único lenguaje computacional que necesitan la mayoría de usuarios.

ESPOL – Python Programación

Page 40: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 40/293

40

4.3 Lenguajes compilados y lenguajes interpretados

Los compiladores como C++ tienen una ventana para el desarrollo de la programación enla cual se escribe el programa. El programa se compila y si no hay errores se genera unprograma ejecutable autónomo. No se requiere que el traductor esté presente. Elprograma ejecutable resultante es muy eficiente. En los lenguajes compilados solamentepueden realizarse pruebas cuando el programa está completo.

Los interpretadores de lenguaje como Python tienen una ventana interactiva para pruebasy una ventana de edición para crear los programas. Este entorno permite realizar pruebasdurante el desarrollo, con lo cual aumenta la productividad.

Los resultados se muestran en la ventana interactiva por lo que se requiere que elinterpretador de instrucciones esté presente. Los programas resultantes no son muyeficientes, pero el desarrollo y pruebas es muy rápido. Si se desea más eficiencia se lospuede trasladar a un lenguaje compilado.

 Actualmente existen compiladores para traducir directamente programa construidos conlenguajes interpretados. Igualmente, se pueden incorporar componentes compilados a unlenguaje interpretado.

ESPOL – Python Programación

Page 41: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 41/293

41

5 El lenguaje Python

5.1 Origen del lenguaje Python

El lenguaje Python fue creado por Guido van Rossum a principos de los años 90 en

Holanda. El nombre del lenguaje proviene de la afición de su creador por el grupo dehumoristas británicos los Monty Python.

Python  es un interpretador de instrucciones que permite usar el lenguaje en forma

interactiva. Los lenguajes interpretados, a diferencia de los lenguajes compilados, permiten

experimentar interactivamente en una ventana y también mediante programas que pueden

desarrollarse y probarse a medida que son construidos. Esta interacción facilita el

aprendizaje del lenguaje y mejora la productividad. Los programas compilados en cambio,

deben estar completos para que sean probados y no admiten experimentarseparadamente con las instrucciones. La ventaja de los programas compilados es que el

tiempo de ejecución es menor.

Python es un lenguaje de propósito general. Su diseño no obliga a los usuarios a adoptar

un estilo particular. Esta característica del lenguaje motiva la creatividad y permite la

elección entre varios paradigmas o metodologías de programación.

Con todos los recursos del lenguaje y el soporte de las librerías disponibles, el

programador puede usar libremente su imaginación para crear nuevas soluciones.

Partiendo de un conocimiento conocimiento inicial básico, puede avanzar en el

conocimiento del lenguaje a su propio ritmo.

Python es un producto público y de distribución libre que puede descargarse de internet.

(*) Los datos biográficos se tomaron de la dirección de internet:

http://www.ecured.cu/index.php/Guido_van_Rossum 

En la siguiente dirección de YouTube hay un video en el cual Guido van Rossum expone algunos

aspectos del lenguaje Python:

http://www.youtube.com/watch?v=EBRMq2Ioxsc 

Guido van Rossum nació en 1956 en Holanda. Allí recibióun título de maestría en matemática y ciencias dela computación  de parte de la Universidad  de Amsterdam en 1982.  Esto le abrió las puertas a variospuestos de trabajo en los siguientes años en el CentrumWiskunde & Informatica (CWI). En esa misma ciudadcreó Python. Actualmente colabora en Google.

Se lo conoce actualmente por el título BDFL ("BenevolentDictator for Life'"), teniendo asignada la tarea de fijar lasdirectrices sobre la evolución de Python, así como la detomar decisiones finales sobre el lenguaje que todos losdesarrolladores acatan. Van Rossum tiene fama de serbastante conservador, realizando pocos cambios allenguaje entre versiones sucesivas, intentando mantenersiempre la compatibilidad con versiones anteriores. (*) 

ESPOL – Python Programación 

Page 42: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 42/293

42

5.2 Caracteristicas del lenguaje computacional Python

a) Python es un lenguaje interpretado. Se considera sucesor del lenguaje ABC y usaconceptos de otros lenguajes como Modula-3, Lisp, entre otros.

b) Python no obliga a los programadores a adoptar un estilo particular de programación.

c) Se puede instalar en varias plataformas: Windows, Linux, etc. Con menores cambiospuede trasladarse entre ellas.

d) Es software libre y de código abierto con licencia GPL (General Public License). Sepuede instalar, modificar y distribuir proporcionando el código fuente. Una licencia GPL noofrece garantía, pero la gran comunidad de usuarios que disponen del código abierto,rápidamente detectan errores.

e) El código escrito en Python es legible, sin marcas para definir bloques como en otros

lenguajes. No requiere símbolos de fin de línea. Escribir en este lenguaje es casi comoescribir en seudo código en inglés

Ejemplo.

!" $ %& $'() $% *+,-./-,0-+1-,/2  Seudocódigo"345"3"5 67& $'() $% 89 8"'(96

": $ %&( "% *+,-./-,0-+1-,/2;  Lenguaje Python45"%(<67& $'() $% 89 8"'(96=

f) Usa el encolumnamiento de instrucciones para definir bloques y establecer el alcancede las estructuras de control. El código resultante es compacto pero legible.

g) Python es un lenguaje de tipado dinámico: conecta un método y un nombre de variabledurante la ejecución del programa.

h) Es un lenguaje seguro. Realiza chequeo dinámico de tipos de datos y de índices

i) Es un lenguaje extendible. Continuamente la gran comunidad de usuarios está creandonuevas librerías en diferentes áreas de aplicación.

 j) Python es un lenguaje de propósito general. Algunas aplicaciones son:a) Aprendizaje de la programación.

b) Desarrollo de prototipos.

c) Computación científica y matemática.

d) Estadística y optimización.

e) Desarrollo de interfaz visual.

f) Desarrollo de aplicaciones web.

g) Interfaz para manejo de bases de datos.

h) Educación y juegos.

i) Desarrollo de software.

ESPOL – Python Programación

Page 43: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 43/293

43

k) Algunos usuarios actuales de Python: YouTube, Google, NASA, universidades, etc.

l)  Aprendizaje fácil para diferentes niveles de usuarios. Recomendable como primerlenguaje de programación.

m) Python puede tener abiertas varias ventanas interactivas y varias ventanas de edicióntrabajando en pruebas o proyectos diferentes

n) En Python la ejecución se inicia desde la ventana de edición o cargando el programa enla ventana interactiva. Siendo un interpretador de lenguaje, el traductor debe estarpresente. Sin embargo ya existen utilitarios para compilar programas Python. Ejemplo.PyPy.

o) En Python, la mayoría de las funciones están en librerías que deben ser cargadas antesde acceder a las funciones. Por este motivo, el tiempo de carga del traductor Python es

menor.

p) Python es un lenguaje de propósito general y tiene estructuras de datos muy flexibles.Se pueden crear listas con componentes de diferentes tipos.

La filosofía de Python es la legibilidad y transparencia. Estos principios están codificados yse los puede revisar escribiendo la instrucción  import this  en la ventana principal dePython.

 Algunas características fueron tomadas del curso tutorial de Python en la dirección de internet:

http://codigofacilito.com/cursos/Python

ESPOL – Python Programación

Page 44: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 44/293

44

5.3 Carga e instalación

El traductor del lenguaje de programación Python es público y de acceso libre. Se lo puededescargar e instalar para WINDOWS y para otros sistemas operativos desde la páginaoficial de Python en la dirección de la red internet:

https://www.Python.org/ 

La version más reciente disponible para WINDOWS es la versión 3.4.1 de mayo 18, 2014

La instalación es guiada mediante pantallas con opciones que deben aceptarse. Cuando lainstalación está completa se habrá creado una carpeta con el nombre Python34.

La instalación también crea en la barra del menú inicial de WINDOWS y en la carpeta delprograma a la que se accede desde el menú inicial, un ícono con el nombre IDLE (PythonGUI) mediante el cual se despliega una pantalla de interfaz que facilta la interacción conPython:

Esta es la pantalla principal o Shell de Python. Esta pantalla incluye en el margen superiorun menú de opciones. Al presionar file  en el menú se abren opciones para crear

ventanas de edición de programas, para buscar programas, guardarlos, etc.

ESPOL – Python Programación

Page 45: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 45/293

45

En este documento usaremos este dispositivo para interactuar en línea con Python  ytambién para el ingreso y salida de los resultados cuando se escriban programas y serealice la ejecución. Aparte del IDLE que ofrece Python, existen otras instrumentacionesdisponibles como interfaz de Python.

Se puede personalizar la apariencia de esta pantalla presionando el botón Options en elmenú y seleccionando Configure IDLE.

IDLE proviene de las palabras Interactive Development Environment.GUI proviene de las palabras Graphical User Interface 

Nota: Si en lugar de IDLE (Python GUI) elije Python (command line) se abrirá la ventanaprimitiva de Python la cual es muy limitada para interactuar con el lenguaje.

ESPOL – Python Programación

Page 46: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 46/293

46

5.4 Extensiones al lenguaje

Para enriquecer el lenguaje, los usuarios de la comunidad Python  han desarrolladomuchas extensiones organizadas en paquetes o librerías las cuales están disponibles demanera gratuita en la red internet para integrarlas al entorno del lenguaje.

Un sitio de internet que contiene una gran cantidad de paquetes con extensiones paraPython ha sido compilada por  Christoph Gohlke de la Universidad de California en Irvine.De este sitio se pueden descargar e instalar para WIINDOWS, en la dirección:

http://www.lfd.uci.edu/~gohlke/Pythonlibs/ 

Los siguientes son algunos de los paquetes de extensión importantes que se puedendescargar de este sitio para WINDOWS. Se recomienda realizar su instalación.

NumPy: Paquete fundamental para computación matemática y científica con Python Matplotlib, Pylab: Librería para gráficos en dos y tres dimensiones

SymPy: Librería para aplicaciones con matemáticas simbólicas

 Al descargar estas extensiones, el programa de instalación las agrega a la carpeta site-packages ubicada dentro de lib la cual a su vez está incluida en la carpeta Python34. Lacarpeta site-packages  contiene algunos paquetes iniciales que se agregan directamenteal instalar Python.

El sitio oficial para decargar las librerías fundamentales: Numpy, SciPy, SymPy, Matplotlib:

http://www.scipy.org/ 

Existe gran cantidad de información acerca del uso del lenguaje Python en la red internet,así como ejemplos y videos en el portal YouTube.

 Algunos sitios de interés en la red internet con información para el aprendizaje de Python:

Sitio web con información incial para la instalación y uso de del lenguaje Python 

https://wiki.Python.org/moin/BeginnersGuide/ 

Un tutorial detallado del lenguaje Python. 

http://www.tutorialspoint.com/Python/

En la siguiente dirección se puede encontrar y bajar en formato pdf el tutorial elaboradopor Guido Van Rossum y traducido al español por voluntarios usuarios de Python  en Argentina.

http://docs.Python.org.ar/tutorial/pdfs/TutorialPython3.pdf  

En general, estos documentos proveen información dispersa acerca del uso del lenguaje,pero no incluyen muchos ejemplos de aplicación.

El documento que ofrecemos en esta obra es una integración de muchos temas de interés

para el aprendizaje del lenguaje Python, con una gran cantidad de ejemplos instructivos yejercicios de práctica para los interesados.

ESPOL – Python Programación

Page 47: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 47/293

47

5.5 Desarrollo de programas en el lenguaje Python

Un programa es la descripción de un algoritmo en un lenguaje computacional. En laterminología de Python, un programa se denomina módulo.

Para escribir un programa es necesario haber conceptualizado o construido el algoritmopara resolver el problema de interés y conocer las reglas de sintaxis y semántica dellenguaje computacional que será usado.

También deberá tener instalado en su computador el traductor del lenguaje. En estedocumento se usará una interfaz de Python para desarrollo denominada IDLE (InteractiveDeveLopment Environment). Adicionalmente se pueden instalar extensiones del lenguajeque han sido desarrollados para aplicaciones especiales.

5.6 Algunos elementos básicos para escribir programas

5.6.1 Tipos de datos básicos

Son los componentes elementales con los que se opera en el lenguaje Python. En colorrojo se muestra el nombre del tipo.

a) Enteros (int)

Son números sin punto decimal.

Ejemplos..1

>

?+,@

b) Reales o números de punto flotante (float)

Números con punto decimal o expresados en notación de potencias de 10

Ejemplos..A,0

?>A>,@,A/$?0 es el número 2.4x10-5 

c) Complejos (complex)

Números expresados con un componente real y un componente imaginario

Ejemplo.<,B.C=

ESPOL – Python Programación

Page 48: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 48/293

48

d) Cadenas de caracteres (str )

Expresiones encerradas entre comillas simples o comillas dobles. Este tipo de datos no esbásico. Pero damos una primera mirada. Serà estudiado en detalle en otra sección.

Ejemplos.DE% 98F&5"(3&D o 6E% 98F&5"(3&6 

e) Valores lógicos (bool)

G5E$  Representa al valor lógico verdadero H98'$  Representa al valor lógico falso 

5.6.2 Variables o identificadores

Son los símbolos para representar los valores y otros componentes de los programas.Para escribir variables se pueden usar letras, mayúsulas y minúsculas, dígitos y el sub-guión pero deben comenzar con una letra o con el sub-guión. Se pueden usar tildes y ñ.

Las variables se crean al asignarles un valor. Esta asignación se denomina dinámica puesse realiza durante la ejecución, es decir que las variables se crean y pueden modificarsedurante la ejecución. El tipo de datos de la variable se define con el tipo del valor asignado.

Se recomienda que los nombres de variables no coincidan con las palabras reservadasque tienen un significado especial para el lenguaje de programación. Se sugiere usarnombres cortos pero significativos y relacionados con los valores que representarán.

Lista (no exhaustiva) de palabras reservadas de Python

9%I 9''$5( J5$9K L89'' L&%("%E$ I$: I$8 $8": $8'$ $ML$4( $M$L

:"%988N :&5 :5&3 F8&J98 ": "34&5( "% "%4E( "' 893JI9 %$M( %&(

&5 49'' 45"%( 59"'$ 5$(E5% (5N OP"8$ N"$8I

5.6.3 Operadores

Son los símbolos utilizados para expresar las operaciones básicas en los programas

a)  Operadores aritméticos

Se utilizan para escribir expresiones aritméticas. También se pueden usar los paréntesis  ( )para definir el orden de las operaciones. El resultado es un valor aritmético.

Operación PythonSuma B

Resta ?

Multiplicación Q

División real R

Potenciación QQ

ESPOL – Python Programación

Page 49: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 49/293

49

Ejemplos.  (a+2)3 traducción al lenguaje Python: <9B,=QQ. 

a 5

b 1

+

−  traducción al lenguaje Python:  <9B0=R<J?+= 

b) Operadores relacionales

Estos símbolos se usan para comparar valores. El resultado de esta comparación es unvalor lógico: G5E$  o H98'$.

Matemáticas Python<  S 

>  T

≤  SU

≥  TU

=  UU≠  VU 

Ejemplo.  M SU 0

El resultado será G5E$  si el contenido de x  es menor o igual que 5, caso contrario, seráH98'$ 

c) Conectores lógicos

Estos símbolos se utilizan para construir expresiones lógicas. El resultado es un valorlógico G5E$ o H98'$.

Matemáticas Python

Conjunción: ∧  9%I

Disyunción: ∨  &5

Negación:   %&(

Ejemplo.  M S 0 9%I  ( T , 

Dependiendo de x  y t el resultado será G5E$ o H98'$ 

d) Precedencia de operadores

Si en una expresión hay operadores de diferente tipo, primero se evalúan las operacionesaritméticas, luego las operaciones relacionales y finalmente las operaciones lógicas.

Los  paréntesis ( )  se pueden usar para definir con claridad la precedencia de lasoperaciones.

ESPOL – Python Programación

Page 50: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 50/293

50

c) Operadores especiales

Existen otros operadores. Aquì incluimos dos operadores de uso frecuente

Operador de inclusión

$  "%  L 

$  %&( "%  L 

Este operador detecta si un elemento e  pertenece o no a una colección de datos c. Lascolecciones de datos serán revisadas en una sección posterior. Una cadena o string esuna colección de datos. El resultado de esta operación es un valor lógico: G5E$ o H98'$ 

Ejemplo: 

TTT D3D "% D45&F5939D El resultado es  G5E$ 

Operador de concatenación

El operador "  se puede usar para concatenar colecciones de datos. Una cadena o string

es una colección de datos. Si se concatenan cadenas, el resultado será una cadenacompuesta por ambas cadensa.

Ejemplo.

TTT MUDW9($D

TTT NUD3)("L9DTTT XUMBN

TTT X

DW9($3)("L9D El resultado es una cadena concatenada 

TTT XUDY9 DBX Puede usarse en forma recurrente TTT X

DY9 W9($3)("L9D

TTT 5UD$D "% X

TTT 5

G5E$

Nota: Los colores aparecen automáticamente al escribir instrucciones en la ventana dePython

ESPOL – Python Programación

Page 51: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 51/293

51

5.6.4 Conversión entre tipos de datos

Siempre que el contenido sea compatible, se puede convertir entre tipos de datosmediante una especificación correspondiente al tipo de datos requerido.

Ejemplos. Asignación Resultado Tipo del resultado

9U1.  1. Entero JU:8&9(<9= 1.A>  Real LU'(5<9= D1.D  Cadena

IU1.A0 1.A0  Real $U"%(<I= 1.  Entero

'UD+,0D D+,0D  Cadena 

FU"%(<'=  +,0  Entero

'UD+,0A1D  D+,0A1D Cadena 5U:8&9(<'=  +,0A1 Real(U"%(<'= Error de conversión

'UD%1,@D  D%1,@D Cadena (U"%(<'= Error de conversión

MU0  0  Entero

XUL&348$M<M= <0B>C= Complejo

EU,B.C <,B.C= Complejo9UEA5$98  ,A>  Real (Componente real de u) JUEA"39F  .A>  Real (Componente imaginario de u)NU:8&9(<E=  Error de conversión

'UD,B.CD  D,B.CD CadenaXUL&348$M<'=  <,B.C=  Complejo(U,S. G5E$  Lógico 

Los colores en los ejemplos son para resaltar y distinguir los nombres de Python. Estoscolores aparecen automáticamente al escribir expresiones en la ventana de Python.

Algunas conversiones especiales

 Asignación Resultado Tipo del resultado

9U10  10  Entero JULP5<9= DZD  Caràcter cuyo código entero (ASCII) es 75LUD[D D[D  Caràcter  IU&5I<L=  @,  Código entero que representa el carácter 'R' 

%U.1 .1  Entero m=bin(n) ‘0b100101’ String con la representación en binario de 37

ESPOL – Python Programación

Page 52: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 52/293

52

5.6.5 Uso de módulos especiales

Los algoritmos escritos en el lenguaje Python se denominan programas o módulos. Estosmódulos se almacenan con algún nombre en alguna carpeta en el disco. También existenotros módulos especiales o librerías que deben cargarse para tener acceso a estos

recursos.

 Algunos de estos módulos especiales se instalan desde el inicio en la librería estándar deltraductor Python. Otros se los puede descargar de la red internet y otros pueden sercreados por los propios usuarios.

Python  incluye los operadores e instrucciones básicas pero si se necesitan funcionesespeciales se debe cargar el módulo o librería que las contiene con la siguiente sintaxis:

:5&3 3\IE8& "34&5( :E%L"\%

Las funciones matemáticas comunes están en el módulo math.

Ejemplo. Si se desea usar la función coseno, puede escribir:

:5&3 39(P "34&5( L&'

Para cargar todas las funciones del módulo math debe especificarse con un asterisco:

:5&3 39(P "34&5(Q

Ejemplo. Asignar a x  el logaritmo natural de 3  

MU8&F<']5(<.==

Otro formato para importar un módulo usa la siguiente especificación:

"34&5( 3\IE8&

En este caso las funciones incluídas en el módulo deben referenciarse con la notación:

3\IE8&A:E%L"\%

Ejemplo. Importar el módulo math 

"34&5( 39(P

 Asignar a x  el logaritmo de 3  

MU39(PA8&F<39(PA']5(<.==

ESPOL – Python Programación

Page 53: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 53/293

53

Se puede importar un módulo para usarlo con otro nombre

Ejemplo. Importar el módulo math para usarlo con el nombre mt

"34&5( 39(P 9' 3(

 Asignar a x  el logaritmo de 3  

MU3(A8&F<3(A']5(<.==

Un módulo para acceder al reloj: time 

Ejemplo. Mostrar la fecha y hora actual formateadas:5&3 ("3$ "34&5(Q

9'L("3$<=

DH5" ^E8 +, +0;.@;,0 ,>+/D

Ejemplo. Mostrar el tiempo real de ejecución de un proceso:5&3 ("3$ "34&5(Q

L8&LK<=

/A__0++,0_,+_@/0_/$?>1

A A AL8&LK<=

.A`+1/_,`_,0>0>`>1

5.6.6 El sistema de ayuda

Python incluye un sistema de ayuda en línea con la sintaxis:

P$84<D"($3D=

En donde ‘item’ representa el tema para el que se solicita ayuda:

Ejemplo. Si desea conocer el nombre y uso de todas las funciones matemáticas delmódulo math escriba: 

P$84<D39(PD=

Ejemplo. Si desea conocer información del tipo de datos int escriba:

P$84<D"%(D= 

5.6.7 Documentación en linea

Desde la ventana de Python, si presiona la tecla funcional  F1 se tiene acceso a ladocumentación de Python  incorporada en el Shell, incluyendo las características de la

versión instalada, tutorial de uso del lenguaje, la información fundamental de la librería

ESPOL – Python Programación

Page 54: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 54/293

54

estándar de Python, el manual de referencia del Lenguaje Python, etc. como aparece en lapantalla:

Siguiendo las opciones que ofrecen el documento se puede llegar a un nivel de detalle fino

5.6.8 Depuración de programas

Python dispone de un dispositivo de seguimiento y depuración de programas. Para acceder aesta pantalla selecciones Debugger de la opción Debug de la barra del menú.

El uso de estas opciones es útil para usuarios que enfrentan problemas complicados en el

desarrollo de programas complejos.

ESPOL – Python Programación

Page 55: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 55/293

55

5.6.9 Funciones del módulo math

Este módulo provee acceso a las funciones matemáticas comunes:

Las funciones se muestran en el siguiente cuadro en orden alfabético:

Nombre Resultado9J'<M= Valor absoluto9L&'<M=  Arco coseno de x en radianes9L&'P<M=  Arco seno hiperbólico9'"%<M=  Arco seno9'"%P<M=  Arco seno hiperbólico9(9%<M=  Arco tangente9(9%P<M=  Arco tangente hiperbólicoL$"8<M= Entero menor

L&'<M= Coseno trigonométrico de x en radianesL&'P<M= Coseno hiperbólicoI$F5$$'<M= Conversión de radianes a grados$5:<M= Función error$M4<M= Función exponencial:9J'<M= Valor absoluto de un real:9L(&5"98<M= Factorial de un entero positrivo:8&&5<M= Entero mayorF9339<M= Función GammaPN4&(<M-N= Distancia Euclideana8&F<M= Logaritmo natural8&F<M-J= Logaritmo de x, en base b8&F+><M= Logaritmo base 108&F,<M= Logaritmo en base 23&I:<M= Parte decimal y parte entera de x4&O<M-N= x elevado a la potencia y59I"9%'<M= Conversión de radianes a grados'"%<M= Seno trigonométrico de x en radianes'"%P<M= Seno hiperbólico']5(<M= Raíz cuadrada(9%<M= Tangente trigonométrica de x en radiane(5E%L<M= Truncamiento de decimales hacia 0$ Constante e = 2.7182818284590454" Constante = 3.141592653589793

ESPOL – Python Programación

Page 56: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 56/293

56

5.6.10 Traducción de expresiones

En esta sección se realiza una práctica de escritura de expresiones en la notación Python 

Ejemplo. Traduzca al lenguaje Python la expresión aritmética: 

0.75

2

3 2

e 1− 

Traducción:

:5&3 39(P "34&5(Q  Las funciones matemáticas están en el módulo math 

.QQ>A10Q']5(<,=R<$M4<,=?+=  El resultado será un número real 

Ejemplo. Traduzca al lenguaje Python la expresión lógica:

9 ≤ , ∧ J ≠ 3 

Traducción:

9SU, 9%I JVU. El resultado será un valor lógico (G5E$ o  H98'$) 

5.6.11 Ejercicios de traducción de expresiones

Traduzca al lenguaje Python cada expresión.

1) 3tan(x )  

2)3

cos( 0.2) 3

tan( 2 2) 0.2

π + −

− + 

3)2

2 1

sen(2) 0.1 2x 1

+

−+

 

4)  ( b < 5 ∨ c = 0 ) 

5) ( a < b ) ⇒ ( c = 5 ) 

ESPOL – Python Programación

Page 57: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 57/293

57

5.6.12 Un ejemplo introductorio

Para iniciar el aprendizaje del lenguaje Python en esta sección se desarrolla un ejemplo enforma interactiva  en la ventana principal o shell. Se recomienda que el usuario realiceesta práctica en la computadora.

El mismo ejemplo se lo resolverá posteriormente escribiendo un programa en una ventanade edición de Python. Esta práctica permitirá resaltar las diferencias entre el modointeractivo y el modo de programación.

Ejemplo. Describa un algoritmo para calcular el área de un triángulo cuyos lados son:5, 6, y 8 

Algoritmo: Área de un triángulo conocidos sus lados

Variables

a, b, c: Lados del triángulo (Datos conocidos: 5, 6, y 8)s:  Área del triángulo (Es el resultado esperado)t:  Semiperímetro (Valor usado para la fórmula del área

s t(t a)(t b)(t c) 

, (Fórmula del área del triángulo)

siendo t = (a + b + c)/2

Diagrama de flujo

a←

 5b ← 6c ← 8 t ← (a + b + c)/2s ← t(t a)(t b)(t c) 

s

Solución en modo interactivo en la ventana principal o shell de Python

Presione el ícono de Python e ingrese a la ventana principal o Shell. En el borde superiorse muestra un menú de opciones. También se despliega alguna información de la versióndel programa que está siendo utilizado. Al inicio de las siguientes líneas se muestra unaviso para escribir cada instrucción. Este aviso son tres ángulos: >>> 

En esta ventana escriba cada instrucción a la derecha del símbolo >>>  Al final de cadalínea presione la tecla de ingreso. Siga el ejemplo que se muestra en el gráfico a

continuación.

ESPOL – Python Programación

Page 58: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 58/293

58

En esta ventana se ingresan las instrucciones las cuales son interpretadas y ejecutadasinmediatamente en forma parecida a una calculadora. Para conocer el contenido de lasvariables se puede escribir el nombre de la variable.

La figura anterior es tomada de la interacción real con el lenguaje Python. Los colores sonasignados automáticament al escribir las instrucciones pero pueden personalizarse,igualmente el tipo y tamaño de las letras, el tamaño inicial de la ventana, la tabulación, etc.Puede hacerlo seleccionando la opción Configure IDLE  de Options  en el menú de laventana principal.

5.6.13 Práctica computacional en la ventana interactiva

Para afirmar el conocimiento adquirido se realizará una práctica en la pantalla interactivade Python resolviendo problemas básicos. Esta es la pantalla principal o shell.

Ejemplo. Resuelva el siguiente ejercicio en la ventana interactiva de Python 

Si se conoce que el área de un cuadrado es 40 m2, encuentre el valor de la diagonal

Formulación a:  Longitud del lado del cuadradod:  Longitud de la diagonal

a  d

a2 = 40 a 40   (Dato del área) 

d2 = 2 a2  d a 2   (Teorema de Pitágoras)

En la ventana principal de Python se escriben las instrucciones respectivas:

TTT :5&3 39(P "34&5( Q 

TTT 9U']5(</>=

TTT IU9Q']5(<,=

TTT I

@A`//,1+`>````+_  Al escribir la variable d se muestra el resultado calculado.

ESPOL – Python Programación

Page 59: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 59/293

59

5.6.14 Ejercicios de resolución de problemas en la ventana interactiva

Para cada ejercicio escriba la formulación necesaria. Después escriba las instrucciones enla ventana principal o shell de Python y obtenga la respuesta.

1) Calcule el área total de un bloque de dimensiones 20, 30, 40 cm

2) Calcule el área total de un cilindro de radio 5 y altura 4 metros

3) Calcule el área de un triángulo rectángulo cuyos diagonal mide 5 cm. y tiene unángulo interno de 40 grados.

4) El costo mensual c en dólares al fabricar una cantidad x  de artículos está dado por:c = 50 + 2x, mientras que el ingreso por la venta de x artículos está dada por: v = 2.4x 

a) Calcule la ganancia que se obtendrá al fabricar y vender 400 artículos

b) Determine cuantos artículos deben fabricarse y venderse para que el ingreso igualea los gastos

5)  Un modelo de crecimiento poblacional está dado por f(t) = kt + 2e0.1t, siendo k  unaconstante que debe determinarse y t es tiempo en años. Se conoce que f(10)=50.Determine la población en el año 25

6) Un ingeniero desea tener una cantidad de dólares acumulada en su cuenta de ahorrospara su retiro luego de una cantidad de años de trabajo. Para este objetivo planeadepositar un valor mensualmente. Suponga que el banco acumula el capital mensualmentemediante la siguiente fórmula:

n(1 x) 1a p

x

 

=

 

a: valor acumulado luego de n depósitos mensualesp: valor de cada depósito mensualx: valor nominal del interés mensualn: número de depósitos mensuales realizados

a) Calcule el valor acumulado en 15 años depositando mensualmente cuotas de 300 conun interés anual de 0.04

b) Determine el valor de la cuota que debe depositar mensualmente si desea reunir200000 en 20 años suponiendo que el interés anual es 0.04

c) Determine cuantos depósitos mensuales de 400 debe realizar para reunir 250000 conuna tasa de interés anual de 0.04

ESPOL – Python Programación

Page 60: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 60/293

Page 61: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 61/293

Page 62: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 62/293

62

5.7.3 Instrucción para ingreso de datos

Esta instrucción se usa para describir la acción de ingresar algún valor para una variabledesde fuera del algoritmo cuando éste sea ejecutado. Esta instrucción permite que losdatos no requieran ser asignados dentro del algoritmo y así puedan realizarse pruebas con

diferentes datos sin tener que modificar las instrucciones del programa.

Notación algorítmica

v Ingresar un valor para la variable v desde el teclado

Seudo código

Entrar v

Lenguaje Python

aU"%4E(<D3$%'9C$ D=

Esta instrucción puede incluir un mensaje que se mostrará al ejecutar el programa en laventana principal o shell para indicar que es el momento de ingresar el dato. Este mensajepuede escribirse entre comillas simples o entre comillas dobles.

Python recibe el valor ingresado como un dato de tipo texto. Si se desea asignar otro tipode dato a este valor, es necesario aplicar una conversión de tipo:

Para convertir el texto recibido a un valor entero:

aU"%(<"%4E(<D3$%'9C$ D==

Para convertir el texto recibido a un valor decimal (o de punto flotante):

aU:8&9(<"%4E(<D3$%'9C$ D==

Ejemplos.

Ingresar un dato tipo texto

'U"%4E(<#c%F5$'$ 'E %&3J5$; #=

Ingrese un dato (número entero) y conviértalo a tipo numérico entero

%U"%(<"%4E(<#c%F5$'$ 89 L9%("I9I I$ P"C&'; #==

Ingrese un dato (número entero o real) y conviértalo al tipo numérico real

4U:8&9(<"%4E(<#c%F5$'$ 'E 4$'& $% KFA; #==

Si la conversión no puede hacerse, se producirá un error de conversión de tipo.

ESPOL – Python Programación

Page 63: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 63/293

Page 64: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 64/293

64

5.7.5 Documentación de los programas

Es una buena práctica de programación incluir comentarios  en los programas paradocumentar su desarrollo.

Para incluir comentarios o anotaciones en el programa inicie la línea con el símbolo #

Los comentarios también pueden abarcar varias líneas. Para estas anotaciones escriba alinicio de la primera línea del comentario tres comillas simples o dobles  y tambiénescríbalas al final de la última linea del comentario.

f $%&' (% )*' +,*(' -( ./0(*&'12/ 

DDD

$%&'% +,*('%

%/* ./0(*&'12/%

DDD

Se pueden usar líneas en blanco para mejorar la claridad de los programas. Python  lasagrega pero no realiza alguna acción adicional.

5.7.6 Encolumnamiento de instrucciones

En el lenguaje Python se definen los bloques encolumnando las instrucciones a la derecha

debajo de la instrucción de control en cuyo ámbito estarán incluidas. A diferencia de otroslenguajes, Python no tiene símbolos o palabras especiales para delimitar un bloque.

Las instrucciones que pertenecen a un bloque deben escribirse desplazadas al menos unacolumna a la derecha dentro del bloque y todas las instrucciones deben tener el mismoencolumnamiento. Python sugiere el encolumnamiento al momento de escribir lasinstrucciones del programa. Es importante constatar el encolumnamiento de lasinstrucciones para asegurar su pertenencia o exclusión de un bloque.

El encolumnamiento de las instrucciones para definir el ámbito o alcance de las estructurasde control es muy simple de aplicar y entender, aporta claridad a la escritura de losprogramas y es un componente importante de la metodología de la ProgramaciónEstructurada.

ESPOL – Python Programación

Page 65: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 65/293

65

5.7.7 El primer programa

Cuando un usuario enfrenta a un nuevo lenguaje, es tradicional que su primer programasea el clásico “Hola mundo”. Este programa consiste en hacer que el computadormuestre en la pantalla un saludo. En lenguajes “duros” como C++ o Java, esta simple

actividad involucra varios detalles que para un usuario novicio es difícil entender. EnPython escribir y probar programas es una actividad simple y amigable

El programa “Hola mundo” en Python

Primero ingrese a la ventana principal o Shell de Python activando el programa. En estaventana presione file  en la barra del menú y elija la opción New File. Se abrirá unaventana de edición.

Ventana interactiva o Shell Ventana de edición

Escriba en la ventana de edición de Python la instrucción

45"%(<Dg&89 3E%I&D=

 Almacene el contenido de la ventana de edición. Este contenido es su primer programa.Para almacenar el programa presione file en la barra del menú de la ventana de edición yelija la opción save. Python le pedirá un nombre. Escriba algún nombre para su programasin dejar espacios intermedios Para probar o ejecutar el programa elija la opción run de laventana de edición o presione la tecla F5. El siguiente gráfico muestra el resultado queaparece en la pantalla interactiva.

ESPOL – Python Programación

Page 66: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 66/293

66

El segundo ejemplo será convertir en un programa el ejemplo del triángulo que sedesarrolló interactivamente en la ventana interactiva de Python.  Los datos seráningresados desde el teclado para realizar varias pruebas. Primero se codificará elprograma con las reglas indicadas anteriormente y luego se lo trasladará a la ventana deedición. El ejemplo permitirá entender la ventaja de escribir programas.

Ejemplo. Escriba en el lenguaje Python un programa para traducir el algoritmo que calculael área de un triángulo ingresando el valor de sus tres lados

Algoritmo: Área de un triángulo dados sus lados

Variablesa, b, c: Lados del triángulo (Datos desconocidos)s:  Área del triángulo (Es el resultado esperado)t:  Semiperímetro (Valor usado para la fórmula del área

s t(t a)(t b)(t c) 

, (Fórmula del área del triángulo)

siendo t = (a + b + c)/2

Diagrama de flujo

a, b, c 

t ← (a + b + c)/2

s ← t(t a)(t b)(t c) 

s

Traducción del algoritmo al lenguaje Python

fh5&F5939 L98LE895 $8 )5$9 I$ E% (5")%FE8&

:5&3 39(P "34&5( ']5(

9U:8&9(<"%4E(<Dh5"3$5 89I&; D==

JU:8&9(<"%4E( <D!$FE%I& 89I&; D==

LU:8&9(<"%4E( <DG$5L$5 89I&; D==

(U<9BJBL=R,

'U']5(<(Q<(?9=Q<(?J=Q<(?L==

45"%(<D[$'4E$'(9; D-'= 

 Al escribir las instrucciones del algoritmo en una página, no es necesario usar colorescomo se muestran en el cuadro anterior. Pero al trasladar el programa a una ventana dePython los colores aparecen automáticamente al escribir las instrucciones.

Estos colores pueden personalizarse, igualmente el tipo y tamaño de las letras, el tamañoinicial de la ventana, la tabulación, etc. Puede hacerlo seleccionando la opción ConfigureIDLE de Options en el menú de la ventana principal. Se sugiere no modificar ni el tipo de

letra ni la tabulación.

ESPOL – Python Programación

Page 67: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 67/293

67

Escriba el programa en la ventana de edición de Python. Elija la opción save o save as y

escriba un nombre para su programa. Python agrega la extensión .py al nombre.

Para probar o ejecutar el programa elija la opción run de la ventana de edición en la que

escribió el programa, o presione la tecla F5.

El ingreso de los datos y la salida de resultados se realiza en la ventana principal o Shell

como se muestra en la siguiente figura tomada de la interacción real con Python.

Ventana de principal o Shell Ventana de edición con el programa

La ventaja de un programa es su independencia con respecto a los datos. Los datos

entran desde fuera del programa cuando es ejecutado. De esta manera el programa no

necesita modificarse para realizar pruebas. Al estar almacenado se lo puede cargar y

ejecutar en cualquier momento y no necesita escribir las instrucciones nuevamente.

Para realizar cambios en el programa que está abierto en la ventana de edición, posicione

el cursor en el lugar respectivo, realice los cambios, almacene nuevamente el archivo y

ejecútelo. Puede cargar y modificar los programas que están almacenados.

Los módulos (programas y funciones) son almacenados en una carpeta identificada con el

nombre  idlelib ubicada dentro de  lib  en la carpeta Python34. Python  usa esta carpeta

como dispositivo de almacenamiento normal de programas y archivos. Si los módulos se

almacenan en otra carpeta, no se los puede acceder en forma directa y no aparecen en el

directorio de módulos, aunque Python si los incluye en la lista de archivos recientes de

donde se los puede cargar y ejecutar.

Se puede ejecutar desde la ventana interactiva un programa que está almacenado con

algún nombre en la carpeta idlelib. No es necesario abrir el programa en la ventana de

edición, solamente debe escribir la siguiente instrucción en la ventana interactiva. Antes de

cada ejecución debe activar Restart Shell de la opción Shell del menú de Python.

!!! #$%&'( ) sustituya n  por el nombre del programa almacenado 

En la ventana principal oshell se realiza laejecución del programa

En la ventana deedición se escribe elprograma y seordena su e ecución

ESPOL – Python Programación

Page 68: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 68/293

68

5.7.8 Ejercicios de programación con las instrucciones básicas

Para cada ejercicio escriba y pruebe un programa en la ventana de edición de Python.

1.  Dados el radio y altura de un cilindro calcule el área total y el volumen

2. Se tiene un recipiente cilíndrico con capacidad en litros. Su altura es un dato en metros.

Determine el diámetro de la base

3.  Dadas las tres dimensiones de un bloque rectangular calcule y muestre su área total y

su volumen.

4. La siguiente fórmula proporciona el enésimo término u de una progresión aritmética: 

u = a + (n − 1) r  

en donde a es el primer término, n es el la cantidad de términos y r  es la razón entre dos

términos consecutivos. Calcular el valor de r dados u, a, n 

5.  En el ejercicio anterior, calcular el valor de: n dados u, a, r  

6.  El examen de una materia es el 70% de la nota total. Las lecciones constituyen el 20%

y las tareas el 10% de la nota total. Ingrese como datos la nota del examen calificado

sobre 100 puntos, la nota de una lección calificada sobre 10 puntos, y las notas de tres

tareas calificadas cada una sobre 10 puntos. Calcule la calificación total sobre 100 puntos.

7. Un modelo de crecimiento poblacional está dado por: n = 5t + 2e0.1t

, en donde n es el

número de habitantes, t es tiempo en años. Se desea conocer el número de habitantes

que habrían en los años 5, 10 y 20. Obtenga los resultados ejecutando tres veces el

programa.

8. Un ingeniero desea tener una cantidad de dólares acumulada en su cuenta de ahorros

para su retiro luego de una cantidad de años de trabajo. Para este objetivo planea

depositar un valor mensualmente. Suponga que el banco acumula el capital mensualmente

mediante la siguiente fórmula:

n(1 x) 1A P

x

 

=

, en donde

A: Valor acumulado

P: Valor de cada depósito mensualn: Cantidad de depósitos mensuales

x: Tasa de interés mensual

Calcule el valor acumulado ingresando como datos valores para P, n, x

9. Una empresa produce fertilizantes. Cada mes el ingreso por ventas en miles de dólares

se describe con v = 0.4x (30 - x)  mientras que el costo de producción en miles de dólares

es c = 5 + 10 ln(x), siendo x  la cantidad producida en toneladas, 1<x<30.

Dado un valor para x, determine el valor del ingreso neto.

ESPOL – Python Programación

Page 69: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 69/293

69

5.7.9 Operadores para aritmética entera

 Algunas aplicaciones numéricas incluyen operaciones aritméticas que requieren elcociente entero de la división entre dos números y el resíduo de esta división. En ellenguaje Python estas operaciones están definidas con símbolos especiales

Los operadores y i

El operador trunca los decimales del resultado de la división y entrega la parte entera.

Ejemplo.

TTT LU,> 

.

TTT L

_

El operador % entrega el módulo aritmético (residuo de la división entre dos enteros).

Ejemplo.

TTT 5U,>i_

TTT 5

,

Ejemplo. Dado un número entero de dos cifras, escriba un programa en Python parasumar las cifras.

Solución

Variablesn: dato entero de dos cifrasd: dígito de las decenasu: dígito de las unidadess: suma de dígitos

Programa

f!E39 I$ I&' L":59'%U"%(<"%4E(<Dc%F5$'$ E% $%($5&; j==

IU% 

+>

EU%i+>

'UIBE

45"%(<D[$'4E$'(9; D-'=

h5E$J9 I$8 45&F5939

TTT

c%F5$'$ E% $%($5&; 1. [$'4E$'(9; +>

ESPOL – Python Programación

Page 70: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 70/293

Page 71: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 71/293

71

5.8 Decisiones en Python

Las decisiones son operaciones computacionales que permiten condicionar la ejecución deinstrucciones dependiendo de una expresión que al evaluarla puede tomar únicamente losvalores logicos: verdadero o falso, G5E$  o H98'$  en la notación de Python. 

5.8.1 Ejecución condicionada de un bloque de instrucciones

Esta estructura de control se usa para condicionar la ejecución de un bloque deinstrucciones utilizando como criterio el resultado de una condición como se muestra en lasiguiente representación gráfica: 

Notación algorítmica

F Condición

V

P

 Al entrar a esta estructura se evalúa la condición. Si el resultado es verdadero (V) seejecutarán las instrucciones del bloque P  caso contrario, si el resultado es falso (F) lasinstrucciones del bloque no serán ejecutadas. En ambos casos el algoritmo continua abajodel bloque.

Lenguaje Python

":  3/*-2.24*; 

5*%&1)..24* (* (+ 6+/7)( h 

5*%&1)..24* (* (+ 6+/7)( h A A A

5*%&1)..24* (* (+ 6+/7)( h

Observe la relación entre la estructura de control del lenguaje algorítmico y la instruccióndel lenguaje computacional. Ambas describen la misma acción. El color  de la palabra claveif para decisiones de Python es el color estándar del IDLE (interfaz para interactuar conPython), pero se lo puede cambiar activando options.

El bloque de la estructura de decisión incluye todas las instrucciones que estáncondicionadas. En el diagrama de flujo está claramente delimitado con las líneas de flujo.

ESPOL – Python Programación

Page 72: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 72/293

72

El lenguaje Python  no tiene símbolos especiales para cerrar el bloque de instruccionescondicionadas.

El bloque o ámbito de la decisión se define encolumnando las instrucciones que se deseancondicionar. Las instrucciones deben escribirse en las siguientes líneas desplazadas al

menos una columna a la derecha de la palabra if .

Todas las instrucciones deben tener el mismo encolumnamiento. Python sugiere elencolumnamiento al momento de escribir las instrucciones del programa.

Para escribir las expresiones que condicionan el bloque se pueden usar operadoresrelacionales y conectores lógicos. Para que una expresión pueda ser usada como unacondición, las variables incluidas en la expresión deben tener asignado algún valor, casocontrario será un error pues la condición no podría evaluarse.

Ejemplo. MS. 9%I (T, es una expresión condicional y su valor (verdadero o falso)dependerá del contenido actual de las variables x  y t

Ejemplo. Describa en notación Python  como reducir en 10%  el valor que contiene lavariable p,  en caso de que su valor actual sea mayor a 40. Despues obtenga elresultado de la multiplicación de n por  el valor de  p  (con el valor inicial o corregido).

":  4T/>;

4U>A`Q4

(U%Q4

ESPOL – Python Programación

Page 73: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 73/293

73

Ejemplo. Describa en Python un programa para resolver el siguiente problema:

Calcular el valor total que una persona debe pagar por la compra de llantas en un almacénque tiene la siguiente promoción: Si la cantidad de llantas comprada es mayor a 4, elprecio unitario tiene un descuento de 10%. El programa debe ingresar como datos la

catidad de llantas y el precio inicial de cada llanta. Mediante una comparación el programadeberá aplicar el descuento.

Solución

Variablesn: Cantidad de llantasp: Precio unitariot: Valor a pagar

Programa 

fk&3459 I$ 889%(9' L&% I$'LE$%(&

%U"%(<"%4E(<Dk9%("I9I I$ 889%(9'; D==

4U:8&9(<"%4E(<Dh5$L"& E%"(95"&; D==

": %T/;

4U>A`Q4

(U%Q4

45"%(<Dl98&5 9 49F95; D-(=

Prueba del programaTTT

k9%("I9I I$ 889%(9'; . 

h5$L"& E%"(95"&; @> 

l98&5 9 49F95; ,/>A>

TTT

k9%("I9I I$ 889%(9'; 0 

h5$L"& E%"(95"&; @> 

l98&5 9 49F95; ._>A>

TTT

ESPOL – Python Programación

Page 74: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 74/293

74

5.8.2 Ejecución selectiva entre dos bloques de instrucciones

Esta estructura de control del flujo del algoritmo evalúa la condición y dependiendo delresultado realiza las instrucciones incluidas en una de las dos opciones

F Condición

V

P  Q 

 Al entrar a esta estructura, se evalúa la condición. Si el resultado es verdadero (V) seejecutará el bloque P asociado al valor verdadero, caso contrario, si el resultado es falso(F) se ejecutará el bloque Q. El algoritmo continua abajo, despues de ejecutar alguno delos dos bloques.

Lenguaje Python

": 3/*-2.24*; 2*%&1)..24* (* (+ 6+/7)( h

2*%&1)..24* (* (+ 6+/7)( h

A A A

2*%&1)..24* (* (+ 6+/7)( h

$8'$; 

2*%&1)..24* (* (+ 6+/7)( m

2*%&1)..24* (* (+ 6+/7)( m

A A A

2*%&1)..24* (* (+ 6+/7)( m

Es importante utilizar el encolumnamiento establecido en el lenguaje Python. Lasinstrucciones deben encolumnarse a la derecha para definir cuales pertenecen a cada unade las dos opciones. Todas deben tener el mismo encolumnamiento

ESPOL – Python Programación

Page 75: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 75/293

75

Ejemplo. Describa en notación algorítmica como asignar a la variable a  el mayor entredos valores almacenados respectivamente en las variables a y  b

": 9TUJ;

3U9

$8'$; 3UJ

Ejemplo. Describa en lenguaje Python un programa para resolver el siguiente problema:

Para el pago semanal a un obrero se consideran los siguientes datos: horas trabajadas,tarifa por hora y descuentos. Si la cantidad de horas trabajadas en la semana es mayor a40, se le debe pagar las horas en exceso con una bonificación de 50% adicional al pagonormal.

Solución

Variablesc: Cantidad de horas trabajadas en la semanat: Tarifa por horad: Descuentos que se aplican al pago semanalp: Pago que recibe el obrero

Programa

fk)8LE8& I$8 49F& '$39%98

LU:8&9(<"%4E(<Dg&59' (59J9C9I9'; D==

(U:8&9(<"%4E(<DG95":9 4&5 P&59; D==

IU:8&9(<"%4E(<Dn$'LE$%(&' D==

": LSU/>;

4ULQ( ? I

$8'$;

4U/>Q( B +A0Q(Q<L ? />= ? I

45"%(<Dl98&5 9 49F95D- 4=

Prueba del programa

TTTg&59' (59J9C9I9'; /0 

G95":9 4&5 P&59; / 

n$'LE$%(&' /> 

l98&5 9 49F95 +0>A>

TTT

ESPOL – Python Programación

Page 76: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 76/293

76

5.8.3 Decisiones anidadas

Para describir en Python la selección de acciones mediante condiciones que pueden serdiferentes se las puede estructurar con decisiones incluidas dentro de otras decisiones conel siguiente formato:

": 3/*-2.24* 8; 

5*%&1)..2/*(%

$8'$; 

": 3/*-2.24* 9; 

5*%&1)..2/*(% 

$8'$;

": 3/*-2.2:* ;;

5*%&1)..2/*(%

$8'$; 

A A A

La ejecución se realiza de arriba hacia abajo. Si se cumple alguna condición de la cláusulaif , la ejecución continuá en ese bloque, caso contrario, la ejecución continúa en lasinstrucciones incluidas en la cláusula else. Cada cláusula if y cada cláusula else puedenabrir otra ruta de decisiones.

Las instrucciones están condicionadas mediante el encolumnamiento asociado a cadacláusula if y a cada cláusula else.

Es necesario encolumnar las instrucciones con cuidado para establecer con claridad ladependencia a cada cláusula if y a cada cláusula else.

El algoritmo continua abajo al completarse la ruta de las decisiones.

ESPOL – Python Programación

Page 77: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 77/293

77

Ejemplo. Describa en Python un programa para resolver el siguiente problema:

Durante el semestre un estudiante debe realizar tres evaluaciones. Cada evaluación tieneuna calificación y la nota total que recibe el estudiante es la suma de las dos mejorescalificaciones

Escriba un programa que lea las tres calificaciones y determine cual es la calificación totalque recibirá el estudiante.

Solución

Variablesa, b, c:  Variables que recibirán los datos de las tres calificacionest: Variable con la suma de las dos mejores calificaciones

Solamente hay tres casos posibles y son excluyentes, por lo que se usarán dos decisiones

anidadas para verificar dos casos y el tercero será la cláusula else.

Programa

f !E39 I$ L98":"L9L"&%$'

9U"%(<"%4E(<Dc%F5$'$ 'E 45"3$59 L98":"L9L"\%; D==

JU"%(<"%4E(<Dc%F5$'$ 'E '$FE%I9 L98":"L9L"\%; D==

LU"%(<"%4E(<Dc%F5$'$ 'E ($5L$59 L98":"L9L"\%; D==

": 9TUL 9%I JTUL;

(U9BJ

$8'$;

": 9TUJ 9%I LTUJ;

(U9BL

$8'$;

(UJBL

45"%(<D!E L98":"L9L"\% (&(98 $'; D-(=

Prueba del programa

TTT

c%F5$'$ 'E 45"3$59 L98":"L9L"\%; 10 c%F5$'$ 'E '$FE%I9 L98":"L9L"\%; _@ 

c%F5$'$ 'E ($5L$59 L98":"L9L"\%; @, 

!E L98":"L9L"\% (&(98 $'; +01

TTT

ESPOL – Python Programación

Page 78: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 78/293

78

Ejemplo.  Describa en Python  la siguiente decisión para pagar una cuenta en unrestaurante: Si la cuenta es menor a $50 pago en efectivo. Sinó, si es de $50 hasta $100pagaré con el celular(dinero electrónico). Pero si es mayor a 100 hasta $200, usaré latarjeta de débito. Caso contrario, pagaré con la tarjeta de crédito.

Solución

Variablesc: Valor de la cuenta a pagar

En la solución se usarán decisiones anidadas para seleccionar el caso que corresponda alvalor de la cuenta

Programa

f h9F& I$ E%9 LE$%(9 

LU:8&9(<"%4E(<jc%F5$'$ $8 a98&5 I$ 89 LE$%(9; j== ": LS0>;

45"%(<Dh9F& $% $:$L("a&D=

$8'$;

": LTU0> 9%I LSU+>>;

45"%(<Dh9F& L&% $8 L$8E895 <I"%$5& $8$L(5\%"L&o=

$8'$;

": LT+>> 9%I LSU,>>;

45"%(<Dh9F& L&% 89 (95C$(9 I$ IpJ"(&D=

$8'$; 

45"%(<Dh9F& L&% 89 (95C$(9 I$ L5pI"(&D=

Prueba del programa

TTT

c%F5$'$ $8 a98&5 I$ 89 LE$%(9; +,>A0> 

h9F& L&% 89 (95C$(9 I$ IpJ"(&

TTT

ESPOL – Python Programación

Page 79: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 79/293

79

5.8.4 Decisiones consecutivas

Si las decisiones utilizan condiciones similares y con valores diferentes, se las puedeestructurar en forma vertical consecutiva. Esta estructura es más clara que las decisonesanidadas que requieren encolumnar las instrucciones para definir la jerarquía de las

decisiones. El formato de las decisiones consecutivas en Python es:

": 3/*-2.24* 8; 

5*%&1)..24*(% 

$8": 3/*-2.24* 9; 

5*%&1)..2/*(% 

$8": 3/*-2.24* ;; 

5*%&1)..2/*(% 

A A A

$8'$; 

5*%&1)..2/*(%

Las instrucciones están condicionadas mediante el encolumnamiento asociado aCondición 1, Condición 2, Condición 3, etc., Si se cumple alguna de esta condiciones, se

ejecutan las instrucciones condicionadas. Si no se cumple alguna de estas condiciones, seejecutaràn las instrucciones asociadas a else. Este último componente es opcional.

El algoritmo continua abajo, despues de ejecutar alguno de los bloques de instrucciones.

La mayoría de problemas con decisiones múltiples pueden resolverse con cualquiera deestos dos tipos decisiones: decisiones anidadas o decisiones consecutivas.

ESPOL – Python Programación

Page 80: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 80/293

80

Ejemplo. Describa en Python un programa para resolver el siguiente problema:

Leer el número de llantas de una compra y mostrar el valor que debe pagarse en un localque las vende con la siguiente política: Si se compran menos de 5 llantas, el preciounitario es 80. Si se compran 6 o 7, el precio unitario es 70, y si se compran más de 7

llantas, el precio unitario es 60.

Solución

Variablesn: Cantidad de llantas compradasp: Precio unitario (80, 70, o 60)t: Valor de la compra

Programa

f k&3459 I$ 889%(9' L&% I$'LE$%(&%U"%(<"%4E(<Dk9%("I9I I$ 889%(9'; D==

": %S0;

4U@>

$8": %UU0 &5 %UU_;

4U1>

$8'$;

4U_>

(U%Q4

45"%(<Dl98&5 9 49F95; D- (=

Prueba del programa

TTT

k9%("I9I I$ 889%(9'; _ 

l98&5 9 49F95; /,>

TTT

k9%("I9I I$ 889%(9'; / 

l98&5 9 49F95; .,>

TTT

k9%("I9I I$ 889%(9'; @ l98&5 9 49F95; /@>

TTT

ESPOL – Python Programación

Page 81: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 81/293

81

Ejemplo.  El precio de una pizza depende de su tamaño según la siguiente tabla:

Tamaño Precio1 $52 $8

3 $12

Cada ingrediente adicional cuesta $1.5.

Escriba un programa en Python que lea el tamaño de la pizza y el número de ingredientesadicionales y muestre el precio que debe pagar

Solución

Variablest: Tamaño de pizza

n: Número de ingredientesp: Valor a pagar

Programa

fk&3459 I$ E%9 4"XX9

(U"%(<"%4E(<DG939q& I$ 89 4"XX9; D== 

%U"%(<"%4E(<D7r3$5& I$ "%F5$I"$%($' 9I"L"&%98$'; D== 

": (UU+; 

4U0B+A0Q% 

$8": (UU,; 

4U@B+A0Q% 

$8": (UU.; 

4U+,B+A0Q% 

$8'$; 

4U> 

45"%(<Dl98&5 9 49F95; D- 4= 

Prueba del programa

TTTG939q& I$ 89 4"XX9; , 

7r3$5& I$ "%F5$I"$%($' 9I"L"&%98$'; . 

l98&5 9 49F95; +,A0

TTT

ESPOL – Python Programación

Page 82: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 82/293

82

5.8.5 Ejercicios de programación con decisiones

Para cada ejercicio escriba y pruebe un programa en la ventana de edición de Python.

1. Dados el radio y altura de un cilindro, si la altura es mayor al radio calcule y muestre el

valor del volumen del cilindro, caso contrario muestre el valor del área del cilindro.

2. Dados el radio y altura de un cilindro, si la altura es mayor al radio calcule y muestre elvalor del volumen, caso contrario muestre el mensaje: 'Error'

3.  Dadas las dimensiones de un bloque rectangular, calcule las diagonales de las trescaras diferentes. Muestre el valor de la mayor diagonal.

4. Lea un número de dos cifras. Determinar si la suma de ambas cifras es un número par oimpar. Muestre un mensaje

5. Lea un número. Determine si es entero y múltiplo de 7

6. Lea la cantidad de Kw que ha consumido una familia y el precio por Kw. Si la cantidades mayor a 700, incremente el precio en 5% para el exceso de Kw sobre 700. Muestre elvalor total a pagar.

7.  Lea un valor de temperatura t y un código p que puede ser 1  o 2. Si el código es 1 convierta la temperatura t de grados f  a grados c con la fórmula c=5/9(t-32). Si el códigoes 2 convierta la temperatura t de grados c a f  con la fórmula: f=32+9t/5, caso contrariomuestre un mensaje de error.

8. Dadas las tres calificaciones de un estudiante, encuentre y muestre su calificación final,la cual es la suma de las dos mejores calificaciones.

9. Dadas las tres calificaciones de un estudiante, encuentre y muestre la calificación masalta.

10. Dados los tres lados de un triángulo determine su tipo: Equilátero, Isòsceles, oEscaleno

11.  Dadas la abscisa y ordenada de dos puntos, calcule su distancia al origen y determine

cual de los dos puntos (primero o segundo) está más cerca del origen. La respuestadeberá ser un mensaje: ‘Punto 1’ o ‘Punto 2’

Punto Abscisa Ordenada1 a b2 c d

Fórmula de la distancia del punto (x, y) al origen: 2 2x y  

ESPOL – Python Programación

Page 83: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 83/293

83

12. Lea la cantidad de Kw que ha consumido una familia y el precio por Kw. Si la cantidades mayor a 700, incremente el precio en 5% para el exceso de Kw sobre 700. Muestre elvalor total a pagar.

13.  Juan, Pedro y José trabajan en una empresa que paga semanalmente. Ingrese para

cada uno los siguientes datos del trabajo semanal: horas trabajadas, salario por hora, ydescuentos. Calcule el pago semanal que recibirá cada uno y determine cual de los tresrecibirá el mayor pago semanal. No considere el pago de horas extras.

14. Lea las dimensiones de un bloque rectangular (largo, ancho y altura del bloque), y eldiámetro de un agujero. Determine si es posible que el bloque pueda pasar por el agujero.Sugerencia: Compare el diámetro del agujero con cada una de las diagonales del bloque.Si en alguna comparación el diámetro tiene un valor menor a la diagonal muestre elmensaje: ‘Si pasa por el agujero’, caso contrario muestre ‘No pasa por el agujero’.

15. Un código de tres cifras debe cumplir la siguiente regla para que sea vàlido: La tercera

cifra debe ser igual al mòdulo 10 del producto de las dos primeras cifras. Escriba unprograma que lea un código y verifique si cumple la regla anterior. Muestre un mensajecorrespondiente.

Ej. 384 es un código vàlido pues el módulo de 3x8 en 10 es igual a 4

16. El número de pulsaciones que debe tener una persona por cada 10 segundos deejercicio aeróbico se calcula con la fórmula:

Género femenino (1): número de pulsaciones = (220 - edad en años)/10Género masculino (2): número de pulsaciones = (210 - edad en años)/10

Lea la edad y el género y muestre el número de pulsaciones.

17. El índice de masa corporal IMC de una persona se calcula con la fórmula IMC=P/T2 endonde P es el peso en Kg. y T es la talla en metros.

Lea un valor de P y de T, calcule el IMC y muestre su estado según la siguiente tabla:IMC Estado

Menos de 18.5 Desnutrido[18.5 a 25.5] Peso Normal

Más de 25.5 Sobrepeso

18. Otro reporte de salud muestra una tabla diferente del índice de masa corporal IMC deuna persona que se calcula con la fórmula IMC=P/T2 en donde P es el peso en Kg. y T esla talla en metros.

Lea un valor de P y de T, calcule el IMC y muestre su estado según la siguiente tabla:IMC Estado20-24.9 Normal25-29.9 Sobrepeso30-34.9 Obesidad Grado 1

35-39.9 Obesidad Grado 2Mayor a 40 Obesidad Grado 3

ESPOL – Python Programación

Page 84: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 84/293

84

19. En un concurso hay tres jueces. La opinión del juez es 1 si está a favor y 0 si está encontra. Para que un participante pueda continuar en el concurso debe tener al menos dosvotos favorables. Escriba un algoritmo que lea los votos de los tres jueces y muestre elresultado mediante un mensaje: CONTINUA o ELIMINADO. No sume votos. Debecompararlos.

20. Dadas las dimensiones de un bloque rectangular, calcule y muestre el área de la carade mayor dimensión.

21. Desarrolle un algoritmo que lea un dato con la cantidad de días. El resultado debe serel equivalente en meses, semanas y días sobrantes. Suponga que cada mes tiene treintadías. Ejemplo. Si el dato es 175 el resultado será 5 meses, 3 semanas y 4 días

22. Se conocen tres de los cuatro números de una matriz cuadrada de tamaño 2. Leaestos tres números y determine cual debe ser el cuarto número para que el determinantede la matriz sea igual a 0.

23.  Lea un número x  y los números a, b. Suponga que a<b. y que x ≠ a, x ≠ b.Determine en que lugar se encuentra el número x, antes de a, entre a y b o después deb. Muestre un mensaje.

24. Lea las tres calificaciones que obtuvo un estudiante en una materia. No suponga queestos tres números están ordenados. Describa como ordenarlos en forma ascendente ymuestre los números ordenados 

25.  Lea los números de matrícula de tres estudiantes que toman la materia A y losnúmeros de matrícula de tres estudiantes que toman la materia B. Encuentre cuantosestudiantes que toman la materia A, también toman la materia B.

26. Un almacén ofrece un producto con descuento según la siguiente tabla:Kilos comprados Precio por kilo

Menos de 3 $2.4[3 a 6) $2.3[6 a 10) $2.1Más de 10 $1.85

Lea la cantidad comprada y determine cuanto debe pagar.

27. Modifique el siguiente algoritmo de tal manera que los conectores lógicos (∧

,∨

,

  )sean eliminados con instrucciones que contengan solamente condiciones simples

+  Y$$5 9- J- L

,  M ← >

.  N ← >

/  !" <9S, ∧ JT+= ∨ <LT.=

0  M ← 9 B J

_  !"%&

1  M ← J?L

@  H"%

`  W&'(595 M- N

ESPOL – Python Programación

Page 85: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 85/293

85

28. Considere el siguiente algoritmo

+  Y$$5 9- J- L

,  !" 9SJ '98($ 9 89 8s%$9 /

.  !98($ 9 89 8s%$9 0/  !" JTL '98($ 9 89 8s%$9 _

0  !98($ 9 89 8s%$9 1

_  W&'(595 9

1  W&'(595 J

@  W&'(595 L

a) Construya un diagrama de flujo ordenado y simplificado que sea equivalente alalgoritmo propuesto.

b) Interprete el diagrama de flujo y codifíquelo en notación Python 

ESPOL – Python Programación

Page 86: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 86/293

86

5.9 Números aleatorios

Los números aleatorios son valores que están en un rango de posibles resultados pero nose puede predecir cual es el resultado que se obtendrá al tomar alguno. Por ejemplo, allanzar un dado no podemos afirmar cual resultado se obtendrá entre los posibles seis

números posibles.

Los lenguajes computacionales tiene funciones especiales para generar númerosaleatorios, útiles para muchas aplicaciones de interés.

El módulo random  es una librería de Python  que contiene funciones para generarnúmeros aleatorios. Para acceder a este módulo especial se lo debe cargar con lasiguiente directiva:

:5&3 59%I&3 "34&5(Q 

 Algunas funciones básicas del módulo random: 

a)  Generar un número aleatorio real en el intervalo semi abierto [0, 1) 

59%I&3< =

b)  Generar un número aleatorio entero en el intervalo [a, b] incluyendo los extremos

59%I"%(<9- J=

c) Iniciar una secuencia de números aleatorios con una semilla dada

'$$I<%=

La semilla n, es un entero positivo. Es un valor que usa el generador de númerosaleatorios para construir la secuencia. El uso de seed es opcional. Si se especificadebe escribirse al inicio. Esto hará que la secuencia se repita en cada prueba.

d)  Elegir aleatoriamente un elemento de una lista

LP&"L$<'= 

e)  Desordenar aleatoriamente los elementos de una lista

'PE::8$<'=En estas instrucciones s  representa una lista cuyos elementos  pueden tenerdiferente tipo, como se verá en una sección más adelante.

f)  Generar una número aleatorio con distribución Normal o Gaussiana

F9E''<3E- '"F39=

3E  es la media, '"F39  es la desviación estándar

g)  Obtener una muestra de k elementos diferentes de una población (secuencia) p.

Las secuencias se estudiarán en un capitulo posterior.

'9348$<4- K=

ESPOL – Python Programación

Page 87: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 87/293

87

Ejemplos. Uso de las funciones del módulo  random en la ventana interactiva

TTT :5&3 59%I&3 "34&5(Q

TTT MU59%I&3<=

TTT M

>A`_.0_+,_+@`0+._0TTT 5U59%I"%(<+-_=

TTT 5

.

TTT 'U*+>-`>-,>-/>-0>2 Crear una lista TTT 'PE::8$<'=

TTT '

*/>- 0>- +>- ,>- `>2 Lista desordenada TTT LULP&"L$<'=

TTT L

0>

TTT aUF9E''<+>-,=

TTT a

`A.+`@_./>1_`0@1

TTT

Ejemplo. Escriba un programa que genere un número aleatorio de un dado. Si sale 6muestre el mensaje: ‘Afortunado’, caso contrario muestre el número que se obtuvo y elmensaje: ‘No hubo suerte hoy’

Solución

Variablen: número aleatorio entre 1 y 6

Programa

f 7r3$5& I$ E% I9I&

:5&3 59%I&3 "34&5( Q 

%U59%I"%(<+- _=

": %UU_; 

45"%(<Dt:&5(E%9I&D= 

$8'$;45"%(<D!98"\; D-%= 

45"%(<D7& PEJ& 'E$5($ P&ND= 

Prueba del programa

TTT

!98"\ .

7& PEJ& 'E$5($ P&N

TTT

ESPOL – Python Programación

Page 88: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 88/293

88

5.10 Ciclos en Python

Estas estructuras de control se usan para describir la ejecución repetida de un bloque deinstrucciones.

Hay dos formas comunes que se usan en la construcción de algoritmos. La primera formausa una condición para controlar la repetición. La segunda utiliza los valores de unasecuencia para controlar la repetición y se revisará en una sección posterior.

5.10.1 Ejecución repetida de un bloque mediante una condición

FMientras Condición 

V

P

 Al entrar a esta estructura, se evalúa la condición. Si el resultado es verdadero (V) seejecutarán las instrucciones en el bloque y regresará nuevamente a evaluar la condición.

Mientras la condición mantenga el valor verdadero el bloque de instrucciones seguiráejecutándose. Esto significa que es necesario que en algún ciclo la condición tenga elresultado falso (F) para salir de la estructura y continuar la ejecución después del bloque.

La condición es cualquier expresión cuyo resultado puede ser únicamente verdadero (V) ofalso (F). Puede incluir operadores para comparar el contenido de variables y también sepueden usar los conectores de la lógica matemática.

Lenguaje Python

OP"8$  3/*-2.24*;

5*%&1)..24* (* (+ 6+/7)( h 

5*%&1)..24* (* (+ 6+/7)( hA A A

5*%&1)..24* (* (+ 6+/7)( h 

El bloque de las instrucciones que se repetirán está definido mediante suencolumnamiento. Las instrucciones que se repetirán deben escribirse desplazadas

algunas columnas a la derecha de la palabra while. Todas deben tener el mismoencolumnamiento. 

ESPOL – Python Programación

Page 89: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 89/293

89

Ejemplo. Describa en notación Python una solución para el siguiente problema usando laestructura de ciclos condicionada.

En un cultivo se tiene una cantidad inicial de bacterias. Cada día esta cantidad se duplica.Determine en que día la cantidad excede a un valor máximo.

Solución

Variablesx: Cantidad inicial de bacteriasm: Cantidad máxima de bacteriasd: Día

Programa

fk5$L"3"$%(& I$ 89 L9%("I9I I$ J9L($5"9'

MU"%(<"%4E(<Dc%F5$'$ 89 L9%("I9I "%"L"98 D==3U"%(<"%4E(<Dc%F5$'$ 89 L9%("I9I 3)M"39 D==

IU>b

OP"8$ MSU3;

MU,QM

IUIB+

45"%(<DY9 L9%("I9I $ML$I$ 98 3)M"3& $% $8 I"9; D- I=

Prueba del programa

TTT

c%F5$'$ 89 L9%("I9I "%"L"98 ,>> 

c%F5$'$ 89 L9%("I9I 3)M"39 0>>> 

Y9 L9%("I9I $ML$I$ 98 3)M"3& $% $8 I"9; 0

TTT

ESPOL – Python Programación

Page 90: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 90/293

Page 91: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 91/293

91

Ejemplo. Simular lanzamientos de un dado. Determinar la cantidad de lanzamientos quese realizaron hasta que se obtuvo el número 3.

Solución

Variablesx: Resultado del dado en cada lanzamiento. Al inicio el valor 0 para entrar al ciclo c: Conteo de repeticiones

Programa

fk&%($& I$ 89%X93"$%(&' I$ E% I9I&

:5&3 59%I&3 "34&5( Q

LU>

MU> 

OP"8$ MVU.; 

MU59%I"%(<+- _=LULB+

45"%(<Dk9%("I9I I$ 89%X93"$%(&' P9'(9 ]E$ '98"\ $8 .; D- L= 

Prueba del programa

TTT

k9%("I9I I$ 89%X93"$%(&' P9'(9 ]E$ '98"\ $8 .; 0

TTT

Ejemplo. Suma de los cuadrados de los primeros números naturales 

Solución

Variablesn: dato (número natural hasta el que se llegará) s: suma de cuadrados i: cada número natural

Programa

f!E39 I$ LE9I59I&'

%U"%(<"%4E(<Dc%F5$'$ $8 a98&5 :"%98; D==

'U>

"U+

OP"8$ "SU%;

LU"QQ,

'U'BL

"U"B+

45"%(<DY9 'E39 $'; D- '= 

ESPOL – Python Programación

Page 92: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 92/293

92

Prueba del programaTTT

c%F5$'$ $8 a98&5 :"%98; ,> 

Y9 'E39 $'; ,@1>

TTT

Ejemplo. Dado un número entero, genere una secuencia numérica con la siguiente regla.Esta secuencia se denomina de Ulam. Esta secuencia siempre llega al número 1

x / 2, x par x

3x 1, x impar 

=

 

Una prueba manual de esta definición

x20 Valor inicial

10 par5 impar

16 par8 par

4 par2 par

1 valor final

Solución

Variablex: número entero positivo 

Programa

f !$LE$%L"9 I$ u893

MU"%(<"%4E(<Dc%F5$'$ $8 I9(& "%"L"98; D==

OP"8$ MT+;

": Mi, UU >;

MUMRR,

$8'$;

MU.QMB+45"%(<M=

Este ejemplo muestra un tema de interés: una estructura de decisión dentro de un ciclo.

Observe el encolumnamiento de las instrucciones que define cuales pertenecen a cadaestructura de control. El encolumnamiento de instrucciones es obligatorio en el lenguajePython.

ESPOL – Python Programación

Page 93: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 93/293

Prueba del programa

!!!

#$%&'(' ') *+,- .$./.+)0 12

32

4

356

7

1

3

!!! 

Page 94: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 94/293

94

5.10.2 Ejecución repetida de un bloque mediante una secuencia

Esta es la segunda forma del lenguaje Python para controlar la repetición de instrucciones.Esta estructura controla el ciclo mediante una secuencia de valores.

FPara v ← Secuencia 

V

P

Para usar esta estructura de control es necesario especificar una variable y una lista osecuencia de los valores que puede que puede tomar. El ciclo se repetirá con cada valorespecificado para la variable. Al ejecutarse cada ciclo el valor de la variable cambiarásiguiendo la especificacion.

 Al entrar a esta estructura, se inicia la variable de control. Si esta variable no excede alvalor final, se ejecutará el bloque de instrucciones y regresará nuevamente al inicio delciclo y la variable toma el siguiente valor de la secuencia. Cuando el valor de la variablellegue al valor final, el ciclo finalizará y la ejecución continuará después del bloque.

La variable de control del ciclo puede especificarse con alguna notación que expresecuales son los valores que puede tomar.

Repetición de un bloque de instrucciones mediante una secuencia en Python

En Python la estructura for se usa para recorrer una secuencia con el formato

:&5 a "% '$LE$%L"9;2*%&1)..24* (* (+ 6+/7)( h 

2*%&1)..24* (* (+ 6+/7)( h A A A

2*%&1)..24* (* (+ 6+/7)( h 

En donde v  es la variable que recorre la secuencia y P  es el bloque que contiene lasinstrucciones que se desea repetir.

El bloque de las instrucciones que se repetirán está definido mediante elencolumnamiento. Las instrucciones que se repetirán deben escribirse desplazadas

algunas columnas a la derecha de la palabra for .  Todas deben tener el mismoencolumnamiento. 

ESPOL – Python Programación

Page 95: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 95/293

95

Las secuencias que se pueden usar con la estructura for pueden especificarse mediante

una lista de valores escritos entre corchetes [ ]  o entre paréntesis ( ) 

Ejemplos.

"#$ %$ &$ '$ ($ %$ )*

"+,-./0+$ +1.2/./0+$ +34/50+$ +62/78+$ +3490+*

":;%$ #;'$ <;&%$ );:$ &;=*

Ejemplo. Describa en notación Python un ciclo que pida el nombre de la capital de las

provincias de la costa ecuatoriana.

>0/ ? 7- "+@A494B+$+C0B D70B+$+,8 E/0+$ +34-42F+$

+GH4; ,8.-4+$+,BI./48J4B+*K?/7-HL+M/0N7-O74K +$?P

OQ7-?AHL+,BO/724 84 O4?7H48K +P 

Prueba del programa

RRR

M/0N7-O74K @A494B

,BO/724 84 O4?7H48K @A494SA78 

M/0N7-O74K C0B D70B

,BO/724 84 O4?7H48K T424U090 

M/0N7-O74K ,8 E/0,BO/724 84 O4?7H48K 34OU484 

; ; ;

Las secuencias que se usan con la estructura for  también pueden definirse con un rango 

de los enteros con la función range con el siguiente formato

>0/ N 7- /4-V.L"#$"%&'&%(%&)*PK

&*#+,-%%&)* "* ". /.01-" M 

&*#+,-%%&)* "* ". /.01-" M 2 2 2

&*#+,-%%&)* "* ". /.01-" M 

En donde v es la variable que toma cada valor del rango especificado y P es el bloque que

contiene las instrucciones que se desean repetir.

El rango se puede especificar únicamente con números enteros, no se pueden usar

decimales o caracteres

La especificación del rango puede tomar varias formas como se muestra en los siguientes

ejemplos

ESPOL – Python Programación

Page 96: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 96/293

Page 97: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 97/293

97

Ejemplo. Suma de los cuadrados de los primeros números naturales 

Solución

Variables

n: número finali: cada número natural

s: suma de los cuadrados

Programa

!"#$% '( )#%'*%'+,

-./-01/-2#0134-5*(,( (6 7%6+* 8/-%69 3::

,.;

8+* / /- *%-5(1<=-><:9

)./??@

,.,>)

2*/-013A% ,#$% (,9 3=,:

Prueba del programa

BBB

4-5*(,( (6 7%6+* 8/-%69 <;; 

A% ,#$% (,9 CCDCE;

BBB

E jemplo. Calcule y muestre el promedio de un grupo de datos ingresados desde el teclado

Solución

Variables

n: cantidad de datos

i: conteo de ciclos

x: cada dato ingresado desde el teclado

s: suma de los datos

p: promedio

Programa

!F*+$('/+ '( #- 5*#2+ '( '%0+,

-./-01/-2#013G%-0/'%' '( '%0+,9 3::

,.;

8+* / /- *%-5(1-:9

H.86+%01/-2#0134-5*(,( (6 ,/5#/(-0( '%0+9 3::

,.,>H

2.,I-

2*/-013J6 2*+$('/+ (,9 3=2:

ESPOL – Python Programación

Page 98: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 98/293

98

Prueba del programa

BBB

G%-0/'%' '( '%0+,9 E 

4-5*(,( (6 ,/5#/(-0( '%0+9 KL@ 

4-5*(,( (6 ,/5#/(-0( '%0+9 ELD

4-5*(,( (6 ,/5#/(-0( '%0+9 @LE4-5*(,( (6 ,/5#/(-0( '%0+9 DL< 

4-5*(,( (6 ,/5#/(-0( '%0+9 ML@ 

J6 2*+$('/+ (,9 ELCM

BBB

Ejemplo. Describa en notación Python una solución al siguiente problema: Dado un

entero positivo n, se desea verificar que la suma de los primeros n números impares es

igual a n2 

Ej. n = 5: 1 + 3 + 5 + 7 + 9 = 52 

Solución

Variables

n: Cantidad de números impares

k: Cada número impar

s: Suma de impares

i: Conteo de ciclos

! "#$% '( /$2%*(,

-./-01/-2#0134-5*(,( 6% )%-0/'%' '( /$2%*(,9 3::,.;

8+* / /- *%-5(1<=-><:9

N.@?/O<

,.,>N

/8 ,..-??@9

2*/-013P(*'%'(*+3:

(6,(9

2*/-013Q%6,+3: 

Prueba del programaBBB

4-5*(,( 6% )%-0/'%' '( /$2%*(,9 E

P(*'%'(*+

BBB

Se especifica el final del rango con el valor n+1 para que se incluya en el ciclo el valor n 

Note que este resultado solo prueba que la propiedad se cumple con el dato ingresado .

No es una demostración de que la propiedad es verdadera con todos los enteros positivos.

ESPOL – Python Programación

Page 99: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 99/293

99

Ejemplo. Lea un grupo de datos (precios) desde el teclado. Encuentre y muestre el mayor

valor  

Solución

Variablesn: cantidad de datos

i: conteo de ciclos

x: cada dato ingresado desde el teclado

t: el mayor valor

La variable t que contendrá el mayor valor se la inicia con cero. En un ciclo se ingresará

cada dato y se lo comparará con t, si es mayor , la variable t es asignada con el valor del

dato ingresado. Al finalizar el ciclo t  contendra el mayor valor

Programa

!J6 $%R+* 7%6+* '( #- 5*#2+ '( '%0+,

-./-01/-2#013G%-0/'%' '( '%0+,9 3::

0.;

8+* / /- *%-5(1-:9

H.86+%01/-2#0134-5*(,( (6 ,/5#/(-0( '%0+9 3::

/8 HB09

0.H

2*/-013J6 $%R+* 7%6+* (,9 3=0:

Prueba del programa

BBB

G%-0/'%' '( '%0+,9 E 

4-5*(,( (6 ,/5#/(-0( '%0+9 KE 

4-5*(,( (6 ,/5#/(-0( '%0+9 CS

4-5*(,( (6 ,/5#/(-0( '%0+9 @D

4-5*(,( (6 ,/5#/(-0( '%0+9 EM 

4-5*(,( (6 ,/5#/(-0( '%0+9 @K 

J6 $%R+* 7%6+* (,9 EML;

BBB 

ESPOL – Python Programación

Page 100: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 100/293

100

Ejemplo. Dado un número entero positivo, encuentre todos sus divisores enteros exactos.

Solución

Variables

n: número entero positivo (dato)d: cada número entero entre 1 y n, posible divisor de n 

Programa

fn"a"'&5$' I$ E% $%($5&

%U"%(<"%4E(<Dc%F5$'$ E% $%($5& 4&'"("a&; D==

:&5 I "% 59%F$ <+-%B+=;

": %iIUU>;

45"%(<Dn"a"'&5; D-I= 

Prueba del programaTTT

c%F5$'$ E% $%($5& 4&'"("a&; ,> 

n"a"'&5; +

n"a"'&5; ,

n"a"'&5; /

n"a"'&5; 0

n"a"'&5; +>

n"a"'&5; ,>

TTT

Se especifica el final del rango con el valor n+1 para que se incluya en el ciclo el valor n

ESPOL – Python Programación

Page 101: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 101/293

101

Ejemplo. Dado un número entero, cuente sus divisores enteros exactos.

Solución

Variables

n: número entero positivo (dato)x: cada número entero entre 1 y n, posible divisor de nc: cantidad de divisores

Programa

fn"a"'&5$' I$ E% $%($5&

%U"%(<"%4E(<Dc%F5$'$ E% $%($5& 4&'"("a&; D==

LU>

:&5 I "% 59%F$ <+-%B+=;

": %iIUU>;

LULB+45"%(<Dk9%("I9I I$ I"a"'&5$'; D-L=

Prueba del programaTTT

c%F5$'$ E% $%($5& 4&'"("a&; ,> 

k9%("I9I I$ I"a"'&5$'; _

TTT

Ejemplo. Dado un número entero determine si es un número primo 

Solución

Variablesn: número entero positivo (dato)x: cada número entero entre 1 y n, posible divisor de nc: cantidad de divisores

Si el conteo de divisores enteros es mayor a 2, el número no es primo

Programa

fn$($53"%95 '" E% %r3$5& $' 45"3&

%U"%(<"%4E(<Dc%F5$'$ E% $%($5& 4&'"("a&; D==

LU>

:&5 I "% 59%F$ <+-%B+=;

": %iIUU>;

LULB+

": LT,;

45"%(<D7& $' 45"3&D=

$8'$;

45"%(<D!" $' 45"3&D=

ESPOL – Python Programación

Page 102: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 102/293

102

Prueba del programaTTT

c%F5$'$ E% $%($5& 4&'"("a&; /. 

!" $' 45"3&

TTT

c%F5$'$ E% $%($5& 4&'"("a&; 01 7& $' 45"3&

TTT

Ejemplo. Dado un número entero encuentre los dígitos de su equivalente en el sistemabinario. El algoritmo para obtener los dígitos binarios de un número entero decimalconsiste en dividirlo sucesivamente para 2. Los resíduos de la división entera tomadosdesde el final hacia arriba son los dígitos buscados.

Para probar: Obtener los dígitos binarios del número 23

Entonces, 23 es equivalente a 1 0 1 1 1  en el sistema binario

Solución

Variables

n: Número entero positivob: Cadena de caracteres que contiene los dígitos de n en el sistema binario.

La cadena crece en forma recurrente de derecha a izquierda

fk&%a$5("5 E% $%($5& 4&'"("a& 9 J"%95"&

%U"%(<"%4E(<Dc%F5$'$ E% $%($5& 4&'"("a&; D==

JUDD

OP"8$ %T>;

IU%i,

%U%RR,

JU'(5<I=BJ

45"%(<D7r3$5& J"%95"&; D-J=

Prueba del programac%F5$'$ E% $%($5& 4&'"("a&; ,.

7r3$5& J"%95"&; +>+++

TTT J La variable b contiene una cadena de caracteresD+>+++D con los dígitos en binario TTT 5U"%(<J=  Se puede convertir a un número entero 

TTT 510111

ESPOL – Python Programación

Page 103: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 103/293

103

Ejemplo. Simule n lanzamientos de un dado. Muestre cuantas veces se obtuvo el 3.

Solución

Variables

n: dato (cantidad de lanzamientos)i: conteo de lanzamientosx: cada número aleatorioc: cantidad de veces que se obtuvo el 3

Programa

f!"3E895 89%X93"$%(&' I$ E% I9I&

:5&3 59%I&3 "34&5(Q

%U"%(<"%4E(<Dk9%("I9I I$ 89%X93"$%(&'; D==

LU>

:&5 " "% 59%F$<%=;MU59%I"%(<+-_=

": MUU.;

LULB+

45"%(<Dk&%($& I$ 5$'E8(9I&' :9a&59J8$'; D-L= 

Prueba del programaTTT

k9%("I9I I$ 89%X93"$%(&'; _>> 

k&%($& I$ 5$'E8(9I&' :9a&59J8$'; +>0TTT

NOTA:  Pruebe con valores grandes de n. Verifique que la respuesta es aproximadamente1/6 de n. Este resultado confirma lo que indica la Teoría de la Probabilidad. Si el dado esbalanceado, cada número tiene aproximadamente la misma probabilidad de salir.

ESPOL – Python Programación

Page 104: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 104/293

104

Ejemplo. Simule n lanzamientos de dos dados. Muestre cuantas veces los dos dadostuvieron el mismo resultado.

Solución

Variablesn: dato (cantidad de lanzamientos)i: conteo de lanzamientosa,b: contendrán números aleatorios enteros entre 1 y 6c: cantidad de veces en las que a fue igual a b

Programa 

fY9%X93"$%(&' I$ I&' I9I&'

:5&3 59%I&3 "34&5(Q

%U"%(<"%4E(<Dk9%("I9I I$ 89%X93"$%(&'; D==

LU>:&5 " "% 59%F$<%=;

9U59%I"%(<+-_=

JU59%I"%(<+-_=

": 9UUJ;

LULB+

45"%(<Dk9%("I9I I$ 5$4$("I&'; D-L=

Prueba del programa

TTTk9%("I9I I$ 89%X93"$%(&'; />>

k9%("I9I I$ 5$4$("I&'; _1 

TTT 

ESPOL – Python Programación

Page 105: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 105/293

Page 106: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 106/293

Page 107: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 107/293

107

Prueba del programaTTT

c%F5$'$ (939q& I$ 89 4&J89L"\% +>

c%F5$'$ (939q& I$ 89 3E$'(59 /

.

`,

.

TTT

Note que la muestra puede tener valores repetidos. Posteriormente se describirá unatécnica para que una muestra no incluya elementos repetidos.

Ejemplo.  Escriba un programa para simular el siguiente juego: una rana es colocadaaleatoriamente en la casilla central de una caja cuadriculada de tamaño 9x9 dm. La rana

realiza saltos aleatoriamente de 1 dm. en cualquiera de las cuatro direcciones: arriba,abajo, izquierda o derecha. Determine la cantidad de saltos realizados hasta llegar aalguno de los bordes de la caja.

SoluciónLa casilla central coincidirá con las coordenadas (0, 0)

Variablesx,y: coordenadas de las casillasd:  dirección del salto (aleatoria) i: conteo de intentos

Programa 

:5&3 59%I&3 "34&5(Q

MU>

NU>

"U>

OP"8$ MS0 9%I MT?0 9%I NS0 9%I NT?0;

IU59%I"%(<+-/=

"U"B+

": IUU+;MUMB+

$8": IUU,;

MUM?+

$8": IUU.;

NUNB+

$8'$;

NUN?+

45"%(<M-N=

45"%(<Dk9%("I9I I$ "%($%(&'; D-"=

ESPOL – Python Programación

Page 108: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 108/293

108

Prueba del programa

TTT

+ >

+ +

> +?+ +

?, +

?, >

?, +

?, ,

?, .

?. .

?. ,

?/ ,

?/ +

?0 +

k9%("I9I I$ "%($%(&'; +/

Ejemplo.  Escriba un programa para representar mediante barras de asteriscos, 10números aleatorios con valores enteros entre 1 y 20. 

Solución

Variablesi: variable para el conteo de repeticionesn:  número aleatorio

barra: barra de n asteriscos

Programa 

:5&3 59%I&3 "34&5(Q

:&5 " "% 59%F$<+>=;

%U59%I"%(<+-,>=

J9559UDD

:&5 C "% 59%F$<+-%B+=;

J9559UJ9559BDQD

45"%(<Di/I Di<%=-J9559=

Prueba del programaTTT

. QQQ++ QQQQQQQQQQQ+. QQQQQQQQQQQQQ+, QQQQQQQQQQQQ+> QQQQQQQQQQ/ QQQQ/ QQQQ_ QQQQQQ0 QQQQQ+1 QQQQQQQQQQQQQQQQQ

ESPOL – Python Programación

Page 109: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 109/293

109

5.10.3 Ciclos anidados

 Algunos algoritmos requieren ciclos dentro de otros ciclos. La regla establece que paracada instancia del ciclo externo, el ciclo interno se realiza completamente.

Una representación gráfica de dos ciclos ”while” anidados:

FMientras Condición1  Ciclo externo 

V F 

Mientras Condición2  Ciclo interno 

P

Una representación gráfica de dos ciclos “for” anidados:

FPara v1 ← Secuencia1  Ciclo externo

V F 

Para v2 ← Secuencia2  Ciclo interno 

P

P representa el bloque de instrucciones que se repite

ESPOL – Python Programación

Page 110: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 110/293

110

Ejemplo. Liste todas las parejas de números con valores enteros del 1 al 3

Solución

Variables

a,b: contendrán los enteros 1, 2, 3

Programa

fh95$C9' I$ %r3$5&'

:&5 9 "% *+-,-.2;

:&5 J "% *+-,-.2;

45"%(<9-J= 

Prueba del programa

TTT+ +

+ ,

+ .

, +

, ,

, .

. +

. ,

. .

Otra solución para el ejemplo anterior

fh95$C9' I$ %r3$5&'

:&5 9 "% 59%F$ <+-/=;

:&5 J "% 59%F$ <+-/=;

45"%(<9-J= 

Prueba del programa

TTT+ +

+ ,

+ .

, +

, ,

, .

. +

. ,

. .

Se producen los mismos resultados. Note que el extremo final del rango no se incluye.

ESPOL – Python Programación

Page 111: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 111/293

111

Ejemplo. Liste todas las parejas de números con valores enteros del 1 al 3 pero sin quehayan parejas repetidas

Solución

Variablesa: contendrá los enteros 1, 2, 3b: contendrá los enteros desde el valor de a hasta 3

Se usará un rango para el ciclo interno que se inicie con el valor del rango del cicloexterno. Esto evita que el ciclo interno use valores anteriores que ya fueron considerados

Programa

fh95$C9' I$ %r3$5&' '"% 5$4$("L"&%$'

:&5 9 "% 59%F$ <+-/=;

:&5 J "% 59%F$ <9-/=;45"%(<9-J= 

Prueba del programa

TTT

+ +

+ ,

+ .

, ,

, .

. .

TTT

Ejemplo. Para cada mes muestre una lista numerada de las cuatro semanas.

Solución

Variablesm: contendrá el nombre del mess: contendrá los números de las semanas

Programa

:&5 3 "% *Dd%$D-DH$JD-DW95D-DtJ5D-DW9ND-D^E%D-D^E8D-

DtF&D-D!$4D-DwL(D-D7&aD-Dn"LD2;

45"%(<DW$'; D-3=

:&5 ' "% 59%F$<+-0=;

45"%(<D !$39%9; D-'= 

Note el encolumnamiento de las instrucciones dentro de cada ciclo

ESPOL – Python Programación

Page 112: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 112/293

112

Prueba del programa

TTT

W$'; d%$

!$39%9; +

!$39%9; ,!$39%9; .

!$39%9; /

W$'; H$J

!$39%9; +

!$39%9; ,

!$39%9; .

!$39%9; /

W$'; W95

!$39%9; +

!$39%9; ,

!$39%9; .

!$39%9; /

W$'; tJ5

!$39%9; +

!$39%9; ,

!$39%9; .

!$39%9; /

W$'; W9N

!$39%9; +

!$39%9; ,

!$39%9; .!$39%9; /

W$'; ^E%

!$39%9; +

!$39%9; ,

!$39%9; .

!$39%9; /

W$'; ^E8

!$39%9; +

!$39%9; ,

!$39%9; .

!$39%9; /

W$'; tF&

!$39%9; +

!$39%9; ,

!$39%9; .

!$39%9; /

A A A etc. 

ESPOL – Python Programación

Page 113: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 113/293

Page 114: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 114/293

114

Prueba manual del programa

Salida x n120 2

Ciclo externo Ciclo interno

2≤120 120 % 2 = 0 2 6060 % 2 = 0 2 3030 % 2 = 0 2 15

15 % 2 ≠ 03

3≤15 15 % 3 = 0 3 5

5 % 3 ≠ 04

4≤5 5 % 4 ≠ 0

55≤5 

5 % 5 = 0 5 16

6 no es ≤ 1 

Ejemplo.  Liste todas las ternas (a, b, c) de números enteros entre 1 y 20 que cumplen la

propiedad Pitagórica: a

2

 + b

2

 = c

2

 

Solución

Variablesa, b, c: números enteros entre 1 y 20 

Programa

fG$5%9' h"(9F\5"L9'

:&5 9 "% 59%F$ <+-,+=;

:&5 J "% 59%F$ <+-,+=;:&5 L "% 59%F$ <+-,+=;

": 9QQ,BJQQ,UULQQ,;

45"%(<9-J-L= 

Prueba del programaTTT

. / 0

/ . 0

0 +, +.

_ @ +>

@ _ +>

ESPOL – Python Programación

Page 115: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 115/293

115

@ +0 +1

` +, +0

+, 0 +.

+, ` +0

+, +_ ,>

+0 @ +1+_ +, ,>

TTT

La lista de resultados incluye ternas repetidas

Ejemplo.  Liste todas las ternas (a, b, c) de números enteros entre 1 y 20 que cumplen lapropiedad Pitagórica:  a2 + b2 = c2  pero sin incluir ternas repetidas

Solución

Variablesa, b, c: números enteros entre 1 y 20 

Es una modificación del ejemplo anterior. El rango de cada ciclo interno comienza en elvalor del rango del ciclo externo para que no se repitan valores que ya fueronconsiderados antes.

Programa

fG$5%9' h"(9F\5"L9'

:&5 9 "% 59%F$ <+-,+=;

:&5 J "% 59%F$ <9-,+=;

:&5 L "% 59%F$ <J-,+=;

": 9QQ,BJQQ,UULQQ,;

45"%(<9-J-L= 

Prueba del programaTTT

. / 0

0 +, +._ @ +>

@ +0 +1

` +, +0

+, +_ ,>

TTT

Pregunta:  ¿Cuantas repeticiones se realizan en total en cada uno de los dos últimosalgoritmos?

ESPOL – Python Programación

Page 116: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 116/293

116

Ejemplo. Determine si la proposición lógica: (a∧b)⇒(a∨c) es una tautología.

Para que una expresión lógica sea una tautología, el resultado debe ser verdadero paratodas las combinaciones de los valores lógicos de las variables.

Solución

Variablesa,b,c: cada variable tomará los valores lógicos: True y False

El lenguaje Python no tiene un operador para el enunciado ⇒  pero se puede usar una

equivalencia lógica: p⇒q ≡p∨q.

Con esta equivalencia, la expresión (a∧b)⇒(a∨c) se transforma a: ((a∧b)) ∨ (a∨c) 

Programa

fl$5":"L95 (9E(&8&Fs9

:&5 9 "% *G5E$-H98'$2;

:&5 J "% *G5E$-H98'$2;

:&5 L "% *G5E$-H98'$2;

4U%&(<<9 9%I J== &5 <9 &5 L=

45"%(<9-J-L-4=

Prueba del programa

TTTG5E$ G5E$ G5E$ G5E$

G5E$ G5E$ H98'$ G5E$

G5E$ H98'$ G5E$ G5E$

G5E$ H98'$ H98'$ G5E$

H98'$ G5E$ G5E$ G5E$

H98'$ G5E$ H98'$ G5E$

H98'$ H98'$ G5E$ G5E$

H98'$ H98'$ H98'$ G5E$

TTT

El resultado muestra que la expresión lógica si es una tautología pues la cuarta columnaque contiene el resultado para cada una de las combinaciones de valores lógicos de lasvariables, es en cada caso verdadero. 

ESPOL – Python Programación

Page 117: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 117/293

117

Ejemplo.  Se dice que dos números son “amigables” si el primero es la suma de losdivisores del segundo y viceversa. Escriba un programa que busque los númerosamigables entre los numeros naturales menores a 500.

Prueba: Los números 220 y 284 son “amigables” pues se cumple que

Los divisores de 220 son: {1, 2, 4, 5, 10, 11, 20, 22, 44, 55, 110} y la suma es es 284.Los divisores de 284 son: {1, 2, 4, 71, 142} y la suma es 220.

Solución

Variablesa,b: Variables que toman cada valor entero entre 1 y 500n: Cada número naturals: Suma de los divisores menores que a t: Suma de los divisores menores que b 

Cada suma de divisores de  a se compara con cada suma de divisores de b 

Programa 

f 7r3$5&' 93"F9J8$'

:&5 9 "% 59%F$<+-0>>=;

'U>

:&5 % "% 59%F$<+-9=;

": 9i%UU>;

'U'B% > C)0' +/% -2@2%/1(% 0(*/1(% -( ' 

:&5 J "% 59%F$<+-0>>=; > ?'1' .'-' %)0' -( ' %( .'+.)+' 6 

(U> > )*' %)0' -( +/% -2@2%/1(% -( 6 

:&5 % "% 59%F$<+-J=;

": Ji%UU>; 

(U(B% > C)0' +/% -2@2%/1(% 0(*/1(% -( 6 

": 'UUJ 9%I (UU9 9%I 9VUJ;  > 3/0D'1' +'% %)0'% 

45"%(<9-J=

Prueba del programa TTT

,,> ,@/,@/ ,,>

TTT 

Los resultados muestran que solamente hay una pareja de números “amigables” entre 1 y500. Note que verificar manualmente estos resultados sería muy laborioso.

ESPOL – Python Programación

Page 118: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 118/293

118

5.10.4 La instrucción break

Esta instrucción se utiliza para interrumpir las repeticiones de un ciclo y salir sin completarla cantidad de iteraciones que estaba prevista.

Ejemplo. Simular lanzamientos de un dado. Determinar la cantidad de intentos realizadoshasta que salga el 5.

Solución

Variablesn: cantidad máxima de intentos que se realizaránx: número aleatorio entre 1 y 6

Programa

f !"3E895 89%X93"$%(&' I$ E% I9I&:5&3 59%I&3 "34&5(Q

%U"%(<"%4E(<Dk9%("I9I 3)M"39 I$ 89%X93"$%(&'; D==

:&5 " "% 59%F$<%=;

MU59%I"%(<+-_=

45"%(<M=

": MUU0;

45"%(<DY9%X93"$%(& $% $8 LE98 '98"\ $8 0; D-"B+=

J5$9K 

Prueba del programaTTT

k9%("I9I 3)M"39 I$ 89%X93"$%(&'; ,> 

,

,

+

,

+

,

0

Y9%X93"$%(& $% $8 LE98 '98"\ $8 0; 1TTT

En este ejemplo la solución no luce muy natural pues la salida normal del ciclo for ocurrecuando se agotan los valores del rango o lista. La instrucción break permite salir del cicloantes de agotar la lista de valores.

Esta solución no garantiza que se obtenga el número 5 dentro de la cantidad máxima delanzamientos especificada.

La manera más natural de construir algoritmos cuando no se conoce cuantos ciclos debenrealizarse hasta llegar a la solución, es la instrucción de repetición while como se muestraen la siguiente solución.

ESPOL – Python Programación

Page 119: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 119/293

119

Ejemplo. Simular lanzamientos de un dado. Determinar la cantidad de lanzamientos hasta

que salga el 5.

Solución

En este ejemplo, la estructura while se puede usar para mantener la repetición

hasta que se cumpla una condición, y no se necesita usar la instrucción break

Variables

n: cantidad de intentos

c: conteo de repeticiones

x: número aleatorio entre 1 y 6

Programa

! #$%&'() '(*+(%$,*-./ 0, &* 0(0.

1).% )(*0.% $%2.)-3

456756

89$', 7:5;<

75)(*0$*-=>?@A

2)$*-=7A

454B>

2)$*-=CD(*+(%$,*-. ,* ,' 4&(' /('$E ,' ;< C?4A

Prueba del programa

FFF

G

H

H

I

>

@

>

;

D(*+(%$,*-. ,* ,' 4&(' /('$E ,' ;< J

FFF

El valor inicial x = 0  permite ingresar al ciclo while. Dentro del ciclo se genera la

secuencia de números aleatorios hasta que se cumple la condición de salida.

Como se verá en secciones posteriores, la programación de algunos algoritmos puede

necesitar el uso de la instrucción break para salir de ciclos. De todas maneras esta

instrucción debe usarse con precaución para mantener la claridad de la codificación de los

programas. 

ESPOL – Python Programación

Page 120: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 120/293

120

Ejemplo. Diseñe un programa para el juego de adivinar un entero generado al azar.

Incluya un mensaje de ayuda y un conteo de intentos. 

Solución

Variablesx: número aleatorio entero 

n: número ingresado

i: conteo de intentos

Programa

Se usa un ciclo while con la condición True. Esto mantiene el ciclo activo hasta

que adivine el número. La instrucción break forza la finalización del ciclo

!"#$ "&'(#$ )$*#"+,

-."&'()'+/010223

).245)67 8"97:

).);0

'.)'+/)'*9+/<=()>)'7 76 '?$7"#: <33

)! '..-:

*")'+/<=()>)'@ 7' <1)1< )'+7'+#A<3

B"7&C

76A7:

)! 'D-:

*")'+/<E9F *7G97H#<3

76A7:*")'+/<E9F I"&'(7<3

Prueba del programa

JJJ

=()>)'7 76 '?$7"#: K2 

E9F I"&'(7

=()>)'7 76 '?$7"#: LK 

E9F *7G97H#

=()>)'7 76 '?$7"#: ML E9F *7G97H#

=()>)'7 76 '?$7"#: MN 

E9F I"&'(7

=()>)'7 76 '?$7"#: MO 

E9F I"&'(7

=()>)'7 76 '?$7"#: MK 

=()>)'@ 7' O )'+7'+#A

JJJ

ESPOL – Python Programación

Page 121: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 121/293

121

Interrupción de las iteraciones de un ciclo doble

La instrucción break  interrumpe las iteraciones de un ciclo. Para salir de un ciclo doble se

puede usar un artificio como se muestra en el siguiente programa. Suponer que se desea

salir de ambos ciclos la primera vez que el valor asignado a la variable n sea divisible por 7

!"#$%" ' ("#!) 

*+, $ $- ,"-.)/010234

*+, 5 $- ,"-.)/010234

-'67$7789875776

$* -:;''24

<,$-=/$151-3

!"#$%" ' >,?) 

@,)"A # Sale del ciclo interno 

$* !"#$%"4

@,)"A # Sale del ciclo externo 

 Al activarse la instrucción break  en el ciclo interno se asigna un valor lógico a la variable

salida y sale del ciclo interno. El valor de la variable salida es usado en el ciclo externo

para salir también del ciclo externo.

Prueba del programa

BBB

0 6 0C

BBB

5.10.5 La instrucción continue 

La instrucción continue se usa en los ciclos para regresar al comienzo del ciclo ignorando

todas las instrucciones restantes en la iteración actual.

Ejemplo.  El siguiente programa imprime los caracteres de una palabra ignorando los

espacios en blanco. 

DE!+ %) F+-=$-?)

G'HI? -) !H*+, F $- G4

$* F''H H4

F+-=$-?)

<,$-=/F3

Prueba del programa

BBB

I

?

-

)

ESPOL – Python Programación

Page 122: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 122/293

Page 123: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 123/293

123

5.11 Introducción a validación de datos 

En todos los ejemplos anteriores se ha supuesto que los datos que ingresan no tienenalgún error. En la realidad al usar un programa es frecuente que se introduzcan datosincorrectos, por lo que el programa debe realizar alguna validación para evitar que

ingresen estos datos y se produzcan resultados incorrectos o que adicionalmente, elprograma tenga una interrupción inesperada.

Ejemplo. Dado un número entero, determine cuantas cifras tiene.

Solución

Variablesn: dato (entero positivo)c: cantidad de cifras de n

El número n es reducido dividiéndolo sucesivamente para 10 en un ciclo. La varible c seusa para determinar cuantas veces se realizó la reducción.

Programa

fk&%($& I$ 89' L":59' I$ E% %r3$5&

%U"%(<"%4E(<Dc%F5$'$ E% $%($5& 4&'"("a&; D==

LU>

OP"8$ %T>;

%U%RR+>

LULB+

45"%(<DL9%("I9I I$ L":59'; D-L=

Prueba del programaTTT

c%F5$'$ E% $%($5& 4&'"("a&; /01@.,+ 

L9%("I9I I$ L":59'; 1

TTT

c%F5$'$ E% $%($5& 4&'"("a&; ?1@/ 

L9%("I9I I$ L":59'; >

TTTc%F5$'$ E% $%($5& 4&'"("a&; /0A, 

l98E$d55&5; "%a98"I 8"($598 :&5 "%(<= O"(P J9'$ +>; D/0A,D

TTT

Si el dato ingresado es negativo, el resultado será incorrecto. Si el dato tiene decimales, otiene caracteres que no son numéricos se producirá un error de tipo, el cual interrumpe laejecución del programa.

En las siguiente sección se propone una solución para este importante tema de lavalidación de datos.

ESPOL – Python Programación

Page 124: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 124/293

124

5.11.1 Control de excepciones

 Al probar un programa se pueden producir errores de ejecución. En este caso Python emite un error   o excepción y se detiene la ejecución del programa. El error   producidoaparece en la ventana principal mediante un mensaje. Se muestran algunos casos:

Ejemplos.

GGG BH8IJ  (división para cero) x$5&n"a"'"&%d55&5; -2@2%2/* 6K E(1/

GGG BH&  (t es una variable no definida) 793$d55&5; *'0( #&# 2% */& -(L2*(-

GGG BH2*&<2*D)&<#5*F1(%( )* (*&(1/M #==

5*F1(%( )* (*&(1/M NOP  (el dato no es un entero) 

l98E$d55&5; 2*@'+2- +2&(1'+ L/1 2*&<= Q2&R 6'%( 8JM #NOP# 

GGG L1/0 L)*.2/*(% 20D/1&S  (módulo no encontrado) c34&5(d55&5; T/ 0/-)+( *'0(- #L)*.2/*(%# 

El mensaje en color azul que aparece en la pantalla es el error   o excepción. Si unprograma tuviera estos errores, la ejecución se detendría.

Para tener control sobre esta condición de error, el lenguaje Python  dispone de unainstrucción para manejo de excepciones, con la siguiente sintaxis:

(5N;

Instrucciones en las que se desea detectar excepciones

$ML$4( error ; 

Instrucciones con acciones que deseamos realizar si hay una excepción

Si al ejecutar todas las instrucciones de try  no se detecta la excepción o  errorespecificado en except  la ejecución ocurre normalmente y continúa despues de la

instrucción try-except.

Caso contrario, si al ejecutar las instrucciones de try  ocurre el error   o excepciónespecificado en except, entonces se realizan las instrucciones asociadas a except  ydespués prosigue la ejecución.

Si no se especifica cual es el  error   que se desea detectar, entonces se realizan lasinstrucciones asociadas a except si se produce cualquier exepción y después prosigue laejecución.

Esta instrucción permite al programador tener control sobre los errores en la ejecución y la

posibilidad de escribir instrucciones para describir acciones en caso de que se produzcanestos eventos. Si no se usa está instruccion, la ejecución del programa se detendría.

ESPOL – Python Programación

Page 125: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 125/293

125

Ejemplo. Dado un número entero positivo, determine cuantas cifras tiene. Valide que eldato sea entero.

Solución

Variablesn: dato entero y positivoc: cantidad de cifras de nnum: variable que definimos para registrar si hubo error en el dato

num=1: dato correctonum=0: dato incorrecto

Se usará la instrucción try-except  para validar el dato. Si hay error se asigna: num=0 

Programa

fk&%($& I$ 89' L":59' I$ E% %r3$5&%E3U+

(5N;

%U"%(<"%4E(<Dc%F5$'$ E% $%($5& 4&'"("a&; D==

$ML$4( l98E$d55&5;

%E3U>

": %E3UU+;

%U9J'<%= fd8 '"F%& %& "%($5$'9 

LU>

OP"8$ %T>; 

%U% 

+>LULB+

45"%(<DL9%("I9I I$ L":59'; D-L=

$8'$;

45"%(<Dd55&5 $% $8 I9(&D=

Prueba del programaTTT

c%F5$'$ E% $%($5& 4&'"("a&;  /0A1

d55&5 $% $8 I9(&

TTT

c%F5$'$ E% $%($5& 4&'"("a&; 9JL 

d55&5 $% $8 I9(&

TTT

c%F5$'$ E% $%($5& 4&'"("a&; @1/_, 

L9%("I9I I$ L":59'; 0

ESPOL – Python Programación

Page 126: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 126/293

Page 127: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 127/293

127

7a función type() puede usarse para determinar el tipo de un objeto: int, str , etc.

Ejemplos.

TTT MU.0TTT 45"%(<(N4$<M==

SL89'' D"%(DT

TTT MUDh5E$J9D 

TTT 45"%(<(N4$<M==

SL89'' D'(5DT

Se pueden usar para verificar tipos en la ventana interactiva o en programas

Ejemplos

TTT MU.0

TTT NUDh5E$J9D 

TTT ": (N4$<M=VU(N4$<N=;

45"%(<DG"4&' I":$5$%($'D=

G"4&' I":$5$%($'

ESPOL – Python Programación

Page 128: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 128/293

128

5.12 Ejercicios de programación con ciclos

Para cada ejercicio escriba y pruebe un programa en la ventana de edición de Python.

1.- Calcule el promedio, el menor valor y el mayor valor de los pesos de n paquetes en una

bodega. Estos datos ingresan uno a la vez dentro de un ciclo. n  es un dato ingresado alinicio.

2.- Clasifique los pesos de los n objetos de una bodega en tres grupos: menor a 10 Kg.,entre 10 y 20 Kg., mas de 20 Kg. Los datos ingresan uno a la vez en un ciclo.

3. Determine la cantidad de términos que deben sumarse de la serie  12 + 22 + 33 + 44 + ... para que el valor de la suma sea mayor a un número x ingresado al inicio.

4.- Dado dos números enteros a, b, determine su máximo común divisor m.Ejemplo: a = 36, b = 45 entonces m = 9

5. Calcule un valor aproximado para la constante π  usando la siguiente expresión:π/4 = 1 – 1/3 + 1/5 – 1/7 + 1/9 – 1/11 + 1/13 ...

La cantidad de términos es un dato que debe ser ingresado al inicio del algoritmo.

6.- Lea los votos de n personas. Cada voto es un número 1, 2, o 3 correspondiente a trescandidatos. Si el dato es 0 es un voto en blanco. Si es otro número es un voto nulo.Determine el total de votos de cada candidato y el total de votos blancos y nulos.

7.- Lea las coordenadas de u, v de la ubicación de una fábrica y las coordenada x, y de n sitios de distribución. Encuentre cual es la distancia del sitio más alejado de la fábrica

8.- Encuentre el mayor valor de la función f(x)=sen(x)+ln(x), para los valores:x = 1.0, 1.1, 1.2, 1.3, ..., 4 

9.- Se tienen una lista de las coordenadas x, y de n  puntos en un plano. Leasucesivamente las coordenadas de cada punto y acumule las distancias del punto alorigen. Muestre la distancia total acumulada.

10.- Determine la suma de los términos de la serie 13 + 23 + 33 + ... + n3 en donde n es un

número natural

11.- Determine la suma de los n primeros números de la serie: 1, 1, 2, 3, 5, 8, 13, 21, ....en la cual cada término, a partir del tercero, se obtiene sumando los dos términosanteriores

12.- El inventor del juego del ajedréz pidió a su rey que como recompensa le diera por laprimera casilla 2 granos de trigo, por la segunda, 4 granos, por la tercera 8, por la cuarta16, y así sucesivamente hasta llegar a la casilla 64. El rey aceptó. Suponga que cada Kg.de trigo consta de 20000 granos de trigo. Si cada tonelada tiene 1000 Kg. describa unalgoritmo para calcular la cantidad de toneladas de trigo que se hubiesen necesitado.

En el ciclo describa la suma 21 + 22 + 23 + 24 + + 264 

ESPOL – Python Programación

Page 129: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 129/293

129

13.- Una empresa compra una máquina en $20000 pagando cuotas anuales durante cincoaños. La siguiente fórmula relaciona el costo de la máquina P, el pago anual A, el númerode años n y el interés anual r :

n

n

r(1 r)A P

(1 r) 1

 

=

 

Escriba un programa que permita calcular el valor de P para valores de r = 0.01,0.02, ,0.1 

14.- Una persona tiene una lista con los precios de n artículos y dispone de una ciertacantidad de dinero. Los artículos son identificados con la numeración natural. Escriba unprograma para leer estos datos y obtener los siguientes resultadosa) Muestre la identificación de los artículos que puede comprarb) Para cada artículo cuyo precio es menor que la cantidad de dinero disponible, determinela cantidad que puede comprar.

15.- La plataforma de un transporte tiene capacidad para llevar hasta m kilos. Se tiene unalista ordenada en forma creciente con el peso de n paquetes. Determine cuantos paquetespueden ser transportados. La elección debe hacerse comenzando con los paquetes demenor peso.

16.- En un supermercado se hace una promoción, mediante la cual el cliente obtiene undescuento dependiendo de un número de una cifra que se escoge al azar. Si el numeroescogido es menor que 7 el descuento es del 5% sobre el total de la compra, si es mayor oigual a 7 el descuento es del 10%. Lea la cantidad de dinero. genere el número aleatorio ymuestre cuanto dinero se le descuenta.

17.- Escriba un programa para simular la extracción de n bolas de una caja que contiene mbolas numeradas con los números naturales del 1 al m. Cada vez que se saca la bola semuestra el número y se la devuelve a la caja, por lo tanto pueden salir bolas repetidas.

18.- Escriba un programa que genere un número aleatorio con un valor entre 1 y 100 y quesea un número primo.

19.- Escriba un programa que muestre dos números aleatorios con valores enteros entre 1y 100 tales que la suma sea un número primo.

20.- Lea un número par. Encuentre dos números al azar tales que la suma sea igual al

dato dado.

21.- Lea un número par. Encuentre dos números al azar tales que sean primos y la sumasea igual al dato dado.

22.- Simule el siguiente juego entre tres ranas. Las ranas están al inicio de una pista de 20m. En turnos cada rana realiza un salto. El salto es aleatorio y puede ser: a) Brinca y caeen el mismo lugar, b) Salta 0.5 m en la dirección correcta, c) Salta 1 m en la direccioncorrecta, d) Salta 0.5 m retrocediendo. Determine cual de las tres ranas llega primero a lameta.

ESPOL – Python Programación

Page 130: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 130/293

130

23.- Realice la simulación de n intentos de lanzamientos de un dado con las siguientesreglas: si sale 6 gana $5. Si sale 1 gana $1. Si sale 2, 3, 4 o 5 pierde $2. Determine lacantidad acumulada al final del juego

24.- Dado un valor entero positivo n verifique que 13+23+33+ +n3 = (1+2+3+ n)2 

25.- Escriba un programa que genere n  parejas de número primos gemelos. Estosnúmeros primos tienen la propiedad que además de ser primos, la distancia entre ellos es2. Ejemplo. 3 y 5, 5 y 7, 11 y 13, 17 y 19, etc

26.- En un juego se debe asignar a cada persona un número mágico que se obtiene con lasiguiente regla: Se suman los dígitos de la fecha de nacimiento y se suman nuevamentelos dígitos del resultado hasta obtener obtener un solo dígito, como en el siguienteejemplo:

Fecha de Nacimiento: 28/11/1989 

28 + 11 + 1989 = 2028⇒

  2 + 0 + 2 + 8 = 12⇒

  1 + 2 = 3Entonces el número buscado es 3 

Lea tres números: dia, mes, año y muestre el número mágico correspondiente

27. Analice el siguiente programa. Escriba los resultados que se obtendrían si el dato queingresa para n es 25

* H "%(<"%4E(<#5*F1(%( )* -'&/M #==

1 H J

OP"8$ *GJ; 

- H *U9

* H *II9

1 H 8JS1 " -

45"%(<-V *V 1=

28. Analice el siguiente algoritmo

+  Y$$5 9- J

,  !98($ 9 89 8s%$9 0

.  W&'(595 M

/  !98($ 9 89 8s%$9 +,0  M ← >

_  !" 9S0 '98($ 9 89 8s%$9 +>

1  M ← M B 9

@  !" MTJ '98($ 9 89 8s%$9 ++

`  !98($ 9 89 8s%$9 1

+>  M ← M B 9 y J

++  !98($ 9 89 8s%$9 .+,  H"%

a) Construya un diagrama de flujo ordenado que sea equivalente al algoritmo dado.b) Interprete el diagrama de flujo y codifíquelo en notación Python 

ESPOL – Python Programación

Page 131: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 131/293

131

29. Analice el siguiente algoritmo

+  Y$$5 9- J- L

,  5 ← >

.  !" 9SJ ∨ LS> '98($ 9 89 8s%$9 @

/  !" J $' 495 '98($ 9 89 8s%$9 _0  5 ← 5 B L

_  J ← J ? +

1  !98($ 9 89 8s%$9 .

@  W&'(595 5

a) Construya un diagrama de flujo que sea equivalente al algoritmo propuesto.b) Interprete el diagrama de flujo y codifíquelo en notación Python 

30. Construya un algoritmo para resolver el siguiente problema:

En la Asamblea de un partido político hay dos posibles candidatos para inscribirlo en laselecciones de alcalde. Para elegir al candidato del partido, cada una de las n personasasistentes a la reunión entregan un voto. Se deben leer uno por uno los votos y determinarsi alguno de los dos candidatos obtuvo más de la mitad de los votos. Este será elcandidato.

31. Analice el siguiente programa que usa un ciclo for . Escriba un programa equivalenteque produzca el mismo resultado, pero sustituyendo el ciclo for  por un ciclo while  Debedefinir una variable para conteo de repeticiones y la condición para salir del ciclo.

* H "%&<"%4E(<W5*F1(%( )* -'&/M W==% H J

:&5 2 2% 59%F$<8V*=; 

% H % " 2SS9

45"%(<%=

32.  Escriba un programa con un ciclo. Dentro del ciclo se generarán tres númerosaleatorios con valores enteros del 1 al 10. El programa deberá terminar cuando en algunarepetición, uno de los tres números sea igual al producto de los otros dos números.Muestre los números resultantes. Muestre también la cantidad de repeticiones que serealizaron.

33. El cuadrado de cualquier número terminado en 5 se lo puede formar como el producto:(decenas)(decenas+1) + 25.

Ej. 852 = 10(8)10(9) + 25 = 72254752 = 10(47)10(48) + 25 = 225625

Elabore un programa que verifique si se cumple esta regla con los números 5, 10, 15, 20,..., m. Si no es verdad, muestre el primer número que no cumple esta regla, m es un dato.

ESPOL – Python Programación

Page 132: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 132/293

132

34.  En una empresa multinacional el número usado en la identificación de productos es uncódigo que consta de 13 dígitos: tres para el país, cuatro para la empresa, cinco para elproducto y el dígito de control para detectar errores de digitación con la siguiente regla:

Comenzado por la izquierda hasta el decimo segundo dígito, multiplique el dígito por 1 si la

posición es impar y por 3 si la posición es par. Sumar los resultados de los productos yrestar de la decena superior. Este último resultado debe coincidir con el dígito de control

Escriba un programa que lea un código, valide que tenga trece dígitos, calcule el dífito decontrol e informe el resultado.

Ejemplo. Código:: 7 7 0 2 0 0 4 0 0 3 5 0 8 7x1 + 7x3 + 0x1 + 2x3 + 0x1 + 0x3 + 4x1 + 0x3 + 0x1 + 3x3 + 5x1 + 0x3 = 52

Decena superior: 60

60 – 52 = 8  Coincide con el dígito de control. El código es correcto.

ESPOL – Python Programación

Page 133: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 133/293

133

5.13 Programas que interactúan con un menú

Los programas en los cuales el usuario interactua con el computador de manera contínuase denominan interactivos. Estas aplicaciones son útiles para diversas aplicaciones. En suforma más elemental, se usa un menú para que el usuario elija una opción. Para cada

opción, el computador realizará alguna acción

Estructura básica de un programa interactivo con un menú

1) El programa muestra un menú con las opciones disponibles para el usuario2) El usuario elige una opción3) El programa realiza la acción solicitada

Si la interacción está en un ciclo, el programa debe incluir una opción para salir.

Ejemplo. La siguiente fórmula permite convertir un valor de temperatura entre grados

farenheit y grados celcius:5

c (f 32)9  

Escriba un programa con un menú para realizar la conversión en ambos casos:

Solución

Variablesc: temperatura en °Cf : temperatura en °Fx: opción seleccionada

Programa

fk&%a$5'"\% I$ ($34$59(E59'

OP"8$ G5E$;

45"%(<D+= k&%a$5("5 H 9 kD=

45"%(<D,= k&%a$5("5 k 9 HD=

45"%(<D.= !98"5D=

MU"%4E(<Dd8"C9 E%9 &4L"\% D=

": MUUD+D;

:U"%(<"%4E(<Dc%F5$'$ F59I&' H D==

LU0R`Q<:?.,=

45"%(<L=$8": MUUD,D;

LU"%(<"%4E(<Dc%F5$'$ F59I&' k D==

:U`R0QLB.,b

45"%(<:=

$8": MUUD.D;

45"%(<DtI"\'D=

J5$9K

Note el uso del ciclo while con la condición True que lo mantiene activo, y la instrucción

break para terminar el ciclo

ESPOL – Python Programación

Page 134: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 134/293

Page 135: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 135/293

135

Ejemplo: La siguiente fórmula del interés compuesto relaciona la cantidad de depósitos, elvalor mensual constante de cada depósito, y el interés pactado al invertir el dinero en unacuenta. Se requiere escribir un programa interactivo con un menú para su utilización

n(1 x) 1A P

x

 

=

, en donde

A: Valor acumulado,P: Valor de cada depósito mensual n: Cantidad de depósitos mensuales x: Tasa de interés mensual

Solución

Se escribirá un programa con un menú para calcular alguno de los valores de: A, P, n

Programa

fH\53E89 I$8 "%($5p' L&34E$'(&

:5&3 39(P "34&5( Q

OP"8$ G5E$;

45"%(<D+= l98&5 9LE3E89I&D=

45"%(<D,= n$4\'"(& 3$%'E98D=

45"%(<D.= 7r3$5& I$ I$4\'"(&'D=

45"%(<D/= !98"5D=

&4LU"%4E(<Dd8"C9 E%9 &4L"\%; D=

": &4LUUD+D;

4U:8&9(<"%4E(<Dl98&5 I$8 I$4\'"(& 3$%'E98; D==%U"%(<"%4E(<D7r3$5& I$ I$4\'"(&' 3$%'E98$'; D==

MU:8&9(<"%4E(<Dc%($5p' 9%E98 $% 4&5L$%(9C$; D==

3U>A>+QMR+,

9U4Q<<+B3=QQ%?+=R3

45"%(<Dl98&5 9LE3E89I&; D-9=

$8": &4LUUD,D;

9U:8&9(<"%4E(<Dl98&5 9LE3E89I&; D==

%U"%(<"%4E(<D7r3$5& I$ I$4\'"(&' 3$%'E98$'; D==

MU:8&9(<"%4E(<Dc%($5p' 9%E98 $% 4&5L$%(9C$; D==

3U>A>+QMR+,b

4U9Q3R<<+B3=QQ%?+=b45"%(<DkE&(9 3$%'E98; D-4=

$8": &4LUUD.D;

9U:8&9(<"%4E(<Dl98&5 9LE3E89I&; D==

4U:8&9(<"%4E(<Dl98&5 I$8 I$4\'"(& 3$%'E98; D==

MU:8&9(<"%4E(<Dc%($5p' 9%E98 $% 4&5L$%(9C$; D==

3U>A>+QMR+,b

%U8&F<9Q3R4B+=R8&F<+B3=b

45"%(<D7E3$5& I$ I$4\'"(&'; D-%=

$8": &4LUUD/D;

45"%(<DtI"\'D=J5$9K 

ESPOL – Python Programación

Page 136: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 136/293

136

Prueba del programaTTT

8= ]'+/1 '.)0)+'-/

9= ^(D4%2&/ 0(*%)'+

;= T_0(1/ -( -(D4%2&/%

N= C'+21$+2Y' )*' /D.24*M + 

]'+/1 -(+ -(D4%2&/ 0(*%)'+M ,>> 

T_0(1/ -( -(D4%2&/% 0(*%)'+(%M +,> 

5*&(1`% '*)'+ (* D/1.(*&'Y(M >A>/ 

]'+/1 '.)0)+'-/M 9NJNZO[[9N[aZb8[9[

8= ]'+/1 '.)0)+'-/

9= ^(D4%2&/ 0(*%)'+

;= T_0(1/ -( -(D4%2&/%

N= C'+21

$+2Y' )*' /D.24*M , 

]'+/1 '.)0)+'-/M ,0>>> 

T_0(1/ -( -(D4%2&/% 0(*%)'+(%M ,>> 

5*&(1`% '*)'+ (* D/1.(*&'Y(M >A>/ 

3)/&' 0(*%)'+M 89NOPbPbZa[8JJ898N

8= ]'+/1 '.)0)+'-/

9= ^(D4%2&/ 0(*%)'+

;= T_0(1/ -( -(D4%2&/%

N= C'+21

$+2Y' )*' /D.24*M . ]'+/1 '.)0)+'-/M ,0>>> 

]'+/1 -(+ -(D4%2&/ 0(*%)'+M ,>> 

5*&(1`% '*)'+ (* D/1.(*&'Y(M >A>/ 

T)0(1/ -( -(D4%2&/%M 89NOZN9;b;NP;NNbPN

8= ]'+/1 '.)0)+'-/

9= ^(D4%2&/ 0(*%)'+

;= T_0(1/ -( -(D4%2&/%

N= C'+21

$+2Y' )*' /D.24*M / 

\-24%

TTT

ESPOL – Python Programación

Page 137: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 137/293

137

5.13.1 Ejercicios de programación con menú

Para cada ejercicio escriba y pruebe un programa en la ventana de edición de Python.

1. La suma de los términos de una sucesión aritmética está dada por

ns (a u)2

=

, en donde

s: Suma de los términos,n: Cantidad de términosa: Primer término de la sucesión,u: Último término de la sucesión

Escriba un programa con un menú que permita calcular: s, n, a, u dados los otros 3 datos.

Menú1) Suma de términos

2) Cantidad de términos3) Primer término4) Último término5) Salir

2. El precio de una pizza depende de su tamaño según la siguiente tabla:

Tamaño Precio

Pequeña $5Mediana $8Grande $12

Cada ingrediente adicional cuesta $1.5. Escriba un programa interactivo con un menúpara elegir el tamaño de la pizza, indicar la cantidad de ingredientes adicionales y mostrarel valor a pagar.

Menú1) Pizza pequeña2) Pizza mediana3) Pizza grande4) Salir

ESPOL – Python Programación

Page 138: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 138/293

Page 139: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 139/293

139

Ejemplo: Escribir en la ventana interactiva la siguiente función matemática: 2y f(x) 2x 1=

Definiciòn en la ventana interactiva

!!! #$% %&'()

*+,-'--, . /

0$1203 *

La función está disponible para su uso inmediato:

!!! %&,(

4

!!! *+,-%&5(./

!!! *

54 

Funciones de una línea 

Si una función tiene una forma simple, puede escribirse en forma abreviada en una línea

!!! #$% %&'() 0$1203 ,-'--,./

Se la puede usar igual que la definición anterior

!!! %&,(

4

En el siguiente ejemplo, la función es creada en la ventana de edición y se almacena

separadamente en un archivo con un nombre. Este objeto constituye un módulo. El

nombre del módulo puede coincidir o puede ser diferente al nombre de la función.

Solución

Nombre de la función: f

Nombre del módulo: función 

#$% %&'()

*+,-'--, . /

0$1203 *

Para usarla, debe importarse el módulo

!!! %067 %2389:3 97;601 %

!!! *+%&,(

!!! *

4

NOTA. Los nombres en el lenguaje Python admiten tildes y la letra ñ 

ESPOL – Python Programación

Page 140: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 140/293

140

Las funciones pueden escribirse junto al programa que las usan. En este caso, no serequiere importar el módulo. Es una buena idea hacerlo para probar funciones nuevas queestán siendo desarrollolladas.

Ejemplo.

I$: :<M=;

NU,QMQQ, B +

5$(E5% N

fh5&F5939 ]E$ E'9 89 :E%L"\% :

:&5 " "% 59%F$<0=;

NU:<"=

45"%(<"-N=

Prueba del programa

La ejecución del programa se activa desde la ventana de edición

TTT

> +

+ .

, `

. +`

/ ..

TTT

Un módulo puede incluir varias funciones. Estos módulos pueden considerarse librerías.

Ejemplo.  Defina un módulo con el nombre funciones para almacenar las funcionesf(x)=2x2+1g(x)=3x3+5

I$: :<M=;

NU,QMQQ, B +

5$(E5% N

I$: F<M=;NU.QMQQ. B 0

5$(E5% N

Para usar las funciones en la ventana interactiva debe importar el módulo

TTT :5&3 :E%L"&%$' "34&5(Q

TTT :<.=

+`

TTT F</=

+`1

TTT

ESPOL – Python Programación

Page 141: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 141/293

141

Los programas que requieran usar las funciones pero que se escriben separadamente delas definiciones de las funciones, deben importar el módulo

fh5&F5939 ]E$ E'9 $8 3\IE8& :E%L"&%$'

:5&3 :E%L"&%$' "34&5(Q

:&5 " "% 59%F$<0=;NU:<"=

45"%(<"-N=

Prueba del programaTTT

> +

+ .

, `

. +`

/ ..

TTT

Ejemplo. Defina un módulo (librería) con el nombre geometría  que contenga funcionescon algunas fórmulas de la geometría básica para calcular área y volumen. Incluyafórmulas para el círculo, sector de círculo, segmento de círculo, esfera, cilindro y cono.

:5&3 39(P "34&5(Q

I$: L"5LE8&<5=;

'U4"Q5QQ,5$(E5% '

I$: '$L(&5<5-9=;

'U4"Q5QQ,Q9

5$(E5% '

I$: '$F3$%(&<5-9=;

'U5QQ,Q<4"Q9?>A0Q'"%<9==

5$(E5% '

I$: $':$59<5=;

'U/Q4"Q5QQ,aU/Q4"Q5QQ.R.

5$(E5% '-a

I$: L"8"%I5&<5-P=;

'U,Q4"Q5Q<5BP=

aU4"Q5QQ,QP

5$(E5% '-a

I$: L&%&<5-P=;

FU']5(<PQQ,B5QQ,=

'U4"Q5QFB4"Q5QQ,

aU4"Q5QQ,QPR.5$(E5% '-a

ESPOL – Python Programación

Page 142: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 142/293

142

Para usar las funciones que contienen las fórmulas, debe importarse el módulo. 

Ejemplo.

TTT :5&3 F$&3$(5"9 "34&5(Q

TTT L"5LE8&<,=+,A0__.1>_+/.0`+1,

TTT 'UL"5LE8&<,=

TTT '

+,A0__.1>_+/.0`+1,

TTT L"8"%I5&</-0=

<,,_A+`/_1+>0@/_0+- ,0+A.,1/+,,@1+@./0=

TTT *'-a2UL"8"%I5&</-0=

TTT '

,,_A+`/_1+>0@/_0+

TTT a

,0+A.,1/+,,@1+@./0

Nota:  Los nombres de las variables o parámetros que se escriben para llamar a unafunción pueden ser diferentes respecto a los nombres usados al definir la función.

6.2 Parámetros empaquetados

Los parámetros se pueden enviar a una función empaquetados  en una lista. En estecaso, el nombre de la lista debe estar precedido con un asterisco.

Ejemplo

TTT :5&3 F$&3$(5"9 "34&5(Q

TTT IU*/-02

TTT *'-a2UL"8"%I5&<QI= Los datos van empaquetados en la lista d TTT '

,,_A+`/_1+>0@/_0+

TTT a

,0+A.,1/+,,@1+@./0

6.3 Parámetros por omisión

Es posible asignar valores a parámetros para el caso que no vengan con algún valor al serllamada la función. Esto significa que una función puede ser llamada con menosparámetros que los que se especifican en la definición.

Ejemplo

I$: :E%<9-JU>=;  El segundo parámetro se define por omisión 

 Al llamarla con :E%<.-,= se asigna 3 al parámetro a  y 2 al parámetro b  Al llamarla con :E%<.=  se asigna 3  al parámetro a  y 0 al parámetro  b 

ESPOL – Python Programación

Page 143: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 143/293

143

Ejemplo.  Escriba una función que reciba un número y determine si es un número primo.El resultado que entrega la función será un valor lógico según corresponda.

Junto a la función escriba un programa que liste los números primos existentes en unrango especificado

SoluciónSi el programa se escribe junto con la función, primero debe escribirse la función ydespués el programa. En este caso, el programa no necesita importar la funciónque lo antecede.

Variablesn:  Número para probar si es primoc: conteo de números divisores en la funcióna,b: rango de búsqueda de número primos

La función entrega un resultado lógico: True o False 

f:E%L"\% 45"3&

I$: 45"3&<%=;

LU>

:&5 " "% 59%F$<+-%B+=;

": %i"UU>;

LULB+

": LT,;

5$(E5% H98'$

$8'$; 

5$(E5% G5E$

fh5&F5939 ]E$ 8"'(9 45"3&' $% E% 59%F&

9U"%(<"%4E(<Dn$'I$; D==

JU"%(<"%4E(<Dg9'(9; D==

:&5 % "% 59%F$<9-JB+=;

": 45"3&<%=;

45"%(<D7r3$5& 45"3&; D-%=

Prueba del programaTTT

n$'I$; ,> 

g9'(9; /> 

7r3$5& 45"3&; ,.

7r3$5& 45"3&; ,`

7r3$5& 45"3&; .+

7r3$5& 45"3&; .1

Nota: Las instrucciones de prueba se las ha escrito junto a la función. Esta es una buenapráctica para desarrollar funciones. Después se la puede almacenar separadamente paraque pueda ser importada desde cualquier programa o desde la ventana interactiva,

ESPOL – Python Programación

Page 144: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 144/293

144

Para el siguiente ejemplo se almacenará la función primo  separadamente para que estédisponible para otros programas o para que pueda usarse desde la ventana interactiva. Lafunción primo  será almacenada con el mismo nombre: primo. Con este nombre deberáser importada. Cuando el programa se escribe junto a la función no es necesario importar.

f:E%L"\% 45"3&I$: 45"3&<%=;

LU>

:&5 " "% 59%F$<+-%B+=;

": %i"UU>;

LULB+

": LT,;

5$(E5% H98'$

$8'$; 

5$(E5% G5E$

Para acceder a la función, el programa debe importar el módulo primo 

fh5&F5939 ]E$ 8"'(9 45"3&' $% E% 59%F&

:5&3 45"3& "34&5( 45"3&

9U"%(<"%4E(<Dn$'I$; D==

JU"%(<"%4E(<Dg9'(9; D==

:&5 % "% 59%F$<9-JB+=;

": 45"3&<%=;

45"%(<D7r3$5& 45"3&; D-%=

Los resultados de una prueba son iguales a los del ejemplo anterior

Ejemplo. Escriba otro programa para usar la función primo.  Encuentre parejas denúmeros primos cuya suma sea igual a un número ingresado al inicio en el programa. 

fh5&F5939 ]E$ $%LE$%(59 495$C9' I$ 45"3&'

:5&3 45"3& "34&5( 45"3&

%U"%(<"%4E(<Dc%F5$'$ E% $%($5& 4&'"("a&; D==

:&5 " "% 59%F$<%=;

:&5 C "% 59%F$<%=;

": 45"3&<"= 9%I 45"3&<C= 9%I "BCUU%;

45"%(<Dh95$C9 I$ 45"3&'; D-"-C=

Prueba del programaTTT

c%F5$'$ E% $%($5& 4&'"("a&; +_ 

h95$C9 I$ 45"3&'; . +.

h95$C9 I$ 45"3&'; 0 ++

h95$C9 I$ 45"3&'; ++ 0

h95$C9 I$ 45"3&'; +. .

Si no se desean parejas repetidas, se puede modificar el inicio del rango del ciclo interno:

:&5 C "% 59%F$<"-%=;

ESPOL – Python Programación

Page 145: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 145/293

145

6.4 Espacio de las variables de programas y funciones

Las variables creadas en los programas se pueden acceder fuera del programa, en laventana interactiva. En cambio, las variables definidas dentro de una función son locales,es decir no se pueden acceder fuera de la función. La función normalmente solo se puede

comunicar mediante parámetros y mediante los resultados entregados

Ejemplo.  Realizar una prueba nueva del programa anterior que busca los números primosen un rango especificado:

f:E%L"\% 45"3&

I$: 45"3&<%=;

LU>

:&5 " "% 59%F$<+-%B+=;

": %i"UU>;

LULB+": LT,;

5$(E5% H98'$

$8'$; 

5$(E5% G5E$

fh5&F5939 ]E$ 8"'(9 45"3&' $% E% 59%F&

9U"%(<"%4E(<Dn$'I$; D==

JU"%(<"%4E(<Dg9'(9; D==

:&5 % "% 59%F$<9-JB+=;

": 45"3&<%=;45"%(<D7r3$5& 45"3&; D-%=

TTT

n$'I$; ,> 

g9'(9; /> 

7r3$5& 45"3&; ,.

7r3$5& 45"3&; ,`

7r3$5& 45"3&; .+

7r3$5& 45"3&; .1

TTT 9,>

TTT J

/>

TTT L

793$d55&5; %93$ DLD "' %&( I$:"%$I

Se puede observar que los contenidos de las variables a, b creadas en el programa sonvisibles en la ventana interactiva. Por otra parte, ni en el programa, ni desde la ventanainteractiva se puede acceder a la variable c  que es creada dentro de la función.

ESPOL – Python Programación

Page 146: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 146/293

146

6.5 Declaración de variables globales

Con la declaración

F8&J98 a+-a,- AAA

Es posible hacer que los programas pueden acceder a las variables v1, v2, ...  creadasdentro de una función. También se tendrá acceso a estas variables desde la ventanainteractiva.

Ejemplo.

I$: :E%<M=;

(U,QM

NU(B0

5$(E5% N

fh5&F5939 ]E$ E'9 :E%

MU.

5U:E%<M=

45"%(<5=

45"%(<(=

Prueba del programa

TTT

++793$d55&5; %93$ D(D "' %&( I$:"%$I Error  al intentar imprimir t

El programa no tiene acceso a la variable t creada en la función y por lo tanto, local

En la siguiente prueba se declara  t dentro de la función como variable global 

I$: :E%<M=;

F8&J98 (

(U,QM

NU(B0

5$(E5% N

fh5&F5939 ]E$ E'9 :E%

MU.

5U:E%<M=

45"%(<5=

45"%(<(=

Prueba del programaTTT

++_ El programa puede imprimir el contenido de la variable t 

ESPOL – Python Programación

Page 147: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 147/293

Page 148: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 148/293

Page 149: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 149/293

149

Ejemplo.  Escriba una función recursiva  para calcular la suma de los cubos de losprimeros n números naturales usando la definición anterior.

Se la almacenará en un módulo con el mismo nombre 

I$: 'L<%=;": %T+;

5U'L<%?+=B%QQ.

$8'$;

5U+

5$(E5% 5

Prueba de las funciones. Ambas versiones producen el mismo resultado

TTT :5&3 'L "34&5( 'L

TTT 5U'L</=TTT 5

+>> 

NOTA: El límite de llamadas recursivas Python  V3.4.1 para este ejemplo fue menor a1000. La recursión es realizada internamente por el traductor mediante llamadasrecurrentes de manera similar a su aplicación manual.

Ejemplo.  Escriba una función recursiva  para contar en cuantos intentos se puedeadivinar el número de un dado.

:5&3 59%I&3 "34&5( Q

I$: 9I"a"%9<"%($%(&=;

%U59%I"%(<+-_=

MU"%(<"%4E(<DtI"a"%9 $8 %r3$5&; D==

": MVU%;

45"%(<DH9889'($; "%($%(9 &(59 a$XD=

"%($%(&U"%($%(&B+

9I"a"%9<"%($%(&=

$8'$;

45"%(<DtL$5(9'($ $% D-"%($%(&=

Prueba desde la ventana interactiva

TTT :5&3 9I"a"%9 "34&5( 9I"a"%9

TTT 9I"a"%9<+= Se inicia la función en el intento 1 tI"a"%9 $8 %r3$5&; 0 

H9889'($; "%($%(9 &(59 a$X

tI"a"%9 $8 %r3$5&; / 

H9889'($; "%($%(9 &(59 a$X

tI"a"%9 $8 %r3$5&; _ 

tL$5(9'($ $% .

ESPOL – Python Programación

Page 150: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 150/293

150

Ejemplo.  Escriba una función recursiva con el nombre fib para obtener el n-ésimo término de

la secuencia de Fibonnaci.

n:  1, 2, 3, 4, 5, 6, 7, 8, 9, . . . 

fib(n):  1, 1, 2, 3, 5, 8, 13, 21, 34, . . .

SoluciónNombre de la función: fib 

Nombre del módulo: fib 

En la secuencia se puede observar que cada término de fib(n) es igual a la suma de los

dos términos anteriores: fib(n) = fib(n-2) + fib(n-1) para n>2. Mientras que el resultado es

fib(n) = 1 para n=1 y n=2.

!"# #%&'()*

%# (++, -. (++/*

."01.( ,"23"*

."01.( #%&'(4/)5#%&'(4,)

Prueba de la función en la ventana interactiva

666 #.-7 #%& %78-.0 #%& 

666 #%&'9)

:

666 #%&'/)

,

666 #%&';)

<=

666 #%&'/>)

?>@/>

En este ejemplo, la recursión es muy costosa computacionalmente pues cada llamada a la

función produce dos nuevas llamadas recurrentemente y la secuencia de llamadas se abre

en ramificaciones rápidamente. Se llega muy pronto al límite máximo de llamadas

recursivas permitidas, además la ejecución es ineficiente.

Ejemplo.

fib(6) = fib(4) + fib(5)

= fib(2) + fib(3) + fib(3) + fib(4)

= 1 + fib(1) + fib(2) + fib(1) + fib(2) + fib(2) + fib(3)

= 1 + 1 + 1 + 1 + 1 + 1 + fib(1) + fib(2)

= 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1

= 8

La recursión debe ser usada con precaución y debe evitarse cuando la función genera más

de una llamada a si misma en cada invocación, como en el ejemplo anterior:

ESPOL – Python Programación

Page 151: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 151/293

151

6.9 Funciones generadoras

Una función generadora es una función especial para producir una secuencia de valores

Ejemplo. Suponer que se necesita una lista de los cubos de los números naturales

La siguiente es una función elemental típica que recibe un entero y entrega su cubo. Estasfunciones se limitan a entregar un valor :

I$: LEJ&<%=;

LU%QQ.

5$(E5% L

Mediante una instrucción de repetición se puede llamar sucesivamente a la función pararecibir cada resultado:

:5&3 LEJ& "34&5( LEJ&

:&5 % "% 59%F$<0=;

LULEJ&<%=

45"%(<L=

Prueba del programa

>>>>

+

@

,1

_/

Una manera diferente de enfrentar este pequeño problema es crear la lista de valoresmediante un dispositivo que produce la secuencia pero entrega los valores uno a la vez.Este dispositivo se denomina función generadora 

Una función generadora usa la palabra especial yield para entregar uno por uno  losvalores de la secuencia. Mediante la función especial next  se pueden solicitarsucesivamente cada valor de la secuencia.

Ejemplo. Una función generadora para producir la secuencia de n cubos

I$: LEJ&<%=;

:&5 " "% 59%F$<%=;

LU"QQ.

N"$8I L

ESPOL – Python Programación

Page 152: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 152/293

152

Activación de la función generadora de cubos en la ventana interactiva

TTT :5&3 LEJ& "34&5( LEJ&

TTT LULEJ&<0= Inicia el generador  TTT 45"%(<%$M(<L== La función next solicita el siguiente valor  

>TTT 45"%(<%$M(<L==

+

TTT 45"%(<%$M(<L==

@

TTT 45"%(<%$M(<L==

,1

TTT 45"%(<%$M(<L==

_/

TTT 45"%(<%$M(<L==

!(&4c($59("&%

También se puede solicitar cada valor mediante una instrucción iterativa y el operador inque implícitamente usa next  para obtener el siguiente valor de la secuencia.

Un programa para obtener cada valor de la secuencia creada por la función generadoracubo:

:5&3 LEJ& "34&5( LEJ&:&5 L "% LEJ&<0=;

45"%(<L=

Prueba del programaTTT

>

+

@

,1

_/TTT

Los generadores actúan de manera diferente a las funciones normales. Una funciónnormal es llamada una sola vez y entrega los resultados. Por otra parte, la funcióngeneradora produce una secuencia pero solo entrega un valor a la vez por lo que debe seractivada sucesivamente en forma explícita con next  o en forma implícita con el operadorin para obtener cada uno de los siguientes valores.

ESPOL – Python Programación

Page 153: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 153/293

153

El concepto de función generadora permite definir generadores infinitos 

Ejemplo. Definición de un generador infinito de cubos:

I$: LEJ&<=;

%U>OP"8$ G5E$;

LU%QQ.

N"$8I L

%U%B+

Un programa que usa el generador infinito necesita interrumpir la secuencia:

:5&3 LEJ& "34&5( LEJ&

:&5 L "% LEJ&<=;

45"%(<L=

": LT.>>;

J5$9K

Prueba del programaTTT

>

+

@

,1

_/+,0

,+_

./.

Desde la ventana interactiva

TTT :5&3 LEJ& "34&5( LEJ&

TTT :&5 L "% LEJ&<=;

45"%(<L=

>

+@

,1

_/

+,0

,+_

./.

0+,

1,`  Se necesita interrumpir la secuencia infinita presionando las teclas Ctrl C A A A

ESPOL – Python Programación

Page 154: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 154/293

Page 155: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 155/293

155

Interrupción de un ciclo doble

Una función generadora permite definir un dispositivo para interrumpir de manera eleganteun ciclo doble:

Suponer que se desea encontrar el primer caso en el que los valores i, j cumplen la

condición:

,". B .C,  es divisible para 1V para "-C U +-,-.-A A A-`

En el siguiente programa, la instrucción break  solamente interrumpe las repeticiones delciclo en el que se ejecuta la instrucción break, en este caso el ciclo interno:

:&5 " "% 59%F$<+-+>=;

:&5 C "% 59%F$<+-+>=;

%U,Q"QQ.B.QCQQ,

": %i1UU>;

45"%(<"-C-%=

J5$9K

Prueba del programaTTT

+ , +/

, , ,@

/ , +/>

1 1 @..

@ , +>._

` , +/1>TTT

La estrategia para salir de ambos ciclos es convertirlos en un solo ciclo. Para esto seescribe una función generadora que produce una nueva pareja de índices "-C cada vezque es llamada la función. En este caso, la instrucción break al interrumpir un ciclo, esequivalente a interrumpir los dos ciclos incluidos en el programa anterior.

I$: 59%F&zI&J8$<%-3=;:&5 " "% 59%F$<+-%=;

:&5 C "% 59%F$<+-3=;N"$8I "-C

:&5 "-C "% 59%F&zI&J8$<+>-+>=;%U,Q"QQ.B.QCQQ,": %i1UU>;

45"%(<"-C-%=J5$9K 

Prueba del programaTTT

+ , +/TTT

ESPOL – Python Programación

Page 156: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 156/293

Page 157: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 157/293

157

11. Escriba una función fact(n)  que reciba un numero entero n y devuelva su factorial.Escriba un programa de prueba que genere un número aleatorio entero k entre 1 y 10. Usela función y muestre la suma de los factoriales de los primeros k números naturales

12. Escriba una función sumadiv(n) que reciba un número entero n y devuelva la suma de

sus divisores. Escriba un programa de prueba que ingrese un dato desde el teclado, usela función y muestre el resultado en la pantalla

13. Escriba un módulo con el nombre convertir que contenga dos funciones:

a) [r,t]=polar(x, y)  que reciba las coordenadas cartesianas  x,y  y entregue lascoordenadas polares r, t 

b) [x,y]=cartesiana(r, t)  que reciba las coordenadas polares r, t y entregue lascoordenadas cartesianas x, y 

Formulación: 2 2r x y , t arctan(y / x), x r cos(t), y r sen(t)  = = =

 

14. El siguiente es un algoritmo para generar un número aleatorio entero (seudo aleatorio)1) Dado un número entero x2) Sume los cuadrados de los dígitos del número. Este resultado es el número

aleatorioa) Escriba una función c=aleatorio(x) que entregue el resultado producido.b) Escriba un programa que lea un valor inicial para x y llame a la función aleatorio 

repetidamente, enviando como nuevo dato, el resultado que entrega la función.Determine cuantas veces hay que llamar a la función aleatorio  hasta que elresultado sea igual a algún valor que ya salió anteriormente. Esta cantidad sedenomina longitud de la secuencia aleatoria

15. La siguiente definición recursiva produce el máximo común divisor entre dos númerosenteros positivos. Escriba y pruebe una función con esta definición

mcd(a b,b), a b

mcd(a,b) mcd(a,b- a), b a

a, a b

  >

= >

=

 

16.  Analice la siguiente definición recursiva para determinar cuantos dígitos tiene unnúmero entero. Escriba y pruebe una función. Note el uso de la división entera: // 

nd( n//10 ), n 10nd(n)

1, n 10

=

<

 

17. Escriba una función recursiva para obtener la cantidad de dígitos impares que contieneun número entero positivo.

18. Escriba una función recursiva para calcular combinaciones de números con ladefinición:

C(m,n) = C(m-1, n-1) + C(m-1, n)Sabiendo que: C(m, n)=1, si  n=0 ó n=m 

C(m, n)=m, si  n=1 ó n=m-1

19. Escriba una funcion generadora y un programa de prueba para obtener la secuenciade Ulam que reciba un valor inicial y entregue sucesivamente los valores de la secuencia.

ESPOL – Python Programación

Page 158: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 158/293

158

7 Tipos de datos estructurados

 Además de los tipos de datos básicos revisados en las secciones anteriores, Python admite agrupaciones o estructuras de datos denominadas  colecciones  que permitenagrupar datos y que pueden tener diferente tipo. Estos tipos de datos estructurados o

colecciones son: Listas, Tuplas, Cadenas de caracteres (strings), Diccionarios  yConjuntos. Los tipos de datos estructurados se pueden combinar y formar tipos de datoscompuestos.

Este capítulo es muy importante. Para tomar una idea general de los tipos de datosestructurados se han organizado las secciones de la siguiente forma:

En las secciones 7.1, 7.2, y  7.3  se definen las estructuras de datos listas, tuplas  ycadenas de caracteres. Se proporcionan ejemplos usando la ventana interactiva dePython. Es fundamental que el usuario realice la práctica computacional.

En las secciones 7.4 y 7.5 se definen las estructuras de datos diccionarios y conjuntos y se describen las operaciones básicas para su manejo.

Las secciones 7.6, 7.7 y 7.8  son más extensas. Se describen operadores, métodos,funciones y programas para manejo y aplicación de los tipos de datos estructurados: listasy cadenas de caracteres y casos especiales del tipo de datos lista: vectores y matrices.

El lenguaje Python dispone además de librerías especiales para operar con los tipos dedatos estructurados.

Las estructuras de datos son tipos de datos dinámicos, es decir que pueden extenderse omodificarse en forma interactiva y durante la ejecución de programas.

7.1 Listas

Las listas constituyen el tipo de datos estructurado más importante, versátil y común de Python.

Una lista es una colección de datos que pueden tener diferente tipo. Los datos se escribenentre corchetes, separados por comas.

*I9(&- I9(&- I9(&- AAA- I9(&2

Una propiedad fundamental de las listas es que los componentes de la lista   se puedenmodificar  después de haberlas creado. 

Las celdas son numeradas desde  cero. El  primer   componente o primera celda, tieneíndice 0. El segundo componente, o segunda celda, tiene índice 1, etc.

Se puede acceder a los componentes de una lista mediante un índice entre corchetes

Se puede acceder a varios elementos o componentes mediante un rango para el índice.

El rango no incluye el extremo derecho especificado

ESPOL – Python Programación

Page 159: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 159/293

159

Ejemplos. Descipción de una lista con 5 componentes de tipo diferente 

TTT M U *D9JLD- 1.- 0A,@- D5'D- 02

La representación de la lista en celdas de memoria numeradas desde cero:

DabcD  73 5.28 DrsD  50 1 2 3 4

TTT M*>2  Componente 0 (ubicado en la celda 0) D9JLD (es el primer componente o primera celda) 

TTT M*,2  Componente 2 (ubicado en la celda 2) 0A,@ (es el tercer componente o tercera celda) 

TTT M*+;/2  Componentes desde 1 hasta el 3 (celdas 1 a 3)

*1.- 0A,@- D5'D2  (el rango no incluye el extremo final)TTT M*,;2  Componentes 2 hasta el final (celda 2 hasta el final) *0A,@- D5'D- 02  los resultados también son listas 

TTT M*;/2  Componenetes desde el primero hasta el 3 *D9JLD- 1.- 0A,@- D5'D2  (el rango no incluye el extremo final) 

TTT M*?+2  Es el último componente (componente 4) 0

TTT M*?,2  Penúltimo componente (componente 3) D5'D

TTT M*?.2

0A,@

TTT M*?/2

1.

TTT M*;?.2  Componentes desde el primero hasta el -4 *D9JLD- 1.2  (el rango no incluye el extremo final)

TTT M*?,;2  Componentes desde el penúltimo hasta el final *D5'D- 02

TTT M*;?+2  Todos los componentes menos el último *D9JLD- 1.- 0A,@- D5'D2  (el rango no incluye el extremo final) 

TTT M*+2U/0  Los componentes de una lista  se pueden modificar  TTT M

*D9JLD- /0- 0A,@- D5'D- 02  La lista fue modificada 

ESPOL – Python Programación

Page 160: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 160/293

160

TTT M*+;,2 */02 El resultado es una lista TTT M*+2

/0  El resultado es un elemento 

TTT M*_2 El índice fuera de rango produce un error  

c%I$Md55&5; 8"'( "%I$M &E( &: 59%F$

TTT MU*,-/-0-.-1-_-@-`-+2

TTT M*>;?+;,2 Un tercer índice indica el incremento*,- 0- 1- @2

TTT M*;;?+2 El incremento -1 se puede usar para invertir*+- `- @- _- 1- .- 0- /- ,2

Lista con componentes de tipo lista

TTT MU*+,.-Dt8F$J59D-*0>-1>2-0-1.A,02

TTT M*>2

+,.

TTT M*+2

Dt8F$J59D

TTT M*,2

*0>- 1>2

TTT M*,2*+2

1>

TTT M*,2*+2U10

TTT M

*+,.- Dt8F$J59D- *0>- 102- 0- 1.A,02

TTT (U**+,.-DW95s9D-0>A,2-*,./-D^E9%D-,/A,22

TTT (*+2

*,./- D^E9%D- ,/A,2

TTT (*+2*,2

,/A,

Listas organizadas con listas en más niveles

TTT MU***,.-/02-*D9JLD-/,22-.02

TTT M*>2

**,.- /02- *D9JLD- /,22

TTT M*+2

.0

TTT M*>2*>2*,.- /02

ESPOL – Python Programación

Page 161: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 161/293

161

TTT M*>2*>2*+2

/0

TTT M*>2*+2*>2

D9JLD

TTT M*>2*+2*>2UD5'(ED

TTT M***,.- /02- *D5'(ED- /,22- .02

Vectores

Un vector o arreglo de una dimensión es una lista con datos del mismo tipo, usualmentenumérico. En una sección posterior se revisarán las operaciones, funciones y aplicacionescon vectores, estructuras fundamentales en matemáticas e ingeniería.

Ejemplo.

TTT aU*.,- 1/- `,- ,0- @+2

TTT a*>2

.,

TTT a*,2

`,

TTT a*+;/2

*1/- `,- ,02

ESPOL – Python Programación

Page 162: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 162/293

162

Matrices

Una matriz o arreglo de dos dimensiones es una lista cuyos elementos son listas quetienen la misma longitud y contienen elementos del mismo tipo, usualmente numérico.

Estos objetos, igual que los vectores, son fundamentales en aplicaciones matemáticas yde ingeniería. En otra sección se revisarán las operaciones, funciones y aplicaciones dematrices y la librería NumPy que facilita el manejo de vectores y matrices.

Ejemplos.

TTT 9U**,.-/0-_.2-*1,-@+-`+2-*0_-_/-.12-*./-10-,_22

Su representación conceptual es un cuadro en dos dimensiones.Las filas son horizontales y las columnas son verticales numeradas desde cero

0 23 45 631 72 81 912 56 64 373 34 75 26

0 1 2

TTT 9

**,.- /0- _.2- *1,- @+- `+2- *0_- _/- .12- *./- 10- ,_22

TTT 9*+2  Fila 1 (es la segunda fila numerada desde cero) *1,- @+- `+2

TTT 9*+2*,2  Componente ubicado en la fila 1, columna 2 `+  (la numeración se inicia en cero)

ESPOL – Python Programación

Page 163: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 163/293

163

7.2 Tuplas

Una tupla es una colección de datos que pueden tener diferente tipo. Los datos seescriben entre paréntesis, separados por comas con la siguiente sintaxis. Opcionalmentese pueden omitir los paréntesis:

<I9(&- I9(&- I9(&- AAA- I9(&=

Los componentes de una tupla no se pueden modificar  después de haber sido creados.

Las celdas son numeradas desde  cero. El  primer  componente, o primera celda, tieneíndice 0. El segundo componente, o segunda celda, tiene índice 1, etc.

Se puede acceder a los componentes de una tupla mediante un índice entre corchetes

Se puede acceder a varios elementos o componentes mediante un rango para el índice.

El rango no incluye el extremo derecho especificado

Ejemplo. Descipción de una tupla con 5 componentes de tipo diferente 

TTT M U <D9JLD- 1.- 0A,@- D5'D- 0=

La representación de una tupla en celdas de memoria numeradas desde cero:

DabcD  73 5.28 DrsD  50 1 2 3 4

Son los mismos ejemplos usados en la sección anterior para describir las listas, pero ahoralos resultados son tuplas. En la sección anterior, los resultados eran listas.

TTT M*>2  Componente 0 (ubicado en la celda 0) D9JLD (es el primer componente o primera celda) 

TTT M*,2  Componente 2 (ubicado en la celda 2) 0A,@ (es el tercer componente o tercera celda) 

TTT M*+;/2  Componentes desde 1 hasta el 3 (celdas 1 a 3) <1.- 0A,@- D5'D=  (el rango no incluye el extremo final)

TTT M*,;2  Componentes 2 hasta el final (celda 2 hasta el final) <0A,@- D5'D- 0=  Los resultados también son tuplas 

TTT M*+2 U /0 Error: no se pueden modificar los elementos de tuplas

GN4$d55&5; D(E48$D &JC$L( I&$' %&( 'E44&5( "($3 9''"F%3$%(

ESPOL – Python Programación

Page 164: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 164/293

164

Tupla con componentes de tipo lista

TTT MU<.-*_-12-@-</-0=-,=

TTT M*+2

*_- 12

TTT M*+2*+2U.

TTT M

<.- *_- .2- @- </- 0=- ,=

TTT M*.2*+2U. Error : No se pueden modificar componentes de tuplas

GN4$d55&5; D(E48$D &JC$L( I&$' %&( 'E44&5( "($3 9''"F%3$%(

Los paréntesis son opcionales para definir tuplas

TTT M U <D9JLD- 1.- 0A,@- D5'D- 0=

TTT M

<D9JLD- 1.- 0A,@- D5'D- 0=

Se puede escribir

TTT M U D9JLD- 1.- 0A,@- D5'D- 0

TTT M

<D9JLD- 1.- 0A,@- D5'D- 0=

ESPOL – Python Programación

Page 165: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 165/293

165

7.3  Cadenas de caracteres (strings)

Una cadena de caracteres o string, es una colección de caracteres que se escriben entrecomillas simples o comillas dobles:

DL959L($5$'D6L959L($5$'6

Las cadenas de caracteres también se pueden indexar pero los componentes de unacadena de caracteres no se pueden modificar mediante una asignación. Posteriormentese estudiarán funciones especiales para modificar el contenido de las cadenas decaracteres.

Las celdas son numeradas desde cero. El primer  carácter, o primera celda, tiene índice0. El segundo carácter, o segunda celda, tiene índice 1, etc.

Se puede acceder a los caracteres de una cadena mediante un indice entre corchetes.

Se puede acceder a varios caracteres o componentes mediante un rango para el índice.

El rango no incluye el extremo derecho especificado

Ejemplos.

TTT MUD45&F5939D

La representación de una cadena en celdas de memoria numeradas desde cero:

DpD  Dr D  DoD  DgD  Dr D  DaD  DmD  DaD 0 1 2 3 4 5 6 7

TTT M*>2  el primer carácter o primera celda (es la celda 0) D4D

TTT M*;/2 los caracteres desde la celda 0 hasta la celda 3D45&FD (el rango no incluye el último) 

TTT M*?+2  el último carácter  D9D

TTT M*?,;2  los dos últimos caracteres D39D

TTT M*;?+2  todos los caracteres menos el último D45&F593D  (en el rango no se incluye el extremo final) 

TTT M*+2U DED Error: no se pueden modificar los componentes

GN4$d55&5; D'(5D &JC$L( I&$' %&( 'E44&5( "($3 9''"F%3$%(

ESPOL – Python Programación

Page 166: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 166/293

Page 167: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 167/293

167

TTT M*+,.2*>2

Dt%"(9D

TTT M*+,.2*+2

,0

TTT M*+,.2*>2UDW95s9D Se puede cambiar el nombre TTT M

{/0_; *Dk953$%D- /02- ,./; *Dd8$%9D- ./2- +,.; *DW95s9D- ,02|

TTT M*+,.2*+2U,1  Se puede cambiar la edad TTT M

{/0_; *Dk953$%D- /02- ,./; *Dd8$%9D- ./2- +,.; *DW95s9D- ,12|

Eliminar elementos del diccionario dada una clave: del 

TTT I$8 M*,./2

TTT M

{/0_; *Dk953$%D- /02- +,.; *DW95s9D- ,12|

Listar las claves: keys

TTT LUMAK$N'<=

TTT 8"'(<L=

*/0_- +,.2

Detectar si el diccionario contiene una clave: in 

TTT +,. "% M

G5E$

TTT ,./ "% M

H98'$

Agregar elementos a un diccionario

>>> x[572]=['Juanita',26]>>> x

{456: ['Carmen', 45], 123: ['María', 27], 572: ['Juanita', 26]}

Recorrido de los componentes de un diccionario

TTT :&5 " "% M;

45"%(<"-M*"2=

/0_ *Dk953$%D- /02

+,. *DW95s9D- ,12

01, *D^E9%"(9D- ,_2

ESPOL – Python Programación

Page 168: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 168/293

168

7.5 Conjuntos

Los conjuntos se construyen como una lista de valores encerrados entre llaves. Tambiénse pueden definir conjuntos con la instrucción '$(<L= en donde c  representa cualquierobjeto que se pueda indexar, como tuplas, listas o cadenas de caracteres. Por definición,

los componentes de un conjunto no están ordenados ni contienen elementos repetidos.

Se pueden usar los conjuntos para eliminar elementos repetidos y realizar operacionesmatemáticas entre conjuntos:

El resultado de la definición y operación entre conjuntos es un objeto que no  se puedeindexar. Pero se lo puede convertir nuevamente a un objeto indexable.

Sean: a, b: conjuntosOperación Resultado

9 } J Intersección de conjuntos

9 ~ J Unión de conjuntos9 y J Diferencia de conjuntos9 • J Diferencia simétria de conjuntos

Ejemplos

TTT EU{/-_-1-.-@-_| Definición directa de un conjunto TTT E

{8, 3, 4, 6, 7}

>>> r=set([7,3,8,6,9]) Definición de un conjunto desde una lista >>> r{8, 9, 3, 6, 7}

TTT MU*1-_-`-_-.-1-/2 Listas TTT NU*0-1-/-@-`-/2

TTT 9U'$(<M= Se convierten en conjuntos TTT 9

{`- .- /- _- 1|  No tienen elementos repetidos TTT JU'$(<N=

TTT J

{@- `- /- 0- 1|

TTT LU9}J  Operaciones entre los conjuntos a y b TTT L

{`- /- 1|

TTT LU9~J

TTT L

{.- /- 0- _- 1- @- `|

TTT LU9?J

TTT L

{.- _|

ESPOL – Python Programación

Page 169: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 169/293

169

!!! #$%&'

!!! #

()* +* ,* -.

>>> c[1] Error : los conjuntos no se pueden indexar

/012344546 78297 5':2#9 ;528 <59 8=11549 ><;2?><@

Conversión de un conjunto a lista con la función list

!!! ;$A>89B#C La función list convierte el conjunto en una lista 

!!! ;

D)* +* ,* -E

!!! ;DFE  La lista es indexable y modificable 

+

Un ejemplo con cadenas de caracteres

!!! ?$7G%92G%9>#%G2<927 cadena, indexable pero no modificable

!!! 9$829B?C

!!! 9

(7#7* 727* 797* 7%7* 7<7* 7>7* 7G7.  Conjunto sin repeticiones, no indexable

!!! 4$A>89B9C

!!! 4

D7#7* 727* 797* 7%7* 7<7* 7>7* 7G7E  Lista de caracteres sin repeticiones

!!! 4DFE$7H7 La lista es indexable y modificable 

!!! 4

D7%7* 7H7* 797* 727* 7<7* 7#7* 7G7E

Agregar elementos a un conjunto con la función add 

!!! ?$829BDI*)*-*,*JEC

!!! ?

(-* J* )* ,* I.

!!! ?K%;;B+C

!!! ?

()* +* ,* I* -* J.

Pertenecia de un elemento en un conjunto con el operador in 

!!! , >< ?

/4=2

!!! L >< ?

M%A82

ESPOL – Python Programación

Page 170: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 170/293

170

7.6 Programación de iteraciones con tipos de datos estructurados

Las iteraciones, repeticiones o ciclos son procedimientos fundamentales para resolverproblemas en computación, especialmente cuando se las usa para recorrer o iterar sobrecolecciones de datos.

En esta sección se proponen algunas sugerencias para plantear mejor el uso deiteraciones con el objetivo de que la programación sea más clara y eficiente. En general,el usuario debe tratar de reducir el uso de variables y concentrarse en los objetosimportantes del problema que trata de resolver.

Para desarrollar la idea anterior, supondremos que se tiene una lista con el nombrecursos  con los nombres de las materias que ofrece una institución educativa. Cadaelemento de esta lista debe ser procesado. Por simplicidad, simplemente se lo imprimirá.

La manera clásica que usan algunos programadores para iterar sobre una lista es

definiendo un índice y controlándolo en forma explícita como se muestra a continuación:

LE5'&' U *A A A 2

%U8$%<LE5'&'=

"U>

OP"8$ "S%;

LULE5'&'*"2

45"%(<L=

"U"B+

El índice es una variable adicional que hay que atender pero lo que realmente interesa sonlos componentes de la lista

Una mejor manera de iterar sobre los elementos de la lista es dejar que la instrucción forcontrole el índice. Los valores para el índice son generados con la función range:

LE5'&' U *A A A 2

:&5 " "% 59%F$<8$%<LE5'&'==;

LULE5'&'*"2

45"%(<L=

Igualmente se utiliza un índice, pero al menos ya no necesitamos controlarlo de formaexplícita.

Existe una manera más clara de iterar sobre los elementos de la lista. Esta consiste enacceder directamente a los elementos, con la siguiente forma:

LE5'&' U *A A A 2

:&5 L "% LE5'&';

45"%(<L=

Esta repetición evita el uso de variables adicionales y permite concentrar la atención en loque realmente importa: los componentes de la lista.

ESPOL – Python Programación

Page 171: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 171/293

Page 172: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 172/293

172

7.7 Operaciones con listas

En esta sección se establecen los instrumentos para desarrollar aplicaciones con listas. Lamayoría de los ejemplos usarán listas numéricas, comunmente denominados vectores oarreglos de una dimensión. Sin embargo, se pueden aplicar a listas con elementos de tipos

diferentes.

7.7.1 Métodos, operadores y funciones para manejo de listas

Python dispone de dispositivos denominados Clases que contienen funciones definidaspara ciertas aplicaciones. Estas funciones se denominan métodos y la metodología sedenomina Programación Orientada a Objetos la cual se estudiará posteriormente.

Para manejo de listas, Python tiene una clase denominada list. Esta clase es residente enla librería estándar y no necesita importarse para usarla.

 Al crear una variable u objeto de tipo lista se tiene acceso a las funciones o métodosdefinidos en la clase y se los usa con la siguiente notación:

objeto.método

 Algunos métodos disponibles en la clase list:

Sean x: objeto de tipo listae: un elemento

Método ResultadoMA944$%I<$=   Agrega a la lista x el elemento e MA"%'$5(<"-$=  Inserta e en la posición i de la lista x MAL&E%(<$=  Conteo de instancias de e en la lista x MA5$3&a$<$=  Elimina el primer elemento e de la lista x MA"%I$M<$=  Entrega la posición del primer elemento e en x MA'&5(<=  Ordena x en forma crecienteMA5$a$5'$<=  Invierte la lista x MAL8$95<=  Vaciar la lista x 

 Algunas de estas funciones producen un error ValueError   si no encuentran el elemento,

por lo tanto primero debería hacerse una validación.

Operadores y funciones adicionales para listas

B  Operador de concatenación de listas

"%  Operador de inclusión%&( "%

I$8  Elimina elementos de una lista especificando el índice

ESPOL – Python Programación

Page 173: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 173/293

Page 174: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 174/293

174

Para prevenir errores al usar estas funciones, se puede usar el operador in

Ejemplo. Remover un elemento si está en la lista

TTT ": ` "% M;

MA5$3&a$<`=TTT M La lista no es modificada y no se produjo un error  *.-1-@-,-@-0-/-_2

Si no se hace esta validación y se intenta eliminar un elemento que no está en la lista segenera un error de ejecución: ValueError  

Ordenamiento de listas: sort

TTT MU*./-0_-10-0_-/.2

TTT MA'&5(<=TTT M

*./- /.- 0_- 0_- 102

TTT MU*DmEs3"L9D-Dt8F$J59D-DHs'"L9D-D€"&8&Fs9D2

TTT MA'&5(<=

TTT M

*Dt8F$J59D- D€"&8&Fs9D- DHs'"L9D- DmEs3"L9D2

TTT MU*,.-Dt8F$J59D-D€"&8&Fs9D-1.-/02

TTT MA'&5(<= No se pueden ordener tipos diferentes 

GN4$d55&5; E%&5I$59J8$ (N4$'; '(5<= S "%(<=

TTT ( U **1- .2- *.- _2- *`- @2-*0- /22 Ordena el primer componente TTT (A'&5(<=

TTT (

**.- _2- *0- /2- *1- .2- *`- @22

TTT 9 U **1- Dt8F$J59D2- *.- DHs'"L9D2- *`- DmEs3"L9D22

TTT 9A'&5(<=

TTT 9**.- DHs'"L9D2- *1- Dt8F$J59D2- *`- DmEs3"L9D22

El operador + es una alternativa a la función append para concatenar listas

TTT MU*0-.-0-,2

TTT MUMB*`-.2 TTT M

*0- .- 0- ,- `- .2

ESPOL – Python Programación

Page 175: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 175/293

175

TTT 9U*,1-D9JLD-/A02

TTT JU*.A,-1.-D5(D-.02

TTT LU9BJ

TTT L

*,1- D9JLD- /A0- .A,- 1.- D5(D- .02

Los métodos se aplican igualmente a listas con elementos de diferente tipo

TTT MU*,.-0A,1-D8E%$'D-/`2

TTT MA944$%I<D395($'D=

TTT M

*,.- 0A,1- D8E%$'D- /`- D395($'D2

TTT MA5$3&a$<D8E%$'D=

TTT M

*,.- 0A,1- /`- D395($'D2

TTT MA"%I$M<D395($'D=

.

TTT MUMB*DCE$a$'D2

TTT M

*,.- 0A,1- /`- D395($'D- DCE$a$'D2

Reproducción de listas con Q 

TTT MU*,-0A+-D8E%$'D2

TTT 5U,QM Reproduce la lista dos veces TTT 5

*,- 0A+- D8E%$'D- ,- 0A+- D8E%$'D2

Un operador especial para eliminar elementos de una lista mediante el índice: del 

TTT MU*.-/-`-1-,-`-_2

TTT I$8 M*.2  Elimine el elemento en la celda 3 TTT M

*.- /- `- ,- `- _2

TTT I$8 M*?+2  Elimine el último elemento TTT M

*.- /- `- ,- `2

TTT MU*,.- 0A,1- D8E%$'D- /`- D395($'D2

TTT I$8 M*,2 Elimine el elemento en la celda 2 TTT M

*,.- 0A,1- /`- D395($'D2

ESPOL – Python Programación

Page 176: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 176/293

176

Una función para formar pares entre dos listas: zip

TTT LU*+>+-,.+-1,02

TTT 3U*Dt8F$J59D-DH"'"L9D-DmE"3"L9D2

TTT 4UX"4<L-3=

TTT 8"'(<4=*<+>+- Dt8F$J59D=- <,.+- DH"'"L9D=- <1,0- DmE"3"L9D=2

Puede ser útil para iterar sobre las dos listas

TTT :&5 9-J "% 4;

45"%(<9-J=

+>+ t8F$J59

,.+ H"'"L9

1,0 mE"3"L9

Una función para construir listas por mapeo: map 

TTT I$: LEJ&<M=;5$(E5% MQQ. Función para calcular un cubo TTT LU394<LEJ&- 59%F$<0==

TTT 'U8"'(<L=

TTT '

*>- +- @- ,1- _/2

Una función para construir listas mediante un filtro: filter  

TTT I$: 495<M=;5$(E5% Mi,UU> Función para detectar número parTTT MU*.-_-1-@-+>-02

TTT (U:"8($5<495-M=

TTT 8"'(<(=

*_- @- +>2

7.7.2 Construcción declarativa de listas numéricas

Las listas numéricas pueden construirse mediante declaraciones en la ventana interactiva

o dentro de programas:

a) Mediante declaraciones implícitas

TTT EU59%F$<0=  Con la función range TTT MU8"'(<E=

TTT M

*>- +- ,- .- /2

TTT LU*" :&5 " "% 59%F$<0=2  Crea una lista numérica 

TTT L*>- +- ,- .- /2

ESPOL – Python Programación

Page 177: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 177/293

177

TTT LU**"2 :&5 " "% 59%F$<0=2  Crea una lista de listasTTT L

**>2- *+2- *,2- *.2- */22

TTT MU*.-/-1-_-`-@-,2 Filtrar elementos pares de una lista 

TTT 4U*( :&5 ( "% M ": (i,UU>2TTT 4

*/- _- @- ,2

b) Mediante declaraciones explícitas

TTT MU*2

TTT :&5 " "% 59%F$<0=; Crea una lista numérica MA944$%I<"=

TTT M

*>- +- ,- .- /2

TTT MU*2

TTT :&5 " "% 59%F$<0=; Crea una lista de listas  MA944$%I<*"2=

TTT M

**>2- *+2- *,2- *.2- */22

c) Se puede usar el operador + para agregar elementos, en lugar de append

TTT MU*2TTT :&5 " "% 59%F$<0=; Crea una lista numérica 

MUMB*"2 conteniendo enteros TTT M

*>- +- ,- .- /2

TTT MU*2

TTT :&5 " "% 59%F$<0=; Crea una lista de listas MUMB**"22  conteniendo enteros 

TTT M

**>2- *+2- *,2- *.2- */22

Llenar un vector de cinco elementos con números aleatorios entre 0 y 9

TTT :5&3 59%I&3 "34&5(Q

TTT MU*2

TTT :&5 " "% 59%F$</=;

MUMB*59%I"%(<>-`=2

TTT M

*_- @- ,- @2

ESPOL – Python Programación

Page 178: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 178/293

178

El operador   + o la función append también pueden usarse para concatenar listas 

TTT 9U*,-0-1-_2

TTT JU*`-@-/2

TTT LU9BJ

TTT L*,- 0- 1- _- `- @- /2 Concatenación de elementos

TTT LU9B*J2 Concatenación de elementos y una lista TTT L

*,- 0- 1- _- *`- @- /22

TTT LU*92B*J2 Concatenación de listas TTT L

**,- 0- 1- _2- *`- @- /22

Para crear una lista de listas vacías se puede escribir

TTT MU*2TTT :&5 " "% 59%F$<0=;

MUMB**22

TTT M**2- *2- *2- *2- *22

Se pueden crear listas pero sin especificar aún ni los valores ni su tipo

TTT MU*2TTT :&5 " "% 59%F$<0=;

MUMB*7&%$2

TTT M

*7&%$- 7&%$- 7&%$- 7&%$- 7&%$2

7.7.3  Algunas funciones de la librería estándar para listas numéricas

TTT MU*.-/-`-1-,-`-_2

TTT 8$%<M= Longitud de un vector  1

TTT 39M<M= El mayor valor  `

TTT 3"%<M= El menor valor  ,

TTT 'E3<M=  Suma de los componentes />

TTT 5U*2  Lista vacía. Su longitud es cero 

ESPOL – Python Programación

Page 179: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 179/293

179

7.7.4 Algunas funciones de la librería NumPy para listas numéricas

NumPy es una librería de soporte para aplicaciones matemáticas, científicas y deingeniería. En la sección de matrices se usarán muchas funciones de esta librería paramanejo de vectores y matrices. 

TTT :5&3 %E34N "34&5(Q

TTT MU*.-/-`-1-,-`-_2

TTT 45&I<M= Producto de los componentes @+_/@

TTT 95F39M<M=  Índice del mayor valor  ,

TTT 95F3"%<M= Índice del menor valor  /

TTT 3$9%<M= Media aritmética 0A1+/,@01+/,@01+//

TTT '(I<M=  Desviación estándar  ,A_>,`@+>,,_+,_0_@

ESPOL – Python Programación

Page 180: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 180/293

180

7.7.5 Resolución de problemas con listas y vectores

En esta sección se desarrollarán programas y funciones de aplicación con listasprincipalmente numéricas. Este tipo de estructuras de datos se denominan vectores oarreglos de una dimensión. Los programas y funciones serán escritos como módulos en la

ventana de edición de Python y probados en la ventana interactiva o desde programas.Los ejemplos desarrollados son una referencia para problemas de aplicación con listas

 Algunas aplicaciones también pueden usarse con datos estructurados de otros tipos.

Ejemplo. Escriba un programa para sumar los componentes de un vector con valor par

Solución

Variablesn: cantidad de datos

x: contendrá cada dato ingresadov: vector que contendrá los datoss: es la suma de los componentes del vector con valor par

Programa

f h5&F5939 4959 'E395 495$' I$ E%9 8"'(9

%U"%(<"%4E(<Dk9%("I9I I$ $8$3$%(&'; D==

aU*2

:&5 " "% 59%F$<%=;

MU"%(<"%4E(<Dc%F5$'$ '"FE"$%($ I9(&; D==

aUaB*M2

'U>

:&5 $ "% a;

": $i,UU>;

'U'B$

45"%(<DY9 'E39 $'; D-'=

Prueba del programa

TTT

k9%("I9I I$ $8$3$%(&'; 0 

c%F5$'$ '"FE"$%($ I9(&; ,. 

c%F5$'$ '"FE"$%($ I9(&; /, 

c%F5$'$ '"FE"$%($ I9(&; +, 

c%F5$'$ '"FE"$%($ I9(&; ./ 

c%F5$'$ '"FE"$%($ I9(&; ,0 

Y9 'E39 $'; @@

ESPOL – Python Programación

Page 181: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 181/293

181

Ejemplo. Escriba una función para sumar los componentes de un vector con valor par

El programa del ejemplo anterior se lo escribe nuevamente como una función.

SoluciónNombre de la función: vectsumap 

Nombre del módulo: vectsumap

Variablesv: vector con los números que ingresan a la funcións: suma de los componentes del vector con valor par

I$: a$L('E394<a=;

'U>

:&5 $ "% a;

": $i,UU>;

'U'B$5$(E5% '

Prueba de la función desde la ventana interactiva

TTT :5&3 a$L('E394 "34&5( a$L('E394

TTT aU*,.-/,-+,-./-,02

TTT 'Ua$L('E394<a=

TTT '

@@

NOTA.  En Python se pueden resolver muchas aplicaciones usando directamente losoperadores y funciones de las librerías disponibles en este lenguaje y que fueron descritosen las secciones anteriores.

El ejemplo anterior se puede resolver en la ventana interactiva con las siguientesinstrucciones:

TTT MU*,.-/,-+,-./-,02

TTT 4U*( :&5 ( "% M ": (i,UU>2 genera en forma implícita una listaTTT 4 con los números pares */,- +,- ./2

TTT 'E3<4= suma de los números pares @@

Se recomienda usar esta metodología basada en funciónes especiales del lenguajedespués que se haya desarrollado la capacidad para programar usando las instruccionesbásicas del lenguaje.

ESPOL – Python Programación

Page 182: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 182/293

Page 183: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 183/293

183

La siguiente es una solución más clara y lógica para el mismo problema anterior. Es el tipo

de solución que deben intentar los usuarios hasta que hayan desarrollado su habilidad

para programar. Para este ejemplo, la solución programada es más simple de entender y

además se usan menos variables y menos funciones propias del lenguaje.

SoluciónFunción:  sort_len Entrega una lista de palabras ordenadas por su longitud

Variables

!: lista de palabras

"#!: lista con las longitudes de las palabras de la lista ! 

Idea propuesta 

Se construye una lista con las longitudes de las palabras incluidas en la lista de entrada x.

La longitud de cada palabra es comparada con la longitud de las restantes palabras. Cadavez que se encuentra una longitud menor, se intercambian las longitudes y también se

intercambian las palabras. de tal manera que el menor valor siempre irá quedando a la

izquierda y se mantiene la correspondencia con las palabras.

 Al finalizar, la lista de longitudes estará ordenada en forma creciente, y las palabras de la

lista también estarán colocadas en este orden.

$%& ()*+,"%-.!/0

"#!123

&)* # 4- !0

"#!1"#!52"%-.#/3

&)* 4 4- *6-7%."%-.!//0

&)* 8 4- *6-7%.459:"%-.!//0

4& "#!283;"#!2430

"#!243:"#!2831"#!283:"#!243

!243:!2831!283:!243

*%+<*- !

Prueba de la función desde la ventana interactiva

#$%& '%$()*+, -&.%$( '%$()*+,

/0123*4+5$627289'-:6272;$%4$6&6:-<,272=+,4>6?+'272@,4*A'272B>9&-:6272C-%*%4962D

'0'%$()*+,E/F

.$-,(E'F

1289'-:6272@,4*A'2723*4+5$6272B>9&-:6272C-%*%496272=+,4>6?+'272;$%4$6&6:-<,2D

Note el uso de la asignación que intercambia el contenido de dos variables. 

ESPOL – Python Programación

Page 184: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 184/293

Page 185: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 185/293

185

TTT :5&3 59%I&3 "34&5(Q

TTT 'PE::8$<M= La función shuffle desordena la lista TTT M

*.- +>- _- +@- +_- 1- +0- +2

Ejemplo. Crear una función para generar una muestra aleatoria de tamaño m con enterostomada de una población de tamaño n. Una muestra es una lista de números aleatoriossin repeticiones.

SoluciónNombre de la función: muestra Nombre del módulo: muestraParámetros: n, m Resultado: v vector con los componentes de la muestra aleatoria

fv$%$595 E%9 3E$'(59 98$9(&5"9

:5&3 59%I&3 "34&5(Q

I$: 3E$'(59<%-3=;

aU*2

OP"8$ 8$%<a=S3;

MU59%I"%(<+-%=

": M %&( "% a;

aUaB*M2

5$(E5% a

Prueba de la función desde la ventana interactiva

TTT :5&3 3E$'(59 "34&5( 3E$'(59

TTT aU3E$'(59<,>-+>=

TTT a

*@- ++- +`- +- 1- +0- +1- .- 0- /2

El resultado es una lista con números elegidos aleatoriamente y sin repeticiones.

Cada vez que se pruebe este programa se obtendrá una nueva muestra aleatoria.

Con la función sample del módulo o librería random, se pueden obtener directamentemuestras aleatorias:

TTT :5&3 59%I&3 "34&5(Q

TTT 4U8"'(<59%F$<,>== genera la lista: [0, 1, 2, . . ., 19] TTT aU'9348$<4-0=  muestra aleatoria de tamaño 5 TTT a

*_- >- `- ++- +`2

ESPOL – Python Programación

Page 186: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 186/293

186

Ejemplo. Una función para encontrar el mayor valor de un vector y su índice

Solución

La estrategia consiste en iniciar la variable de salida r , con primer elemento del vector.

Mediante un ciclo se compara cada uno de los otros elementos con el valor de r . En cadacomparación si el elemento tiene un valor mayor, se actualiza el valor de r  y la posición oíndice de este valor.

Nombre de la función: vectmaxNombre del módulo: vectmaxParámetro: v: vectorResultados: r, p  el mayor valor de v y su índice

I$: a$L(39M<a=;

%U8$%<a=

5Ua*>24U>

:&5 " "% 59%F$<+-%=;

": a*"2T5;

5Ua*"2

4U"

5$(E5% 5-4

Prueba de la función

TTT :5&3 a$L(39M "34&5( a$L(39M

TTT MU*++- 0- +@- +_- +/- ++- +.- .- +@- +_2

TTT *5-42Ua$L(39M<M=

TTT 5

+@

TTT 4

,

NOTA. En Python se puede resolver directamente esta aplicación mediante las funciones

definidas en la biblioteca estándar:

TTT MU*++- 0- +@- +_- +/- ++- +.- .- +@- +_2

TTT 5U39M<M=

TTT 5

+@

TTT 4UMA"%I$M<5=

TTT 4

ESPOL – Python Programación

Page 187: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 187/293

187

Ejemplo. Escriba en notación abreviada en la ventana interactiva una función que

entregue el mayor valor y el menor valor de una lista numérica (vector):

!!! #$% %&'()* +$,-+. /&0.'()1 &2('()3

!!! (4/5161718193!!! %&'()

/71 83

Ejemplo. La secuencia de Ulam genera una secuencia de números a partir de un dato

inicial con la siguiente definición.

x / 2, x par x

3x 1, x impar 

=

 

, x es un número natural

La secuencia siempre llega finalmente al número 1

Caso: Si el valor inicial es x=12, los valores sucesivos serán:  6, 3, 10, 5, 16, 8, 4, 2, 1 

Escriba un programa que lea un número y muestre la secuencia pero en orden invertido.

Solucíon

Variables

n: valor inicial para la secuencia. n es modificado con la regla indicada

u: vector con los números de la secuencia

Cada nuevo elemento de la secuencia será agregado a la izquierda en el vector u. El

vector resultante contendrá los elementos ubicados en el orden requerido, es decir la

secuencia de los números de Ulam estará invertida.

Programa

:;$<-$.<02 #$ =>2& 0.?$+,0#2

.40.,'0.@-,'AB.C+$;$ -. $.,$+D @D;0,0?D* A))

-4/3

EF0>$ .!G*

0% .H744I*

.4.JJ7

$>;$*

.45K.LG

-4/.3L-

@+0.,'-)

Prueba del programa

!!!

B.C+$;$ -. $.,$+D @D;0,0?D* G7 /G1 71 M1 N1 G91 61 GI1 51 93

ESPOL – Python Programación

Page 188: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 188/293

188

Ejemplo. Escriba una función que reciba un vector y elimine los elementos repetidos

SoluciónNombre de la función: vectrep Nombre del módulo: vectrep 

Parámetro: v vector con los datosResultado: u  vector con elementos diferentes

En la solución, se toma cada elemento del vector original y se lo traslada a otro vectorverificando que no haya sido agregado anteriormente.

f:E%L"\% 4959 $8"3"%95 $8$3$%(&' 5$4$("I&' I$ E%9 8"'(9

I$: a$L(5$4<a=;

EU*2

:&5 $ "% a;

": $ %&( "% E;EUEB*$2

5$(E5% E

Uso de la función en la ventana interactiva

TTT :5&3 a$L(5$4 "34&5( a$L(5$4

TTT MU*,-.-0-.-_-,-12

TTT NUa$L(5$4<M=

TTT N*,- .- 0- _- 12

NOTA. En Python se puede resolver esta aplicación convirtiendo el vector a un conjunto yluego convirtiendo nuevamente a lista:

TTT MU*,-.-0-.-_-,-12

TTT (U'$(<M=

TTT MU8"'(<(=

TTT M

*,- .- 0- _- 12

ESPOL – Python Programación

Page 189: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 189/293

189

Ejemplo. Una funcion para ordenar una lista en forma creciente

SoluciónNombre de la función: &5Iz8"'(9 Nombre del módulo: &5Iz8"'(9 

Parámetro: x  listaResultado: x  lista ordenada

Idea propuesta Cada elemento de x  es comparado con los restantes elementos. Cada vez que seencuentra un elemento con menor valor, se intercambian estos elementos, de tal maneraque el menor valor siempre irá quedando a la izquierda. Al finalizar, la lista estaráordenada en forma creciente. Debido a que la representación interna de los caracterestiene una representación mediante códigos ordenados, esta función puede usarse tambiéncon caracteres o cadenas de caracteres

I$: &5Iz8"'(9<M=;:&5 " "% 59%F$<8$%<M==;

:&5 C "% 59%F$<"B+-8$%<M==;

": M*C2SM*"2;

M*"2-M*C2UM*C2-M*"2

5$(E5% M

Prueba de la función en la ventana interactiva

TTT :5&3 &5Iz8"'(9 "34&5( &5Iz8"'(9TTT MU*,-0-_-`-.-/-02

TTT aU&5Iz8"'(9<M=

TTT a

*,- .- /- 0- 0- _- `2

TTT MU*D5D-D(D-DED-D9D-DLD2

TTT aU &5Iz8"'(9<M=

TTT a

*D9D- DLD- D5D- D(D- DED2

TTT MU*D95($D-D98F$J59D-DJ9%L&D-D95($'9%&D-DL9J&'D-DJ9'$D2

TTT aU &5Iz8"'(9<M=

TTT a*D98F$J59D- D95($D- D95($'9%&D- DJ9%L&D- DJ9'$D- DL9J&'D2 

Pregunta para investigar: Si la lista tiene longitud n, determine la cantidad total de ciclosque se realizan en la función, para ordenarla.

Python tiene una función para ordenar listas:

TTT aU*,-0-_-`-.-/-02

TTT aA'&5(<=

TTT a

*,- .- /- 0- 0- _- `2

ESPOL – Python Programación

Page 190: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 190/293

190

Ejemplo.- Obtenga el conteo de frecuencias para los siguientes 40 datos de una muestracorrespondientes al tiempo que se utilizó para atender a las personas en una estación:

.A+ /A` ,A@ .A_ /A0 .A0 ,A@ /A+,A` ,A+ .A1 /A+ ,A1 /A, .A0 .A1.A@ ,A, /A/ ,A` 0A+ +A@ ,A0 _A,

,A0 .A_ 0A_ /A@ .A_ _A+ 0A+ .A`/A. 0A1 /A1 /A_ 0A+ /A` /A, .A+

Los datos deben distribuirse en las 6 clases:

*+- ,=- *,- .=- *.- /=- */- 0=- *0- _=- *_- 1=

Solución

Variablesx: lista con los datos observadosc: lista de listas con los intervalos de las clases

Se definirá una función con el nombre frecuencia para realizar el conteo de datos en cadaclase. Las clases son una lista cuyos componentes son listas con los extremos de clase:

LU**+-,2-*,-.2-*.-/2-*/-02-*0-_2-*_-122

En un programa escrito junto a la función se definen los datos y se imprimen los resultados

:5&3 %E34N "34&5(QI$: :5$LE$%L"9<L-M=;

:UX$5&'<8$%<L==

EU*2:&5 $ "% M;:&5 C "% 59%F$<8$%<L==;

": $TUL*C2*>2 9%I $SL*C2*+2;EUEB*$2:*C2U:*C2B+

5$(E5% :

LU**+-,2-*,-.2-*.-/2-*/-02-*0-_2-*_-122MU*.A+- /A`- ,A@- .A_- /A0- .A0- ,A@- /A+-

,A`- ,A+- .A1- /A+- ,A1- /A,- .A0- .A1-.A@- ,A,- /A/- ,A`- 0A+- +A@- ,A0- _A,-,A0- .A_- 0A_- /A@- .A_- _A+- 0A+- .A`-/A.- 0A1- /A1- /A_- 0A+- /A`- /A,- .A+2

:U:5$LE$%L"9<L-M=45"%(<Dk&%($& I$ :5$LE$%L"9 4&5 L89'$D=45"%(<:=

Prueba del programa

TTTk&%($& I$ :5$LE$%L"9 4&5 L89'$* +A `A ++A +,A 0A ,A2

ESPOL – Python Programación

Page 191: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 191/293

191

Ejemplo.-  Obtenga el conteo de frecuencias y el gráfico de barras para 200  datos condistribución normal o Gaussiana con media 5 y desviación estándar 2.

:5&3 %E34N "34&5(QI$: :5$LE$%L"9<L-M=;

:UX$5&'<8$%<L==

EU*2

:&5 $ "% M;

:&5 C "% 59%F$<8$%<L==;

": $TUL*C2*>2 9%I $SL*C2*+2;

EUEB*$2

:*C2U:*C2B+

5$(E5% :

I$: J9559'<:=;

:&5 $ "% :;

J9559UDD

:&5 C "% 59%F$<+-"%(<$=B+=;

J9559UJ9559BDQD

45"%(<Di/I Di<$=-J9559=

:5&3 59%I&3 "34&5(Q

LU**?,-?+2-*?+->2-*>-+2-*+-,2-*,-.2-*.-/2-

*/-02-*0-_2-*_-12-*1-@2-*@-`2-*`-+>2-*+>-++22

MU*2

:&5 " "% 59%F$<,>>=;

MUMB*F9E''<0-,=2

:U:5$LE$%L"9<L-M=

45"%(<Dk&%($& I$ :5$LE$%L"9 4&5 L89'$D=

45"%(<:=

45"%(<Dn"9F5939 I$ J9559'D=

J9559'<:=

Prueba del programak&%($& I$ :5$LE$%L"9 4&5 L89'$

* >A ,A _A @A +@A ,`A .`A //A .>A +_A 0A +A +A2

n"9F5939 I$ J9559'

>, QQ

_ QQQQQQ

@ QQQQQQQQ

+@ QQQQQQQQQQQQQQQQQQ

,` QQQQQQQQQQQQQQQQQQQQQQQQQQQQQ

.` QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ

// QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ

.> QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ

+_ QQQQQQQQQQQQQQQQ

0 QQQQQ

+ Q

+ Q

ESPOL – Python Programación

Page 192: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 192/293

192

7.7.6 Ejercicios con listas y vectores

1. Una persona tiene una lista con los precios de n artículos y dispone de una ciertacantidad de dinero. Escriba un programa para leer estos datos y almacenarlos en unvector:

a) Muestre los numeros de los artículos que puede comprarb) Para cada artículo cuyo precio es menor que la cantidad de dinero disponible, determinecuantas unidades puede comprar

2. Lea una lista de los pesos de las n  cajas en un contenedor. Determine cuantas cajastienen el peso mayor al peso promedio del grupo.

3. Lea una lista de los pesos de los n objetos en una bodega. Determine cual es el rangode los pesos de estos objetos.

4. Una bodega contiene n paquetes numerados en forma natural. Para una inspección sedebe tomar una muestra aleatoria del 10%  de los paquetes. Escriba un programa paraelegir la muestra. La muestra no debe contener elementos repetidos.

5. Para la inspección de los m paquetes de una bodega se han elegido a m inspectores.Realice aleatoriamente la asignación de tal manera que cada inspector se le asigne larevisión de un solo paquete.

6. Para la inspección de los m  contenedores de una bodega se han elegido a m/2 inspectores. Realice aleatoriamente la asignación de tal manera que cada inspector se leasigne la revisión de dos contenedores. No se puede asignar un contenedor más de unavez.

7. Escriba un programa para leer un vector con números enteros de una cifra. Luegogenere un número aleatorio de una cifra. Entonces, elimine del vector todos los númeroscuyo valor sea menor al número aleatorio. Muestre el vector resultante.

8. Lea la lista de los números de identificación de los estudiantes que están inscritos en lamaterial A, y otra lista con los estudiantes que están inscritos en la materia B.

a) Encuentre cuantos estudiantes están inscritos en la materia A y también en la materia B

b) Encuentre los estudiantes que están inscritos en la materia A pero no en la materia B

9. Se tiene la lista de los códigos de las cajas en la bodega A y una lista de los códigos delas cajas en la bodega B. Además se tiene una lista con los códigos de las cajas quedeben ser inspeccionadas. Determine cuantas cajas serán inspeccionadas en cadabodega.

10. Almacene en un vector X las abscisas y en un vector  Y las ordenadas de un conjuntode puntos en un plano. Ambos vectores son ingresados como datos. Determine cual es el

punto más alejado del origen. Use la fórmula de la distancia. 2 2i id x y 

ESPOL – Python Programación

Page 193: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 193/293

193

11. Almacene en un vector X las abscisas y en un vector  Y las ordenadas de un conjuntode puntos en un plano. Ambos vectores son ingresados como datos. Suponga que estospuntos representan los vértices de un polígono. Determine el perímetro del polígono.

Use la fórmula para calcular la distancia entre cada par de puntos. 

2 2i 1 i i 1 id (x x ) (y y ) 

12. El cálculo del área de un polígono arbitrario, dadas las coordenadas de sus vértices(x1, y1)(x2, y2), ..., (xn, yn) se lo puede hacer con la siguiente fórmula:

Area= [(x1+x2)(y1-y2) + (x2+x3)(y2-y3)+ ... +(xn-1+xn-2)(yn-1-yn-2) + (xn+x1)(yn-y1)]/2

Escriba un programa para leer en vectores los valores de las abscisas y ordenadas de losvértices. Calcule y muestre el valor del área con la fórmula anterior.

13. Para simular los saltos de n  ranas en una pista de longitud m  metros se usará unvector de n  elementos que inicialmente contiene ceros. Use un ciclo para agregar a cadarana un número aleatorio que puede ser 0, 1  o 2 metros. Repita este ciclo hasta quealguna rana llegue al final de la pista. Muestre en cual turno alguna rana llegó al final de lapista.

14. En un proceso electoral se tienen anotados los n  votos para aprobar una moción.Cada voto tiene el número de identificación del elector (números enteros del 1 al n) y unnúmero que representa su decisión: 1 si es a favor, 0 si es en contra, cualquier otronúmero es nulo. Escriba un programa que lea los n  datos conteniendo el número delelector (no suponga que están ordenados) y su voto. Coloque los números de

identificación en tres listas: votantes a favor, votantes en contra y votantes nulos.Finalmente busque y muestre si hay números de identificación de electores que están enmás de una lista.

15.-  Escriba un programa con un menú para registrar estudiantes en uno de los dosparalelos de una materia mediante las opciones indicadas a continuación. Cada paralelodebe ser representado mediante un vector.

1) RegistrarLea el numero del paralelo elegido (1 o 2), luego lea el código delestudiante y agréguelo al vector correspondiente

2) ConsultarLea el código del estudiante, búsquelo en los vectores y muestre elparalelo en el que está registrado

3) CambiarLea el código del estudiante. Si está registrado elimínelo del vectory agréguelo al otro vector

4) Salir

ESPOL – Python Programación

Page 194: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 194/293

Page 195: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 195/293

195

El receptor del mensaje encriptado, aplicando la misma clave puede conocer el mensaje:

Ejemplo. Mensaje encriptado: e = 10111010Clave: k = 01100011

Mensaje recibido: m = 11011001

Escriba una función que reciba un vector conteniendo números en el sistema binario yentregue otro vector conteniendo los números binarios con la operación xor. Esta funciónse usará para encriptar un mensaje y para conocer el menaje enviado. La función debevalidar que los vectores contengan números binarios, caso contrario, el resultado es unvector nulo.

23. Escriba una función que reciba un vector y entregue como resultado otro vectorconteniendo los mismos elementos del vector ingresado pero con las elementos ubicadosaleatoriamente en otro orden

Ejm. Entra [3, 7, 6, 2, 9, 8], sale [6, 8, 3, 2, 7, 9] 

Escriba un programa que llene un vector de n  números aleatorios de una cifra. Elprograma debe enviar el vector a la función creada y recibir otro vector. El programa debedeterminar cuantos números coinciden en la misma posición en ambos vectores

24. Escriba una función que reciba un entero, y entregue un vector conteniendo los dígitosdel número equivalente en el sistema binario

Ejm.  Entra 39  sale [1, 0, 0, 1, 1, 1] 

Escriba un programa que lea un entero, llame a la función creada y determine cuantosdígitos binarios son cero y cuantos son uno.

25. Escriba una función sumacum(x) que entregue un vector con la suma acumulada deun vector

Ejemplo.GGG BHd9VPVbV9JVPJeGGG %H%)0'.)0<B=GGG %

d9VZV8PV;PVbPe

26. Un grupo de n personas debe elegir a su representante. Será elegida la persona quetenga más de la mitad de los votos, caso contrario se debe repetir la votación. Cadapersona es identificada con un número entero entre 1 y n, y cualquier persona pueden serelegida. Luego de realizar la votación, se debe realizar el conteo de los votos y validar sies necesario realizar una nueva votación.

ESPOL – Python Programación

Page 196: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 196/293

196

7.8 Operaciones con cadenas de caracteres

En esta sección se establecen los instrumentos para desarrollar aplicaciones con cadenasde caracteres o strings.

7.8.1 Cadenas de caracteres constantes

La clase  string contiene cadenas de caracteres constantes que pueden ser de utilidadcomo referencia en algunas aplicaciones.

Para usar estas constantes debe importar la clase string.

La siguiente es la lista de constantes disponibles:

ascii_letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'ascii_lowercase =  'abcdefghijklmnopqrstuvwxyz' 

ascii_uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'  digits = '0123456789' hexdigits =  '0123456789abcdefABCDEF' octdigits = '01234567' printable = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTU... punctuation = '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'whitespace = ' \t\n\r\x0b\x0c' 

Ejemplo.

TTT :5&3 '(5"%F "34&5(Q

TTT MUI"F"('

TTT M

D>+,./0_1@`D

ESPOL – Python Programación

Page 197: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 197/293

197

7.8.2 Métodos, operadores y funciones para cadenas de caracteres

Para manejo de cadenas de caracteres Python tiene una clase denominada str . Esta clasees residente y no necesita importarse para usarla.

 Al crear una variable u objeto de tipo cadena de caracteres se tiene acceso a las funciones

o métodos definidos en la clase str  y se los usa con la siguiente notación:

objeto.método

La clase str  contiene una gran cantidad de funciones o métodos para operar con cadenasde caracteres. Algunos métodos disponibles en esta clase:

Sea s: objeto de tipo cadena de caracteres

Método Resultado'AL94"(98"X$<= Cadena con la primera letra mayúscula y las demás

minúsculas'AL$%($5<%-L= Cadena centrada en n espacios. El relleno es un carácteropcional c

'AL&E%(<(-9-J= Cantidad de ocurrencias de la subcadena t en la cadena s.Opcionalmente se puede indicar el rango de búsqueda: a,b

'A:"%I<(-9-J= Menor índice de la subcadena t en s. Opcionalmente se puedeindicar el rango de búsqueda: a,b. Si no lo encuentra retorna -1

'A"'984P9<= Retorna True si todos los caracteres son alfabéticos'A"'I"F"(<= Retorna True si todos los caracteres son dígitos'A"'8&O$5<= Retorna True si todos los caracteres son minúsculas'A"'E44$5<= Retorna True si todos los caracteres son mayúsculas

'A8CE'(<%-L= Cadena justificada a la izquierda en n espacios. El relleno esun carácter opcional c

'A8&O$5<= Cadena convertida a minúsculas'A8'(5"4<= Cadena con espacios a la izquierda eliminados'A5$489L$<(-5-%= Cadena con la subcadena t reemplazada por la subcadena r.

opcionalmente se puede indicar la cantidad de reemplazos n'A5:"%I<(-9-J= Mayor índice de la subcadena t en s. Opcionalmente se puede

indicar el rango de búsqueda: a,b. Si no lo encuentra retorna -1'A5CE'(<%-L= Cadena justificada a la derecha en n espacios. El relleno es un

carácter opcional c

'A'48"(<L= Entrega una lista cuyos componentes son las palabras de sseparadas con un carácter c'A5'(5"4<= Cadena con los espacios a la derecha eliminados'A'(5"4<= Cadena con los espacios a la derecha e izquierda eliminados'AE44$5<= Cadena convertida a mayúsculas

8$%<'= Función para determinar la cantidad de caracteres en la cadena s 

B  Operador de concatenación de cadenas "%- %&( "%  Operador de inclusión

ESPOL – Python Programación

Page 198: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 198/293

198

Ejemplos.

TTT MUDD  Un carácter nulo son dos comillas juntas 

TTT 'UD$'(9 $' E%9 45E$JD

TTT 'AL&E%(<D$D= Conteo de coincidencias .

TTT 'A:"%I<D(9D= Búsqueda del índice de una coincidencia ,

TTT 'A5$489L$<D$D-DdD= Reemplazo de subcadenas en una cadena Dd'(9 d' E%9 45EdJD

TTT EU'AE44$5<=

TTT E

Dd!Gt d! u7t h[ud€D

TTT 8$%<'=  Longitud de la cadena +1

TTT DGtD "% E Operador de pertenencia G5E$

TTT EUEBD Hc7tYD Concatenación de cadenas TTT E

Dd!Gt d! u7t h[ud€ Hc7tYD

TTT E*,;/2 Las cadenas se pueden indexar  DGtD

TTT E*.2U DYD  Error: no se puede modificar una cadenapor asignación

TypeError: 'str' object does not support item assignment

>TT MA5$489L$<D D-DD= Eliminar los espacios en blanco de la cadena Dd!Gtd!u7th[ud€tHc7tYD  Los espacios # # son reemplazadoc

por un carácter nulo ## 

Los operadores relacionales se pueden usar para comparar cadenas de caracteres

TTT MUD9JLD 

TTT NUD9JI$D

TTT 5UMSN La comparación es carácter con carácter  TTT 5 en el orden alfabético G5E$

ESPOL – Python Programación

Page 199: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 199/293

199

TTT 'UD 9JLD  Elimina espacios a la izquierda TTT (U'A8'(5"4<=

TTT (

D9JLD

TTT 'UD9JLID Inicial mayúscula 

TTT (U'AL94"(98"X$<=TTT (

DtJLID

TTT 'UD 9JL ' Elimina espacios en ambos lados TTT (U'A'(5"4<=

TTT (

D9JLD

TTT 'UD9JLD  Ajusta la cadena a la derecha en 10 columnas TTT (U'A5CE'(<+>=

TTT (

D 9JLD

TTT 'UD9JL-5'-(E-MNXD Convierte una cadena en una lista TTT (U'A'48"(<D-D=

TTT (

*D9JLD- D5'D- D(ED- DMNXD2

Operadores y funciones adicionales de la librería estándar para cadenas

TTT 'UD45&F5939D 

TTT D?DAC&"%<'=  Insertar separadores de caracteres D4?5?&?F?5?9?3?9D 

TTT 'UD45&F5939D

TTT LU&5I<'*>2=  Representación ASCII de un carácter  TTT L

++,

TTT (ULP5<++,=  Representación como carácter de un código TTT (

D4D

TTT TTT LU*&5I<M= :&5 M "% '2 Lista implícita de conversión TTT L

*++,- ++/- +++- +>.- ++/- `1- +>`- `12

TTT 'UD45&F5939D  Construcción de una lista desde una cadena TTT 8"'(<'=

*D4D- D5D- D&D- DFD- D5D- D9D- D3D- D9D2

TTT

ESPOL – Python Programación

Page 200: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 200/293

200

7.8.3 Resolución de problemas con cadenas de caracteres 

Ejemplo.  Escriba un programa que lea una cadena y la muestre con los caracteresubicados en orden inverso 

SoluciónLos caracteres de la cadena ingresada son colocados en otra cadena, inicialmentevacía, agregándolos de derecha a izquierda

fc%a$5("5 E%9 :59'$

'U"%4E(<Dc%F5$'$ E%9 :59'$; D=

(UDD

:&5 L "% ';

(ULB(

45"%(<(=

Prueba del programa

TTT

c%F5$'$ E%9 :59'$; d'(9 $' E%9 45E$J9 

9J$E54 9%E '$ 9('d

Ejemplo. Reescriba el programa de la solución del ejemplo anterior como una función 

SoluciónNombre de la función: strinvertir  Nombre del módulo: strinvertir  Parámetro: s cadenaResultado: t cadena invertida

I$: '(5"%a$5("5<'=;

(UDD

:&5 L "% ';

(ULB(5$(E5% ( 

Prueba de la función en la ventana interactiva

TTT :5&3 '(5"%a$5("5 "34&5( '(5"%a$5("5

TTT MUDd'(9 $' E%9 45E$J9D 

TTT NU'(5"%a$5("5<M=

TTT N

D9J$E54 9%E '$ 9('dD

ESPOL – Python Programación

Page 201: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 201/293

201

Ejemplo. En la ventana interactiva resuelva el siguiente problema: Dada una frase,determine si es un palíndromo.

Un palíndromo es una frase que se puede leer igual de izquierda a derecha o de derechaa izquierda. Los espacios en blanco ni las tildes cuentan para esta definición, tampoco

importa si son mayúsculas o minúculas

Solución

TTT 'UDn939' &"I 9 n"&' 939ID Frase original TTT 'U'AE44$5<= Cambiar a mayúsculas TTT '

DntWt! wcn t ncw! tWtnD

TTT 'U'A5$489L$<D D-DD= Eliminar espacios TTT '

DntWt!wcntncw!tWtnD

TTT :5&3 '(5"%a$5("5 "34&5( '(5"%a$5("5

TTT (U'(5"%a$5("5<'= Invertir la frase TTT (

DntWt!wcntncw!tWtnD

TTT 5U'UU( Comparar ambas frases TTT 5

G5E$  Verifica que es un palíndromo 

Ejemplo. Leer una frase y mostrarla encriptada intercambiando parejas consecutivas decaracteres

I$: '(5L5"4(&<'=;

5UDD

%U8$%<'=

:&5 " "% 59%F$<>-%?+-,=;

9U'*"2

JU'*"B+2

5U5BJB9": %i,VU>;

5U5B'*%?+2

5$(E5% 5

Prueba de la función

TTT :5&3 '(5L5"4(& "34&5( '(5L5"4(&

TTT 'UD45&F5939'D

TTT 5U'(5L5"4(&<'=

TTT 5D54F&9593'D Mensaje encriptado 

ESPOL – Python Programación

Page 202: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 202/293

202

TTT (U'(5L5"4(&<5=  La misma función restaura el mensaje original TTT ( ingresando el mensaje encriptado D45&F5939'D

Ejemplo. Lea nombres que pueden tener diferente longitud y forme una lista de nombres.Muestre por cada nombre, la cantidad de veces que contiene la letra ‘a’

fW9%$C& I$ E%9 8"'(9 I$ L9I$%9' I$ L959L($5$'

%U"%(<"%4E(<Dk9%("I9I I$ %&3J5$; D==

'U*2

:&5 " "% 59%F$<%=;

MU"%4E(<Dc%F5$'$ %&3J5$; D=

'U'B*M2

:&5 M "% ';

LUMAL&E%(<D9D=

45"%(<M-L=

TTTk9%("I9I I$ %&3J5$; . c%F5$'$ %&3J5$; I&5"' c%F5$'$ %&3J5$; 9%"(9 c%F5$'$ %&3J5$; L953$% I&5"' >9%"(9 ,L953$% +

Ejemplo. Lea una lista de nombres. Elimine los nombres con el carácter DaD 

fW9%$C& I$ E%9 8"'(9 I$ L9I$%9' I$ L959L($5$'

%U"%(<"%4E(<Dk9%("I9I I$ %&3J5$; D==

'U*2

:&5 " "% 59%F$<%=;

MU"%4E(<Dc%F5$'$ %&3J5$; D=

'U'B*M2

(U*2

:&5 $ "% ';": D9D %&( "% $;

(U(B*$2

45"%(<(= 

TTT

k9%("I9I I$ %&3J5$; / 

c%F5$'$ %&3J5$; I&5"' 

c%F5$'$ %&3J5$; 9%"(9 

c%F5$'$ %&3J5$; L953$% 

c%F5$'$ %&3J5$; 5&MN 

*DI&5"'D- D5&MND2

ESPOL – Python Programación

Page 203: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 203/293

203

Ejemplo.  Escriba una función de utilidad que reciba una cadena conteniendo númerosseparados por comas y los convierta a un vector o lista numérica.

SoluciónNombre de la función: convnum 

Nombre del módulo: convnum Parámetro: c cadenaResultado: x  vector

Python  no facilita el ingreso directo de una lista numérica pero provee suficientesdefiniciones para instrumentar una función que permita resolver este problema.

El dato ingresado es una cadena de caracteres con números separados por comas. Lafunción split la transforma a una lista de cadenas de caracteres, en la cual cada elementoes una subcadena conteniendo cada número.

Mediante un ciclo se convierte cada elemento a tipo entero con el tipo int (puede ser a tipoescribiendo float en lugar de int) y se crea la lista numérica o vector para entregar.

Función

fk&%a$5("5 8"'(9 I$ %r3$5&' I$ 8"($598 9 %E3p5"L&

I$: L&%a%E3<L=;

%E3LULA'48"(<D-D=

MU*2

:&5 $ "% %E3L;

MUMB*"%(<$=2

5$(E5% M

Programa de prueba de la función convnum

fh5&F5939 I$ 45E$J9 I$ L&%a%E3

:5&3 L&%a%E3 "34&5( L&%a%E3

LU"%4E(<Dc%F5$'$ 89 8"'(9 I$ %r3$5&'; D=

MUL&%a%E3<L=

'U>

:&5 % "% M;'U'B%

45"%(<D!E39 I$8 a$L(&5; D-'=

Prueba del programa en la ventana interactiva

TTT

c%F5$'$ 89 8"'(9 I$ %r3$5&'; ,.-/0_-1-/.10 

!E39 I$8 a$L(&5; /@_+

TTT

Nota: los datos son una línea de texto la cual contiene números separados por comas,pero son recibidos como una cadena de caracteres. 

ESPOL – Python Programación

Page 204: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 204/293

204

Ejemplo. Escriba una función de utilidad que reciba un vector o lista numérica y entregueuna cadena de caracteres cuyos elementos son subcadenas conteniendo los númerosseparados por comas

Solución

Nombre de la función: convstr  Nombre del módulo: convstr  Parámetro: v  vectorResultado: s  cadena

Esta función es inversa a la función convnum desarrollada en la sección anterior.

Mediante un ciclo se convierte cada elemento numérico a su representación como cadenacon el tipo str . Se insertan comas intermedias para separar las subcadenas.

Función

fk&%a$5'"\% I$ E% a$L(&5 9 E%9 L9I$%9

I$: L&%a'(5<a=;

'UDD

:&5 M "% a;

'U'B'(5<M=BD-D

5$(E5% '

Prueba de las funciones convnum y convstr en la ventana interactiva

TTT :5&3 L&%a%E3 "34&5( L&%a%E3

TTT LUD,.-.1-0_-/@D

TTT aUL&%a%E3<L=

TTT a

*,.- .1- 0_- /@2

TTT :5&3 L&%a'(5 "34&5( L&%a'(5

TTT aU*,.- .1- 0_- /@2

TTT MUL&%a'(5<a=

TTT M

D,.-.1-0_-/@-D

Estas funciones se pueden usar opcionalmente para almacenar y recuperar listasnuméricas que se almacenan como una linea de texto en un archivo.

ESPOL – Python Programación

Page 205: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 205/293

205

7.8.4 Ejercicios con cadenas de caracteres

1. Escriba un programa que realice lo siguiente

a) Lea una frase.

b) Cuente y muestre cuantas vocales tiene la frasec) Lea una palabra, cuente y muestre cuantas veces la frase contiene a la palabrad) Elimine todas las vocales que contiene la frase. Muestre la frase final

2. Escriba un programa que lea una dirección de correo electrónico con [email protected] y muestre separadamente cual es el usuario y el tipo

3. Escriba un programa que lea una frase y enmascárela sustituyendo las vocales consímbolos: ‘a’ sustituya con ‘*’, ‘e’ con ‘-’, ‘i’ con ‘?’, ‘o’ con ‘&’, ‘u’ con ’#’Escriba otro programa que haga la sustitución inversa y restaure la frase original.

4. Una cadena ADN es una linea de texto conteniendo una lista de los caracteres A, C, G,T en cualquier secuencia. Ejemplo. CCGAATCGTA

Se considera que cada par de caracteres consecutivos está ordenado si el carácter a laizquierda es alfabéticamente menor o igual que el carácter a la derecha.

Escriba un programa que reciba una cadena ADN y muestre cuantos pares de la cadenaestán ordenados. Verifique que la cadena tenga caracteres válidos, caso contrario,muestre un mensaje.

5. Rescriba un programa que reciba una palabra y desordene las letras en forma aleatoria.

Ejemplo: Recibe ‘martes’, entrega ‘remsta’ (un ejemplo)

Sugerencia: Para cada letra, seleccione aleatoriamente otra letra de la palabra con la queintercambiarán posiciones, pero elimínela de la palabra para que no sea elegida otra vez.

6. Escriba un programa para jugar el juego del ahorcado entre una persona y elcomputador. Primero almacene una lista de palabras en un vector. Luego el computadorselecciona una palabra aleatoriamente pero no la muestra. La persona trata en intentossucesivos adivinar la palabra ingresando una letra en cada intento. El computado muestralas letras que coinciden con la palabra seleccionada, pero en cada fallo, muestra un

mensaje que acerca a la paersona a ser ahorcado.

7. Un paso importante en la decodificación de mensajes encriptados es encontrar algunasletras utilizadas. Para ello se debe determinar la frecuencia de los símbolos usados yasociarlos a las letras del alfabeto. Por ejemplo, en el español la letra de mayor frecuenciaes la letra e. Escriba un programa que lea un mensaje y determine la frecuencia de cadasímbolo utilizado.

8.  Escriba una función codificar(x,k)  que reciba una cadena x  y una constante k  yentregue otra cadena con los caracteres desplazados k posiciones en el alfabeto. k puedeser positivo para codificar o negativo para decodificar. Al exceder el final o el inicio delalbabeto, el desplazamiento debe continuar en el otro extremo.

ESPOL – Python Programación

Page 206: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 206/293

Page 207: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 207/293

207

7.9 Operaciones con matrices 

En la notación del lenguaje Python una matriz o arreglo de dos dimensiones es una listacuyos elementos son listas que tienen la misma longitud y contienen elementos del mismotipo (usualmente numérico). Estos objetos, igual que los vectores, son fundamentales en

las aplicaciones matemáticas y de ingeniería.

Existen módulos o librerías especiales para extender el manejo de vectores y matrices. Elmás conocido es la librería numérica NumPy que será revisado más adelante. 

Se puede asociar una matriz a un cuadro con datos organizados en filas y columnas.

Las filas son horizontales y las columnas son verticales, numeradas con índices quecomienzan en cero.

Ejemplos. Escribir en la notación Python la matriz

23 45 63

72 81 91a

56 64 37

34 75 26

 

TTT 9U**,.-/0-_.2-*1,-@+-`+2-*0_-_/-.12-*./-10-,_22 Es una lista de listas 

Su representación conceptual es un cuadro en dos dimensiones con 4 filas y 3 columnas.Las filas son horizontales y las columnas son verticales numeradas desde 0

0 23 45 631 72 81 912 56 64 373 34 75 26

0 1 2

Se pueden manejar filas, columnas o componentes

TTT 9

**,.- /0- _.2- *1,- @+- `+2- *0_- _/- .12- *./- 10- ,_22

La matriz almacenada es lineal 

TTT 9*+2  Fila 1*1,- @+- `+2

TTT :&5 " "% 59%F$</=; Columna 1 45"%(<9*"2*+2=

/0

@+

_/

10

TTT 9*+2*,2 Componente ubicado en la fila 1, columna 2 91

ESPOL – Python Programación

Page 208: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 208/293

208

TTT :&5 " "% 59%F$<8$%<9==;  Se puede imprimir para visualizarla por filas 45"%(<9*"2=

*,.- /0- _.2

*1,- @+- `+2

*0_- _/- .12*./- 10- ,_2

7.9.1 Construcción declarativa de listas numéricas (matrices)

Las listas numéricas pueden construirse mediante declaraciones en la ventana interactivao dentro de programas

a) Mediante declaraciones implícitas

TTT LU**"2 :&5 " "% 59%F$<0=2 Crea una lista de listas TTT L

**>2- *+2- *,2- *.2- */22

TTT LU**"-+2 :&5 " "% 59%F$<0=2 Filas de dos componentes TTT L

**>- +2- *+- +2- *,- +2- *.- +2- */- +22

TTT LU**"-"B+-"B,2 :&5 " "% 59%F$<0=2 Filas de tres componentes TTT L

**>- +- ,2- *+- ,- .2- *,- .- /2- *.- /- 02- */- 0- _22

a) Mediante declaraciones explícitas

TTT 9U*2

TTT :&5 " "% 59%F$<0=; Crear una matriz con listas vacías (filas) 9U9B**22

TTT 9

**2- *2- *2- *2- *22  Contiene 5 listas vacías (filas de la matriz) 

Llenar las filas de una matriz 4x3 con enteros consecutivos del 0 al 2

TTT 9U*2

TTT :&5 " "% 59%F$</=;

9U9B**22  Inicia una lista de listas (filas de la matriz) :&5 C "% 59%F$<.=;

9*"2U9*"2B*C2  En cada lista interior (fila) se coloca un valor  TTT 9

**>- +- ,2- *>- +- ,2- *>- +- ,2- *>- +- ,22

ESPOL – Python Programación

Page 209: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 209/293

209

Llenar una matriz 4x3 con números aleatorios enteros de una cifra

TTT :5&3 59%I&3 "34&5(Q

TTT 9U*2

TTT :&5 " "% 59%F$</=;

9U9B**22:&5 C "% 59%F$<.=;

9*"2U9*"2B*59%I"%(<>-`=2

TTT 9

**1- ,- @2- *0- +- >2- *0- @- `2- *>- @- .22

7.9.2 Algunas funciones de la librería NumPy para matrices

NumPy es una librería de soporte para aplicaciones matemáticas, científicas y de

ingeniería. NumPy y otra librería con el nombre SciPy  incluyen una gran cantidad defunciones para aplicaciones en álgebra lineal, interpolación, estadística, optimización, etc.

Este módulo maneja una estructura de datos para manejo de vectores y matricesdenominada array o arreglo, similares a la listas de Python, con la diferencia que loselementos de un arreglo deben ser del mismo tipo, usualmente numéricos.

Para importar la librería y tener acceso a las funciones, se puede usar la declaración típica::5&3 %E34N "34&5(Q 

Creación de arreglos con NumPy

TTT :5&3 %E34N "34&5(Q

TTT aU9559N<*.-_-1-,-@2= Creación de un vector filaTTT a

9559N<*.- _- 1- ,- @2=

TTT aU9559N<**.2-*_2-*12-*,2-*@22= Creación de un vector columna TTT a

9559N<**.2-

*_2-*12-

*,2-

*@22=

TTT 9U9559N<**/-,-02-*,-@-/2-*_-`-022=  Creación de una matriz (arreglo 2 d) TTT 9

9559N<**/- ,- 02-  NumPy muestra la matriz por filas *,- @- /2-

*_- `- 022=

ESPOL – Python Programación

Page 210: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 210/293

210

TTT 9U9559N<**/-,-02-*,-@-/2-*_-`-022-:8&9(= Se puede especificar el tipoTTT 9

9559N<** /A- ,A- 0A2-

* ,A- @A- /A2-

* _A- `A- 0A22=

Los componentes de las matrices pueden ser manipulados con índices, igual que las listasTTT 9*+2*,2

/A>

Los arreglos admiten también la notación de índices separados por comas. Las listas no.TTT 9*+-,2

/A>

Se pueden manejar filas o columnas completasTTT 9*+-;2

9559N<* ,A- @A- /A2=  Es la fila 1 

TTT 9*;-+2

9559N<* ,A- @A- `A2=  Contiene los elementos de la columna 1 

TTT *%-32U9A'P94$  Dimensiones de un arreglo TTT % Número de filas .

TTT 3 Número de columnas .

TTT @ "% 9  Operador de pertenencia G5E$

TTT JU9559N<59%F$<`=-"%(= Un arreglo se puede generar con rango TTT J

9559N<*>- +- ,- .- /- 0- _- 1- @2=

TTT JUJA5$'P94$<<.-.==  Convertir a un arreglo de 2 dimensiones TTT J

9559N<**>- +- ,2-

*.- /- 02-

*_- 1- @22=

TTT LUJA(&8"'(<=  Un arrreglo se puede reconvertir a lista TTT L

**>- +- ,2- *.- /- 02- *_- 1- @22

TTT aU**0-/2-*1-.22  Una lista se puede convertir a arregloTTT EU9559N<a=

TTT E

9559N<**0- /2-

*1- .22=

ESPOL – Python Programación

Page 211: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 211/293

Page 212: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 212/293

212

TTT '&5(<9= Ordenamiento por filas 9559N<**,- /- 02-

*,- /- @2-

*0- _- `22=

TTT I"9F&%98<9=  Elementos de la diagonal 

9559N<*/- @- 02=

TTT 8"%98FAI$(<9=  Determinante ?+>0A`````````````1

TTT 8"%98FA"%a<9=  Matriz inversa 9559N<**?>A>.11.0@0- ?>A..>+@@_@- >A.>+@@_1`2-

*?>A+.,>10/1- >A>`/..`_,- >A>0__>.112-

* >A,@.>+@@1- >A,,_/+0>`- ?>A,_/+0>`/22=

TTT (59%'4&'$<9=  Matriz transpuesta 9559N<**/- ,- _2-

*,- @- `2-

*0- /- 022=

TTT (5"8<9= Matriz triangular inferior  9559N<**/- >- >2-

*,- @- >2-

*_- `- 022=

TTT (5"E<9= Matriz triangular superior  

9559N<**/- ,- 02-*>- @- /2-

*>- >- 022=

TTT 9UX$5&'<*.-/2-"%(= Llenar una matriz con ceros, tipo entero TTT 9

9559N<**>- >- >- >2-

*>- >- >- >2-

*>- >- >- >22=

TTT "I$%("(N<0=  Matriz identidad 9559N<**+- >- >- >- >2-

*>- +- >- >- >2-

*>- >- +- >- >2-

*>- >- >- +- >2-

*>- >- >- >- +22=

TTT "I$%("(N<0-"%(= Matriz identidad con enteros 9559N<**+- >- >- >- >2-

*>- +- >- >- >2-

*>- >- +- >- >2-

*>- >- >- +- >2-*>- >- >- >- +22=

ESPOL – Python Programación

Page 213: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 213/293

213

La librería NumPy  fué cargada con la instrucción

:5&3 %E34N "34&5(Q

Esta declaración permite usar las funciones de forma directa y simple como en el ejemplo:

TTT 9U9559N<**/-,-02-*,-@-/2-*_-`-022=

TTT 'E3<9=

/0

Un inconveniente con esta notación es que en ocasiones entra en conflicto con otrasfunciones con mismo nombre de la librería estándar de Python. Por ejemplo si se escribe:

TTT 39M<9=

Se producirá un error pues la función max  actúa de manera diferente en las dos librerías.

Debido a esto, muchos usuarios de Python  y NumPy  prefieren cargar las libreríasasignando una identificación como se muestra en la siguiente instrucción:

"34&5( %E34N 9' %4

 Ahora, todas las definiciones y funciones se escriben con la notación np. para referirse a lalibrería Numpy y evitar conflictos con funciones con el mismo nombre en otras librerías:

TTT 9U%4A9559N<**/-,-02-*,-@-/2-*_-`-022=

TTT %4A'E3<9=

/0

Esta notación permite usar otras funciones especiales que pertenecen a NumPy

TTT %4A3"%<9= El menor valor del arreglo a ,

TTT %4A95F3"%<9=  índice, contado por filas 1TTT %4A39M<9=  El mayor valor del arreglo a `

TTT %4A95F39M<9=  índice, contado por filas 7

ESPOL – Python Programación

Page 214: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 214/293

214

Aplicación: Resolución de un sistema de ecuaciones lineales con NumPy

Fundamento matemático:

Resolver el sistema

AX = BA: matriz de coeficientesB: vector de constantesX: vector solución

Entonces

X = A-1B, si |A| 0A-1: matriz inversa de A |A|: determinante de A 

Ejemplo. Resolver el sistema 

2 4 5 5

3 1 4 X 6

5 2 4 7

=

 

TTT 9U9559N<**,-/-02-*.-+-/2-*0-,-/22=  Matriz de coeficientes 

TTT JU9559N<**02-*_2-*122= Vector de constantes 

TTT 8"%98FAI$(<9= Determinante de la matriz 

,@A`````````````@`

TTT LU8"%98FA"%a<9=  Matriz inversa 

TTT MUI&(<L-J= Multipilcar  c con b 

TTT M

9559N<** >A1,/+.1`.2- Vector solución *?>A//@,10@_2-

* +A>_@`_00,22=

ESPOL – Python Programación

Page 215: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 215/293

215

7.9.5 Resolución de problemas con matrices

En esta sección se desarrollarán algunas aplicaciones, programas y funciones, conmatrices. Este conocimiento será útil para el desarrollo de nuevas aplicaciones.

Ejemplo. Escriba un programa que reciba una matriz y muestre un vector conteniendo lassumas de las filas.

Solución

Variablesa: matriz de nxm enterosv: vector con las sumas de las filas de la matriz a

Los datos ingresarán uno a la vez guiados por un mensaje y se colocarán en unamatriz.

f!E39 I$ :"89' I$ E%9 39(5"X

"34&5( %E34N 9' %4

%U"%(<"%4E(<DLE9%(9' :"89'; D==

3U"%(<"%4E(<DLE9%(9' L&8E3%9'; D==

9U*2

:&5 " "% 59%F$<%=;

9U9B**22

:&5 C "% 59%F$<3=;

MU"%(<"%4E(<DI9(& 4959 89 :"89 DB'(5<"=B

D L&8E3%9 DB'(5<C=BD ; D==

9*"2U9*"2B*M2

aU*2

:&5 " "% 59%F$<%=;

'U%4A'E3<9*"2=

aUaB*'2

45"%(<D!E39 I$ :"89'; D-a=

h5E$J9 I$8 45&F5939

TTTLE9%(9' :"89'; . 

LE9%(9' L&8E3%9'; , 

I9(& 4959 89 :"89 > L&8E3%9 > ; / 

I9(& 4959 89 :"89 > L&8E3%9 + ; , 

I9(& 4959 89 :"89 + L&8E3%9 > ; . 

I9(& 4959 89 :"89 + L&8E3%9 + ; 0 

I9(& 4959 89 :"89 , L&8E3%9 > ; _ 

I9(& 4959 89 :"89 , L&8E3%9 + ; / 

!E39 I$ :"89'; *_- @- +>2

ESPOL – Python Programación

Page 216: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 216/293

216

Ejemplo. Escriba un programa para llenar una matriz nxn con los coeficientes del triángulode Pascal:

11 1

1 2 11 3 3 11 4 6 4 11 5 10 10 5 1etc.

Solución A partir de la tercera fila, los elementos intermedios se obtienen sumando los doselementos cercanos ubicados en la fila anterior

Variables

p:  matriz con los coeficientesn:  número de filas

:5&3 %E34N "34&5(Q

%U"%(<"%4E(<DLE9%(9' :"89'; D==

4UX$5&'<*%-%2-"%(=

:&5 " "% 59%F$<%=;

4*"2*>2U+

4*"2*"2U+

:&5 " "% 59%F$<,-%=;

:&5 C "% 59%F$<+-"=;

4*"2*C2U4*"?+2*C?+2B4*"?+2*C2

45"%(<4=

Prueba del programa

TTT

LE9%(9' :"89'; @ 

** + > > > > > > >2

* + + > > > > > >2* + , + > > > > >2

* + . . + > > > >2

* + / _ / + > > >2

* + 0 +> +> 0 + > >2

* + _ +0 ,> +0 _ + >2

* + 1 ,+ .0 .0 ,+ 1 +22

ESPOL – Python Programación

Page 217: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 217/293

217

Ejemplo. Escriba una función que localice un elemento en una matriz

SoluciónNombre de la función: matbuscar  Nombre del módulo: matbuscar  

Parámetrosa: matrizx: elemento

Resultados"-C: fila y columna de x en la matriz a

si x no está en la matriz el resultado es: ?+- ?+ 

"34&5( %E34N 9' %4

I$: 39(JE'L95<9-M=;

*%-32U%4A'P94$<9=

:&5 " "% 59%F$<%=;

:&5 C "% 59%F$<3=;": MUU9*"2*C2;

5$(E5% *"-C2

5$(E5% *?+-?+2

Prueba de la función en la ventana interactiva

TTT :5&3 39(JE'L95 "34&5( 39(JE'L95

TTT 9U**/- ,2- *.- 02- *_- /22

TTT *"-C2U39(JE'L95<9-_=

TTT ",

TTT C

>

TTT *:-L2U39(JE'L95<9-`=

TTT :

?+

TTT L

?+

ESPOL – Python Programación

Page 218: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 218/293

Page 219: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 219/293

219

Ejemplo. Diseñar una aplicación para administrar el uso de los casilleros en un club.

Solución

En un progama se usará una matriz para representar los casilleros. Los elementos de la

matriz contendrán el código de identificación del usuario. Un casillero libre contendra cero.

El programa incluirá la función matbuscar  desarrollada anteriormente

Para la interacción se propone un menú con las siguientes opciones:1) Asignar casillero2) Devolver casillero3) Consultar casillero4) Consultar usuario5) Salir

fk&%(5&8 I$ 8&' L9'"88$5&' I$ E% L8EJ

"34&5( %E34N 9' %4

I$: 39(JE'L95<9-M=;

*%-32U%4A'P94$<9=

:&5 " "% 59%F$<%=;

:&5 C "% 59%F$<3=;

": MUU9*"2*C2;

5$(E5% *"-C2

5$(E5% *?+-?+2

%U"%(<"%4E(<DkE9%(9' :"89'; D==

3U"%(<"%4E(<DkE9%(9' L&8E3%9'; D==

LU%4AX$5&'<*%-32=

OP"8$ G5E$;

45"%(<D+= t'"F%95 L9'"88$5&D=

45"%(<D,= n$a&8a$5 L9'"88$5&D=

45"%(<D.= k&%'E8(95 L9'"88$5&D=

45"%(<D/= k&%'E8(95 E'E95"&D=

45"%(<D0= !98"5D=

&4LU"%4E(<Dd8"C9 E%9 &4L"\%; D=

": &4LUUD+D;"U"%(<"%4E(<DkE98 :"89; D==

CU"%(<"%4E(<DkE98 L&8E3%9; D==

": L*"2*C2UU>;

$U"%(<"%4E(<Dc%F5$'$ $8 L\I"F&; D==

L*"2*C2U$

$8'$;

45"%(<Dk9'"88$5& &LE49I&D=

ESPOL – Python Programación

Page 220: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 220/293

220

$8": &4LUUD,D;

"U"%(<"%4E(<DkE98 :"89; D==

CU"%(<"%4E(<DkE98 L&8E3%9; D==

": L*"2*C2UU>;

45"%(<Dk9'"88$5& %& $'() 9'"F%9I&D=

$8'$;L*"2*C2U>

$8": &4LUUD.D;

"U"%(<"%4E(<DkE98 :"89; D==

CU"%(<"%4E(<DkE98 L&8E3%9; D==

": L*"2*C2UU>;

45"%(<Dk9'"88$5& %& $'() 9'"F%9I&D=

$8'$;

45"%(<Dd8 L9'"88$5& $'() &LE49I&D=

$8": &4LUUD/D;

MU"%(<"%4E(<Dc%F5$'$ $8 L\I"F&; D==

*"-C2U39(JE'L95<L-M=

": "TU> 9%I CTU>;

45"%(<Dd8 E'E95"& $'() $% $8 L9'"88$5&; D-"-C=

$8'$;

45"%(<Dd8 E'E95"& %& ("$%$ L9'"88$5& 9'"F%9I&D=

$8": &4LUUD0D;

45"%(<DtI"\'D=

J5$9K 

Prueba del programaTTT

kE9%(9' :"89'; / 

kE9%(9' L&8E3%9'; / 

+= t'"F%95 L9'"88$5&

,= n$a&8a$5 L9'"88$5&

.= k&%'E8(95 L9'"88$5&

/= k&%'E8(95 E'E95"&

0= !98"5

d8"C9 E%9 &4L"\%; + 

kE98 :"89; , 

kE98 L&8E3%9; . 

c%F5$'$ $8 L\I"F&; +,. 

+= t'"F%95 L9'"88$5&

,= n$a&8a$5 L9'"88$5&

.= k&%'E8(95 L9'"88$5&

/= k&%'E8(95 E'E95"&

0= !98"5

d8"C9 E%9 &4L"\%; . 

kE98 :"89; , 

kE98 L&8E3%9; . 

d8 L9'"88$5& $'() &LE49I&A A A A A A A

ESPOL – Python Programación

Page 221: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 221/293

221

7.9.6 Ejercicios con matrices

1. Lea una matriz cuadrada. Descomponga la matriz en tres matrices: submatriz debajo dela diagonal, submatriz diagonal, y submatriz sobre la diagonal. Verifique que la suma delas tres matrices coincide con la matriz original. Muestre las matrices obtenidas

2. Lea una matriz nxm. Para cada fila, muestre el producto de los elementos cuyo valor esun número par.

3. Lea una matriz cuadrada. Muestre la suma de los elementos que no están en las dosdiagonales principales. 

4. Uno de los pasos que se requieren en los algoritmos para resolver un sistema deecuaciones lineales consiste en intercambiar las filas de una matriz cuadrada para colocaren la diagonal principal los elementos de mayor magnitud de cada columna.

Escriba un programa que reciba una matriz cuadrada nxn, intercambie las filas desdearriba hacia debajo de tal manera que el elemento de mayor magnitud de cada columna seubique en la diagonal y sustituya con ceros el resto de la fila hacia la derecha, como semuestra en el ejemplo.

2 7 6

4 5 3

9 8 1

 ⇒ 

9 0 0

4 5 3

2 7 6

 ⇒ 

9 0 0

2 7 0

4 5 3

 

5. Lea una matriz nxn, siendo n un dato inicial. Suponga que cada celda contiene un dato

(peso en kg.). Determine cuales son las celdas interiores en las cuales el valor del peso esmayor que el promedio de las cuatro celdas ubicadas a sus cuatro lados inmediatos, esdecir que no debe considerar las celdas en los bordes.

6. El área de un patio está distribuida en celdas ordenadas en filas y columnas. En cadacelda están almacenados paquetes del mismo tipo.Escriba un programa que lea una matriz cuyo contenido representa la cantidad depaquetes ubicados en cada celdaa) Encuentre el valor promedio de la cantidad de paquetes existentes en todas las celdas.b) Encuentre cual celda contiene más paquetes.c) Muestre las coordenadas y la cantidad de paquetes que contiene una celda cuya

posición: número de fila y número de columna, son valores elegidos al azar en elprograma..

7. Se dice que una matriz es ‘Diagonal dominante’ si en cada fila, el valor del elementoubicado en la diagonal, es mayor a la cada uno de los otros elementos de esa fila.

Escriba un programa que lea una matriz nxn y determine si es tipo ‘Diagonal dominante’

ESPOL – Python Programación

Page 222: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 222/293

222

8. Escriba un solo programa que lea una matriz  nxn y desarrolle instrucciones quesucesivamente permitan determinar:

a) La suma de los elementos con valor impar de cada columnab) El valor promedio de los elementos de cada filac) El mayor valor y su posición en cada fila de la matriz

d) La cantidad de elementos en cada fila que son mayores al promedio de la filae) El producto de los elementos de la diagonalf) Sustituya cada elemento impar de la matriz con un núm. aleatorio de una cifrag) La suma de los elementos de la matriz que no pertenecen a la triangular superiorh) Genere un entero aleatorio de 1 cifra. ¿Cuantas veces está en la matriz de f) ?i) Convierta la matriz en un vector, ordene los elementos y muéstre el vector

9. Un cuadrado semi-mágico es una matriz cuadrada conteniendo números tales que lasuma las dos diagonales principales producen el mismo resultado.

Ejemplo. Un cuadrado semi-mágico de 4 filas y 4 columnas:

8 1 6 7 6 5 7  34 3 2  12  8 9 4 

Escriba un programa que coloque números enteros aleatorios de una cifra en una matrizde 4 filas y 4 columnas. Repita el ciclo hasta que la matriz sea un cuadrado semi-mágico.

El programa debe mostrar la matriz resultante y la cantidad de intentos que realizó elprograma hasta llenar la matriz con éxito.

10. Escriba un programa que coloque números aleatorios de una cifra en los cuatro bordes

de una matriz. Después rellene los elementos del interior de la matriz con númerosaleatorios de una cifra, tales que cada uno sea menor o igual al promedio de todos loselementos en los bordes

Ejemplo. Matriz inicial de 4 x 4 Matriz rellena:

8 1 6 7 8 1 6 76 3 promedio: 4.91  6 3 4 34 1 4 2 3 12 8 9 4 2 8 9 4

 Al inicio no interesan los valores que se asignan a los elementos interiores pues seránsustituidos.

El programa debe mostrar la matriz resultante y la cantidad de intentos que realizó elprograma hasta llenar la matriz con éxito.

11. Escriba una función  b=cambiar(a,h,k)  que reciba una matriz nxn e intercambie la filah con la fila k. La función debe entregar la matriz transformada.

En la ventana interactiva genere una matriz cuadrada con números aleatorios de una cifra.Llame a la función y verifique si el resultado es correcto.

ESPOL – Python Programación

Page 223: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 223/293

223

12. Escriba una función b=diagonales(a) que reciba una matriz nxn  e intercambie loselementos de la diagonal principal con los elementos de la otra diagonal.

Ejm. Matriz inicial de 4 x 4 Matriz modificada3 2 7 9 9  2 7 3 6 5 3 7 6 3  5  7

8 8 1 6 8 1 8 63 5 9 2 2 5 9 3 

En la ventana interactiva genere una matriz cuadrada con números aleatorios de una cifra.Llame a la función y verifique si el resultado es correcto.

13. Escriba una función que reciba una matriz. La función debe debe entregar un vectorcon la cantidad de elementos pares que contiene cada columna de la matriz

Ejm. Entra

3 4 5

6 1 8

8 6 3

7 8 7

  sale [2, 3, 1]

Escriba un programa que lea una matriz, llame a la función creada y determine cual es lacolumna con la mayor cantidad de números pares

14. Lea un vector x de n componentes. Construya una función d = mvan(x) que reciba elvector x y entregue la matriz d  según la definición indicada con el ejemplo:

x = [2, 3, 5, 4]

d =

3 2 1

3 2 1

3 2 1

3 2 1

2 2 2 1

3 3 3 1

5 5 5 1

4 4 4 4

 

15. Escriba un programa para controlar la cantidad de contenedores en un patio. Ingresecomo dato la cantidad inicial y ofrezca las siguientes opciones:

1. Salida de contenedores2. Llegada de contenedores3. Cantidad actual de contenedores4. Terminar el control

En cada repetición el operador elige la opción ingresando el número y la cantidad de

contenedores.

16. Escriba un programa para controlar el uso de los camiones de una empresa. Cadacamión tiene un código. Ingrese como dato inicial la lista de los códigos de los camiones.Programe una aplicación con las siguientes opciones:

1. Salida de un camión2. Devolución de un camión3. Disponibilidad de un camión4. Terminar

El operador elige la opción ingresando el número.

ESPOL – Python Programación

Page 224: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 224/293

224

17. Un grafo consta de vértices que pueden representarse mediante círculos y arcos quelos conectan. Esta conectividad puede describirse mediante una matriz en la que el valor 1indica que existe un arco en esa dirección, mientras que el valor 0 indica que no existe elarco con esa dirección, como se muestra en el ejemplo

Escriba un programa para almacenar 0 o 1 aleatoriamente en una matriz nxn, siendo n undato que debe leerse inicialmente. Dentro del programa llene la diagonal con 1's paraindicar que cada nodo está conectado consigo mismo. El programa examinar las filas paradeterminar

a) Cual nodo no tiene conecciones con otros nodos (no tiene arcos)b) Cual es el nodo que tiene más conecciones con otros nodos

18. Versión simple del juego de la vida

Generar una matriz aleatoria nxm con 0’s y 1’s, en donde 1 representa un organismo vivoy 0 su desaparición

Un ciclo de vida significa recorrer todas las celdas de la matriz con las siguientes reglasa) Si la celda contiene 0 y existe una o dos celdas con 1 en

alguno de los cuatro lados, la celda cambia a 1b) Si la celda contiene 1 y existen tres o cuatro celdas con 1en sus cuatro lados, su valor cambia a 0

c) En los otros casos, la celda no cambia de valor

Escriba un programa para simular k ciclos de vida. Muestre la cantidad de organismosvivos al inicio y luego de los k ciclos

19. Diseñe un programa para administrar el uso de los casilleros de una institución. Loscasilleros están organizados en n filas y m columnas. Inicialmente los casilleros contienenel valor cero, lo cual significa que están vacíos. El programa debe usar un menú con las

siguientes opciones:1) Consultar casillero2) Asignar casillero3) Devolver casillero4) Buscar usuario5) Salir

En la opción 1, verificar si el casillero contiene cero, mostrar mensaje DISPONIBLE uOCUPADOEn la opción 2, almacenar en el casillero el código del usuario asignadoEn la opción 3, almacenar cero en el casillero que es devuelto

En la opción 4, ingresar el código de algún usuario. Buscar la ubicación del casilleroasignado.

Matriz de conectividad

1 2 3 4 5 61  1 1 1 0 0 02  0 1 1 1 1 03  0 1 1 0 0 04  0 0 0 1 0 15  0 0 0 1 1 06  0 0 0 1 0 1

ESPOL – Python Programación

Page 225: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 225/293

225

20. Un grafo consta de vértices que pueden representarse mediante círculos y arcos quelos conectan. Esta conectividad puede describirse mediante una matriz en la que el valor 1indica que existe un arco en esa dirección, mientras que el valor 0 indica que no existe elarco con esa dirección, como se muestra en el ejemplo

Escriba un programa para manejar interactivamente la conectividad de un grafo medianteun menú con las siguientes opciones de un menú:

1) Agregar arco2) Eliminar arco

3) Consultar arco4) Vértices libres5) Salir

 Al inicio debe pedir el número de vértices n. Llenar con 1 la diagonal y 0 en el resto de lamatriz

En la opción 1) debe pedir los vértices inicial y final, y colocar 1 en la celda de la matrizubicada en la fila y columna respectivas.

En la opción 2) debe pedir los vértices inicial y final, y colocar 0 en la celda de la matrizubicada en la fila y columna respectivas.

En la opción 3) debe pedir los vértices inicial y final, y mostrar un mensaje dependiendo delcontenido de la celda de la matriz ubicada en la fila y columna respectivas

En la opción 4) busque cada fila (vértice inicial) que tiene todas las columnas con ceros(vértices finales), excepto la diagonal.

Matriz de conectividad

1 2 3 4 5 61  1 1 1 0 0 02  0 1 1 1 1 03  0 1 1 0 0 04  0 0 0 1 0 15  0 0 0 1 1 06  0 0 0 1 0 1

ESPOL – Python Programación

Page 226: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 226/293

226

8 Registros y archivos

8.1 Definición de registros

Un registro es un dispositivo para contener datos que pueden tener diferente tipo. Algunoslenguajes de programación tienen un tipo especial de datos para representar registros. Losregistros normalmente están asociados a dispositivos externos de almacenamiento comodiscos

Python no dispone en su librería estándar este tipo de datos, sin embargo, se puede usaruna lista como un contenedor natural para almacenar registros puesto que las listas enPython pueden contener componentes de diferente tipo y además pueden modificarse.

Si se requiere manejar varios registros, cada uno de ellos almacenado en una lista, sepuede definir una lista de listas.

Ejemplo. Defina la estructura de un registro para almacenar datos de los artículos de unaempresa. Cada artículo contendrá el código, la cantidad, el precio y el nombre.

Variables:5$F;  Lista que contiene a cada registro 5$F"'(5&'M  Lista de listas. Es el contenedor de los registros en memoria

TTT 5$F"'(5&'U*2

TTT 5$FU*+,.-,>-+,A0-D8"J5&D2

TTT 5$F"'(5&'U5$F"'(5&'B*5$F2

TTT 5$FU*,./-.>-,A0-DLE9I$5%&D2

TTT 5$F"'(5&'U5$F"'(5&'B*5$F2

TTT 5$F"'(5&'

**+,.- ,>- +,A0- D8"J5&D2- *,./- .>- ,A0- DLE9I$5%&D22

TTT 5$F"'(5&'*+2

*,./- .>- ,A0- DLE9I$5%&D2

TTT 5$F"'(5&'*+2*,2

,A0

TTT 5$F"'(5&'*+2*.2*>;/2

DLE9ID 

ESPOL – Python Programación

Page 227: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 227/293

227

8.2 Desarrollo de una aplicación con registros en memoria

En esta sección se desarrollará un ejemplo para almacenar registros utilizando listas enmemoria.

Ejemplo. Crear una aplicación para manejar los datos de los artículos de una empresa.

Datos de cada artículo:Código de identificaciónCantidad actualPrecioNombre

Opciones disponibles1) Ingresar:  Ingreso de un nuevo artículo: código, cantidad, precio y nombre2) Consultar:  Conocer los datos de un artículo dado su código

3) Agregar:  Agregar cantidad a un artículo existente4) Vender:  Vender una cantidad de un artículo existente5) Eliminar:  Eliminar o dar de baja un artículo6) Salir

Solución

Variables:registros: Es una lista cuyos componentes son listas que las consideraremos

registros para almacenar los datos de los artículos. Esta lista serácreada y estará disponible únicamente en la memoria.

Componentes del registrocod:  código del artículocant:  cantidad actual de artículos disponiblespre:  precio del artículonom: nombre del artículo

En esta versión se instrumentará la solución escribiendo en un solo programa todoas lasinstrucciones.

ESPOL – Python Programación

Page 228: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 228/293

228

fW9%$C& I$ 5$F"'(5&' $% 3$3&5"9

5$F"'(5&'U*2

OP"8$ G5E$;

45"%(<=

45"%(<D+= c%F5$'95 95(sLE8&D=

45"%(<D,= k&%'E8(95 95(sLE8&D=45"%(<D.= k&34595D=

45"%(<D/= l$%I$5D=

45"%(<D0= d8"3"%95 95(sLE8&D=

45"%(<D_= !98"5D=

&4LU"%4E(<Dd8"C9 E%9 &4L"\%; D=

": &4LUUD+D;

L&IU"%(<"%4E(<Dc%F5$'$ L\I"F&; D==

L9%(U"%(<"%4E(<Dc%F5$'$ L9%("I9I; D==

45$U:8&9(<"%4E(<Dc%F5$'$ 45$L"&; D==

%&3U"%4E(<Dc%F5$'$ %&3J5$; D=

5$FU*L&I-L9%(-45$-%&32

5$F"'(5&'U5$F"'(5&'B*5$F2

$8": &4LUUD,D;

LU"%(<"%4E(<Dc%F5$'$ L\I"F&; D==

4U?+b

:&5 " "% 59%F$<8$%<5$F"'(5&'==;

": LUU5$F"'(5&'*"2*>2;

4U"

J5$9K

": 4S>;45"%(<Dt5(sLE8& %& $M"'($D=

$8'$;

45"%(<Dk9%("I9I; D-5$F"'(5&'*42*+2=

45"%(<Dh5$L"&; D-5$F"'(5&'*42*,2=

45"%(<D7&3J5$; D-5$F"'(5&'*42*.2=

$8": &4LUUD.D;

LU"%(<"%4E(<Dc%F5$'$ L\I"F&; D==

4U?+b

:&5 " "% 59%F$<8$%<5$F"'(5&'==;

": LUU5$F"'(5&'*"2*>2;

4U"

J5$9K

": 4S>;

45"%(<Dt5(sLE8& %& $M"'($D=

$8'$;

KU"%(<"%4E(<Dc%F5$'$ 89 L9%("I9I L&3459I9; D==

5$F"'(5&'*42*+2U5$F"'(5&'*42*+2BK

ESPOL – Python Programación

Page 229: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 229/293

Page 230: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 230/293

230

d8"C9 E%9 &4L"\%; + 

c%F5$'$ L\I"F&; ,./ 

c%F5$'$ L9%("I9I; 0> 

c%F5$'$ 45$L"&; .A,0 

c%F5$'$ %&3J5$; H8$M\3$(5& 

+= c%F5$'95 95(sLE8&

,= k&%'E8(95 95(sLE8&

.= k&34595

/= l$%I$5

0= d8"3"%95 95(sLE8&

_= !98"5

d8"C9 E%9 &4L"\%; . 

c%F5$'$ L\I"F&; ,./ 

c%F5$'$ 89 L9%("I9I L&3459I9; 0 

+= c%F5$'95 95(sLE8&

,= k&%'E8(95 95(sLE8&

.= k&34595

/= l$%I$5

0= d8"3"%95 95(sLE8&

_= !98"5

d8"C9 E%9 &4L"\%; , 

c%F5$'$ L\I"F&; ,./ 

k9%("I9I; 00 

h5$L"&; .A,0 

7&3J5$; H8$M\3$(5&

+= c%F5$'95 95(sLE8&

,= k&%'E8(95 95(sLE8&

.= k&34595

/= l$%I$5

0= d8"3"%95 95(sLE8&

_= !98"5

d8"C9 E%9 &4L"\%; _ 

tI"\'

ESPOL – Python Programación

Page 231: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 231/293

231

8.3 Funciones y métodos para manejo de archivos secuenciales en disco

El lenguaje Python provee las instrucciones para manejo de archivos en el disco.En la forma básica, la información que se puede almacenar en disco son cadenas de texto.

En las siguientes instrucciones se usará la notación:f:  es el nombre de una variable u objeto creado de tipo archivon: es una cadena con el nombre del archivo en el disco.

usuamente agregada la extensión .txt 

Apertura de un archivoEsta función se usa para crear o abrir el archivo para su uso:U&4$%<%-(=

t:  es el tipo de operación que se realizará con el archivo:

Tipos de operación

‘w’  Para crear el archivo‘a’  Crear y agregar datos al archivo‘r’  Leer datos del archivo‘r+’  Leer y escribir en el archivo

Cierre de un archivo Al finalizar la operación de un archivo, debe cerrarse con la función:AL8&'$<=

Lectura del contenido de un archivoLee una linea de texto del archivo hasta encontrar el carácter de fín de linea: ‘\n’ Si no quedan líneas, retorna una línea vacíaaU:A5$9I8"%$<=

En donde v es la variable que recibe la linea de texto

Escritura de texto en el archivoEscribe en el archivo una línea de texto, normalmente finalizada con el carácter defin de línea ‘\n’ :AO5"($<'=

s  contiene la línea de texto

Detectar la posición actual del dispositivo de lectura del archivo4U:A($88<=

p contendrá un entero con la posición actual. La posición inicial en el archivo es 0 

Ubicar el dispositivo de lectura del archivo en una posición específicada:A'$$K<I=

d es el desplazamiento contado a partir del inicio que es la posición 0 

ESPOL – Python Programación

Page 232: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 232/293

232

8.4 Conversión de registros a líneas de texto para almacenar en archivossecuenciales en el disco

Para almacenar los registros en el archivo, los datos deben convertirse a texto y armaruna línea, separándolos con comas y agregando al final la marca de fin de línea ‘\n’. Esta

línea es almacenada en el archivo en disco.

 Al traer la línea de texto del disco se la convierte en una lista con la función split. De estalista se toman los componentes convirtiéndolos al tipo original.

Este procedimiento se lo describe con el siguiente ejemplo

Almacenar un registro en el archivo ‘nuevo’

TTT :U&4$%<D%E$a&A(M(D-D9D=  Abrir archivo para agregar  TTT L&IU+,.

TTT L9%(U,>TTT 45$U+,A0

TTT %&3UD8"J5&D

TTT 8"%$9U'(5<L&I=BD-DB'(5<L9%(=BD-DB'(5<45$=BD-DB%&3BDe%D   Armar la lineaTTT 8"%$9

D+,.-,>-+,A0-8"J5&e%D

TTT :AO5"($<8"%$9=  Escribir la linea en el archivo TTT :AL8&'$<=

Leer la línea de texto (registro) del disco y reconstruir los datos con el tipo original

TTT :U&4$%<D%E$a&A(M(D-D5D=  Abrir archivo para lectura TTT 8"%$9U:A5$9I8"%$<=

TTT 'U8"%$9A'48"(<D-D= Separar componentes en una lista TTT '

*D+,.D- D,>D- D+,A0D- D8"J5&e%D2

TTT L&IU"%(<'*>2= Convertir componentes a su tipo original TTT L9%(U"%(<'*+2=

TTT 45$U:8&9(<'*,2=

TTT %&3U'*.2

TTT 5$FU*L&I-L9%(-45$-%&32

TTT 5$F*+,.- ,>- +,A0- D8"J5&e%D2

La marca '\n'  es la marca de fin de linea para la lectura desde el disco. También produceun salto de línea al imprimir la línea en la pantalla.

ESPOL – Python Programación

Page 233: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 233/293

233

8.5 Desarrollo de una aplicación con registros y archivos secuenciales en eldisco

En esta sección se explora el uso de archivos secuenciales para almacenar líneas detexto. Estos archivos permiten escribir en el disco las lineas de texto en forma secuencial y

también leerlas del disco en forma secuencial.

Ejemplo. Instrumentar una aplicación para almacenar en disco y listar los datos deartículos de una empresa mediante registros permanentes en el disco.

Especificaciones

Componentes de cada artículoCódigo del artículo (entero)Cantidad de artículos (entero)Precio del artículo (real)

Nombre del artículo (cadena de caracteres)

Opciones1) Ingresar artículo2) Listar artículos3) Salir

Con la opción 1) se agrega un nuevo artículo al archivoCon la opción 2) se lista en pantalla los artículos almacenados en el disco

Solución

Para almacenar los registros en el archivo los datos ingresados son convertidos a unalínea de texto. Al leer esta línea, se la convierte nuevamente al tipo de los datos originales.

Variables

archivo:  Nombre del archivoarch:  Objeto tipo archivo para manejo internolínea:  Linea de texto con los datos separados por comas y

la marca de fín de linea

reg:  lista con los componentes de la línea de texto

cod:  Código del artículo (entero)cant:  Cantidad de artículos (entero)pre:  Precio del artículo (real)nom:  Nombre del artículo (cadena de caracteres)

ESPOL – Python Programación

Page 234: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 234/293

234

:5&3 'N' "34&5(Q

%&3J5$U"%4E(<Dc%F5$'$ $8 %&3J5$ I$8 95LP"a&; D=

(5N;

95LPU&4$%<%&3J5$BDA(M(D-D5D=$ML$4( H"8$7&(H&E%Id55&5;

45"%(<Dd8 95LP"a& %& $M"'($D=

5U"%4E(<Dn"F"($ + '" I$'$9 L5$95 $8 95LP"a&; D=

": 5UUD+D;

95LPU&4$%<%&3J5$BDA(M(D-DOD=

95LPAL8&'$<=

$8'$;

$M"(<>=

OP"8$ G5E$;

45"%(<De%D=

45"%(<D+= c%F5$'95 95(sLE8&D=

45"%(<D,= Y"'(9 I$ 95(sLE8&'D=

45"%(<D.= !98"5D=

&4LU"%4E(<Dd8"C9 E%9 &4L"\%; D=

": &4LUUD+D;

95LPU&4$%<%&3J5$BDA(M(D-D9D=

L&IU"%(<"%4E(<Dc%F5$'$ L\I"F&; D==

L9%(U"%(<"%4E(<Dc%F5$'$ L9%("I9I; D==

45$U:8&9(<"%4E(<Dc%F5$'$ 45$L"&; D==

%&3U"%4E(<Dc%F5$'$ %&3J5$; D=8"%$9U'(5<L&I=BD-DB'(5<L9%(=BD-DB'(5<45$=BD-DB%&3BDe%D

95LPAO5"($<8"%$9=

95LPAL8&'$<=

$8": &4LUUD,D;

95LPU&4$%<%&3J5$BDA(M(D-D5D=

8"%$9U95LPA5$9I8"%$<=

OP"8$ 8"%$9VUDD;

5$FU8"%$9A'48"(<D-D=

45"%(<Dk\I"F&; D-"%(<5$F*>2==

45"%(<Dk9%("I9I; D-"%(<5$F*+2==

45"%(<Dh5$L"&; D-:8&9(<5$F*,2==

45"%(<D7&3J5$; D-5$F*.2=

8"%$9U95LPA5$9I8"%$<=

95LPAL8&'$<=

$8": &4LUUD.D;

45"%(<DtI"\'D=

J5$9K 

ESPOL – Python Programación

Page 235: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 235/293

235

Prueba del programa

TTT

c%F5$'$ $8 %&3J5$ I$8 95LP"a&; 8"'(95( 

d8 95LP"a& %& $M"'($

n"F"($ + '" I$'$9 L5$95 $8 95LP"a&; +

+= c%F5$'95 95(sLE8&

,= Y"'(9 I$ 95(sLE8&'

.= !98"5

d8"C9 E%9 &4L"\%; + 

c%F5$'$ L\I"F&; +,. 

c%F5$'$ L9%("I9I; ,> 

c%F5$'$ 45$L"&; 0A, 

c%F5$'$ %&3J5$; 98"L9($

+= c%F5$'95 95(sLE8&

,= Y"'(9 I$ 95(sLE8&'

.= !98"5

d8"C9 E%9 &4L"\%; + 

c%F5$'$ L\I"F&; ,./ 

c%F5$'$ L9%("I9I;  /> 

c%F5$'$ 45$L"&; /A, 

c%F5$'$ %&3J5$; I$'(&5%"889I&5

+= c%F5$'95 95(sLE8&

,= Y"'(9 I$ 95(sLE8&'.= !98"5

d8"C9 E%9 &4L"\%; + 

c%F5$'$ L\I"F&; ./0 

c%F5$'$ L9%("I9I; .> 

c%F5$'$ 45$L"&; .A, 

c%F5$'$ %&3J5$; 395("88&

+= c%F5$'95 95(sLE8&

,= Y"'(9 I$ 95(sLE8&'

.= !98"5

d8"C9 E%9 &4L"\%; , 

k\I"F&; +,.

k9%("I9I; ,>

h5$L"&; 0A,

7&3J5$; 98"L9($

k\I"F&; ,./

k9%("I9I; />

h5$L"&; /A,

7&3J5$; I$'(&5%"889I&5

ESPOL – Python Programación

Page 236: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 236/293

236

k\I"F&; ./0

k9%("I9I; .>

h5$L"&; .A,

7&3J5$; 395("88&

+= c%F5$'95 95(sLE8&

,= Y"'(9 I$ 95(sLE8&'

.= !98"5

d8"C9 E%9 &4L"\%; .

tI"\' 

ESPOL – Python Programación

Page 237: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 237/293

237

8.6 Ejercicios con registros y archivos

1. Escriba un programa para el pago a los n vendedores por comisión de una empresa.Para cada vendedor se deben leer registros con los siguientes datos: Código deidentificación, nombre del vendedor, nivel (entero que puede ser 1, 2, 3), y el monto en

dinero vendido en el mes. El pago depende del nivel: nivel 1: $400, nivel 2: $500, nivel 3:$600. A este valor hay que agregar el 5% del valor de las ventas realizadas. Adicionalmente hay un bono de $100 al o los vendedores con el mayor valor de ventas.Lea los datos y muestre:

a) El valor que hay que pagar a cada vendedorb) El monto total que se requiere para pagar a todos los vendedores

Los datos deben almacenarse en listas en memoria.

2. Se tiene una lista de n códigos de artículos (números enteros) y la cantidad disponible

de cada uno, y otra lista de m clientes (números enteros) junto con el código del artículoque desea (un solo artículo por cliente) y la cantidad requerida.

 Almacene ambas listas en memoria y determine la cantidad total sobrante o faltante decada artículo para atender las solicitudes de todos los clientes.

3. Escriba un programa para control del registro de los estudiantes para un evento.El sistema debe incluir las siguientes opciones en un menú:1) Registrar estudiante2) Eliminar estudiante3) Consultar registro de estudiantes4) Mostrar estudiantes registrados5) Salir

Los datos serán manejados en una lista en memoria

4.  Escriba un programa con un menú para registrar estudiantes en uno de los dosparalelos de una materia mediante las opciones indicadas a continuación. Cada paralelodebe ser representado mediante una lista para manejo en memoria.

1) RegistrarLea el numero del paralelo elegido (1 o 2), luego lea el código del

estudiante y agréguelo a la lista correspondiente2) ConsultarLea el código del estudiante, búsquelo en las listas y muestre elparalelo en el que está registrado

3) CambiarLea el código del estudiante. Si está registrado elimínelo de la listay agréguelo a la otra lista

4) Salir

ESPOL – Python Programación

Page 238: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 238/293

238

5. Diseñe y pruebe un sistema para control de los socios de un club mediante el menú:1) Ingresar datos del socio2) Consultar datos del socio3) Salir

Los datos deben ser almacenados en un archivo secuencial en disco

Cada socio es un registro con tres datos:

Código: entero, es la identificación del socio.Categoría: entero: 1 si es niño, 2 si es adulto y 3 si es tercera edadCuotas: número de cuotas que el socio adeuda al club.

La primera opción permite ingresar los datos del socio en un registro y almacenarlo en unarchivo

La segunda opción pide el código del socio, lo busca en el archivo, y en caso de existir,muestra los datos

6. El Ministerio de Salud requiere implementar un programa para gestión de donantes desangre que permita registrar y consultar resultados con el menú mostrado. Los datosdeben almacenarse en forma permanente en el disco.

1. Ingreso de donante2. Consulta de donante3. Cosulta por tipo de sangre4. Salir

La información que se registra por paciente es: cédula, nombre, edad y tipo de sangre

La consulta por donante muestra el nombre del donante y su tipo de sangre, dado elnúmero de cédula.La consulta por tipo de sangre presenta el número de donantes por tipo de sangre

El tipo de sangre es un número (1, 2, 3, 4, 5, 6, 7, 8) los cuales corresponden a lossiguientes tipos: (1) O-, (2) O+, (3) A-, (4) A+, (5) B-, (6) B+, (7) AB-, (8) AB+

ESPOL – Python Programación

Page 239: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 239/293

Page 240: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 240/293

240

I$: 9F5$F95<$=;

MU"%(<"%4E(<Dc%F5$'$ 39(5sLE89; D==

": M %&( "% $;

$U$B*M2

$8'$;45"%(<D9 $'() "%'L5"(&D=

5$(E5% $

I$: $8"3"%95<$=;

MU"%(<"%4E(<Dc%F5$'$ 39(5sLE89; D==

": M "% $;

$A5$3&a$<M=

$8'$;

45"%(<D7& $'() "%'L5"(&D=

5$(E5% $

I$: L&%'E8(95<$=;

MU"%(<"%4E(<Dc%F5$'$ 39(5sLE89; D==

": M "% $;

45"%(<D!" $'() "%'L5"(&D=

$8'$;

45"%(<D7& $'() "%'L5"(&D=

I$: LE4&<$=;

%U8$%<$=

45"%(<Dk9%("I9I I$ "%'L5"(&'; D-%=

fh5&F5939 45"%L"498

$U*2

OP"8$ G5E$;

45"%(<D+= tF5$F95 5$F"'(5&D=

45"%(<D,= d8"3"%95 5$F"'(5&D=

45"%(<D.= k&%'E8(95 5$F"'(5&D=

45"%(<D/= kE4& 9L(E98D=

45"%(<D0= !98"5D=

&4LU"%4E(<Dd8"C9 E%9 &4L"\%; D=

": &4LUUD+D;

$U9F5$F95<$=

$8": &4LUUD,D;

$U$8"3"%95<$=

$8": &4LUUD.D;

L&%'E8(95<$=

$8": &4LUUD/D;

LE4&<$=

$8": &4LUUD0D

45"%(<DtI"\'D=J5$9K

ESPOL – Python Programación

Page 241: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 241/293

241

Prueba del programa

TTT

+= tF5$F95 5$F"'(5&

,= d8"3"%95 5$F"'(5&

.= k&%'E8(95 5$F"'(5&/= kE4& 9L(E98

0= !98"5

d8"C9 E%9 &4L"\%; + 

c%F5$'$ 39(5sLE89; +,. 

+= tF5$F95 5$F"'(5&

,= d8"3"%95 5$F"'(5&

.= k&%'E8(95 5$F"'(5&

/= kE4& 9L(E98

0= !98"5

d8"C9 E%9 &4L"\%; + 

c%F5$'$ 39(5sLE89; ,./ 

+= tF5$F95 5$F"'(5&

,= d8"3"%95 5$F"'(5&

.= k&%'E8(95 5$F"'(5&

/= kE4& 9L(E98

0= !98"5

d8"C9 E%9 &4L"\%; / 

k9%("I9I I$ "%'L5"(&'; , 

+= tF5$F95 5$F"'(5&

,= d8"3"%95 5$F"'(5&

.= k&%'E8(95 5$F"'(5&/= kE4& 9L(E98

0= !98"5

d8"C9 E%9 &4L"\%; , 

c%F5$'$ 39(5sLE89; +,. 

+= tF5$F95 5$F"'(5&

,= d8"3"%95 5$F"'(5&

.= k&%'E8(95 5$F"'(5&

/= kE4& 9L(E98

0= !98"5

d8"C9 E%9 &4L"\%; . 

c%F5$'$ 39(5sLE89; +,. 

7& $'() "%'L5"(&

+= tF5$F95 5$F"'(5&

,= d8"3"%95 5$F"'(5&

.= k&%'E8(95 5$F"'(5&

/= kE4& 9L(E98

0= !98"5

d8"C9 E%9 &4L"\%; 0 

tI"\'

ESPOL – Python Programación

Page 242: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 242/293

242

9.2 Desarrollo de una aplicación con acceso directo a registros almacenadosen disco

En el siguiente ejemplo se desarrolla una aplicación completa en forma modular paramanejo de datos almacenados en el disco con acceso directo. Esta aplicación debe ser

estudiada como una referencia para este tipo de proyectos.

Ejemplo. Instrumentar una aplicación para manejo del inventario de los artículos de unaempresa mediante registros permanentes en el disco.

Especificaciones

Componentes de cada artículoCódigo del artículo (entero en 5 columnas)Cantidad de artículos (entero en 6 columnas)Precio del artículo (real en 8 columnas)

Nombre del artículo (cadena de caracteres en 20 columnas)

Opciones1) Ingresar artículo2) Consultar artículo3) Comprar4) Vender5) Eliminar6) Salir

Con la opción 1) se agrega un nuevo artículo al archivoCon la opción 2) se visualiza en pantalla los datos de un artículo dado su códigoLas opciones 2) y 3) permitirán actualizar la cantidad de un artículo dado su códigoLa opción 4) se usará para eliminar un artículo del archivo

Solución

Para almacenar los registros en el archivo los datos ingresados son convertidos a unalínea de texto de tamaño fijo (40 caracteres incluyendo la marca de fín de línea ‘\n’). Al leer esta línea, se la convierte nuevamente al tipo de los datos originales.

Para acceder a cada línea de manera directa se utilizan las funciones seek() y tell(). Deesta manera se puede leer y volver a escribir la línea en la misma posición en el disco..

Los registros son líneas de texto almacenadas en el disco con una longitud fija (40caracteres incluyendo la marca de fín de línea ‘\n’). La estrategia para eliminar un registroserá asignar el valor 0 a la clave. Al ingresar un nuevo registro, se buscan registrosdisponibles en el disco (clave 0). Caso contrario, se lo agrega al final del archivo.

El programa incluye validación de datos mediante control de excepciones

ESPOL – Python Programación

Page 243: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 243/293

243

Variables

archivo:  Nombre del archivo (variable global)arch:  Objeto tipo archivo para manejo internolínea:  Linea de texto con los datos separados por comas y

la marca de fín de lineacod:  Código del artículo (entero)cant:  Cantidad de artículos (entero)pre:  Precio del artículo (real)nom:  Nombre del artículo (cadena de caracteres)

Módulos

Esta aplicación está desarrollada en base a módulos asociados a las acciones básicas quefueron identificadas en varios niveles. La comunicación entre el programa y los módulosusa una variable global para trasmitir el nombre del archivo.

Módulos de acciones principales

apertura:  Solicita el nombre del archivo para leerlo o crearloingreso:  Valida y agrega al archivo un registro con los datos de un nuevo artículoconsulta:  Dado un código, muestra los datos del artículo almacenadocomprar:  Localiza en el disco y modifica el dato de la cantidad de un artículovender: Localiza en el disco y modifica el dato de la cantidad de un artículoeliminar:  Descarta del disco el registro de un artículo dado su código

Módulos de soporte

leer_registro: Trae una linea (registro) del disco en una posición especificadabuscar_registro:  Localiza la posición de un registro en el disco dado el códigobuscar_bloque_libre: Localiza un bloque disponible para grabar un nuevo registrograbar_registro:  Graba una línea (registro) en el archivoencera_registro:  Anula un registro en el disco asignando cero a la clavereemplaza_registro:  Reemplaza un registro con otro con datos modificadoslinea_a_registro:  Convierte un registro almacenado en el disco como una

línea de texto, al formato de una lista para acceder a loscomponentes.

En las siguientes páginas se muestran los módulos instrumentados. En el último cuadroestá el programa principal que llama a los módulos. Para usar esta aplicación debenescribirse juntos los módulos y el programa y almacenar el conjunto con algún nombre.

ESPOL – Python Programación

Page 244: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 244/293

244

:5&3 'N' "34&5(Q

I$: 94$5(E59<=;

F8&J98 95LP"a&

95LP"a&U"%4E(<Dc%F5$'$ $8 %&3J5$ I$8 95LP"a&; D=(5N;

95LPU&4$%<95LP"a&BDA(M(D-D5D=

95LPAL8&'$<=

$ML$4( H"8$7&(H&E%Id55&5;

45"%(<Dd8 95LP"a& %& $M"'($D=

L5$95U"%4E(<Dn"F"($ + 4959 L5$95 $8 95LP"a&; D=

": L5$95UUD+D;

95LPU&4$%<95LP"a&BDA(M(D-DOD=

95LPAL8&'$<=

$8'$;

$M"(<=

I$: "%F5$'&<=;

F8&J98 95LP"a&

(5N;

LU"%(<"%4E(<Dc%F5$'$ L\I"F& ; D==

$ML$4( l98E$d55&5;

45"%(<Dn9(& "%L&55$L(&D=

5$(E5%

": LSU>;45"%(<Dk\I"F& "%L&55$L(&D=

5$(E5%

*$M"(&-4&'2UJE'L95z5$F"'(5&<L=

": $M"(&;

45"%(<Dk\I"F& N9 $M"'($D=

$8'$;

(5N;

L9%(U"%(<"%4E(<Dc%F5$'$ L9%("I9I; D==

45$U:8&9(<"%4E(<Dc%F5$'$ 45$L"& ; D==

%&3U"%4E(<Dc%F5$'$ %&3J5$ ; D=

$ML$4( l98E$d55&5;

45"%(<Dn9(& "%L&55$L(&D=

5$(E5%

8"%$9U'(5<L=A5CE'(<0=BD-DB'(5<L9%(=A5CE'(<_=B

D-DB'(5<45$=A5CE'(<@=BD-DB%&3A5CE'(<,>=BDe%D

F59J95z5$F"'(5&<8"%$9=

ESPOL – Python Programación

Page 245: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 245/293

245

I$: L&%'E8(9<=;

F8&J98 95LP"a&

(5N;

LU"%(<"%4E(<Dc%F5$'$ L\I"F&; D==

$ML$4( l98E$d55&5;

45"%(<Dk\I"F& "%L&55$L(&D=5$(E5%

*$M"(&-4&'2UJE'L95z5$F"'(5&<L=

": $M"(&;

8"%$9U8$$5z5$F"'(5&<4&'=

*L&I-L9%(-45$-%&32U8"%$9z9z5$F"'(5&<8"%$9=

45"%(<Dk\I"F&; D-L&I=

45"%(<Dk9%("I9I; D-L9%(=

45"%(<Dh5$L"&; D-45$=

45"%(<D7&3J5$; D-%&3A'(5"4<==

$8'$;

45"%(<D[$F"'(5& %& $M"'($D=

I$: L&34595<=;

F8&J98 95LP"a&

(5N;

LU"%(<"%4E(<Dc%F5$'$ L\I"F&; D==

$ML$4( l98E$d55&5;

45"%(<Dk\I"F& "%L&55$L(&D=

5$(E5%

*$M"(&-4&'2UJE'L95z5$F"'(5&<L=": $M"(&;

(5N;

KU"%(<"%4E(<Dc%F5$'$ 89 L9%("I9I L&3459I9; D==

$ML$4( l98E$d55&5;

45"%(<Dn9(& "%L&55$L(&D=

5$(E5%

5$$3489X9z5$F"'(5&<4&'-K=

$8'$;

45"%(<D[$F"'(5& %& $M"'($D=

ESPOL – Python Programación

Page 246: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 246/293

246

I$: a$%I$5<=;

F8&J98 95LP"a&

(5N;

LU"%(<"%4E(<Dc%F5$'$ L\I"F&; D==

$ML$4( l98E$d55&5;

45"%(<Dk\I"F& "%L&55$L(&D=5$(E5%

*$M"(&-4&'2UJE'L95z5$F"'(5&<L=

": $M"(&;

8"%$9U8$$5z5$F"'(5&<4&'=

*L&I-L9%(-45$-%&32U8"%$9z9z5$F"'(5&<8"%$9=

(5N;

KU"%(<"%4E(<Dc%F5$'$ 89 L9%("I9I a$%I"I9; D==

$ML$4( l98E$d55&5;

45"%(<Dn9(& "%L&55$L(&D=

5$(E5%

": KTL9%(;

45"%(<Dk9%("I9I I"'4&%"J8$ "%'E:"L"$%($D=

5$(E5%

5$$3489X9z5$F"'(5&<4&'-?K=

$8'$;

45"%(<D[$F"'(5& %& $M"'($D=

I$: $8"3"%95<=;

F8&J98 95LP"a&

(5N;LU"%(<"%4E(<Dc%F5$'$ L\I"F&; D==

$ML$4( l98E$d55&5;

45"%(<Dk\I"F& "%L&55$L(&D=

5$(E5%

*$M"(&-4&'2UJE'L95z5$F"'(5&<L=

": $M"(&;

$%L$59z5$F"'(5&<4&'=

$8'$;

45"%(<D[$F"'(5& %& $M"'($D=

I$: 8$$5z5$F"'(5&<4&'=;

F8&J98 95LP"a&

95LPU&4$%<95LP"a&BDA(M(D-D5D=

95LPA'$$K<4&'=

8"%$9U95LPA5$9I8"%$<=

5$(E5% 8"%$9

ESPOL – Python Programación

Page 247: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 247/293

247

I$: JE'L95z5$F"'(5&<L=;

F8&J98 95LP"a&

95LPU&4$%<95LP"a&BDA(M(D-D5D=

4&'U95LPA($88<=

8"%$9U95LPA5$9I8"%$<=

$M"(&UH98'$ OP"8$ 8"%$9VUDD;

*L&I-L9%(-45$-%&32U8"%$9z9z5$F"'(5&<8"%$9=

": LUUL&I;

$M"(&UG5E$

J5$9K

4&'U95LPA($88<=

8"%$9U95LPA5$9I8"%$<=

95LPAL8&'$<=

5$(E5% *$M"(&-4&'2

I$: F59J95z5$F"'(5&<8"%$9=;

F8&J98 95LP"a&

*$M"(&-4&'2UJE'L95zJ8&]E$z8"J5$<=

": $M"(&;

95LPU&4$%<95LP"a&BDA(M(D-D5BD=

95LPA'$$K<4&'=

95LPAO5"($<8"%$9=

95LPAL8&'$<=

$8'$;

95LPU&4$%<95LP"a&BDA(M(D-D9D=95LPAO5"($<8"%$9=

95LPAL8&'$<=

I$: JE'L95zJ8&]E$z8"J5$<=;

F8&J98 95LP"a&

95LPU&4$%<95LP"a&BDA(M(D-D5D=

4&'U95LPA($88<=

8"%$9U95LPA5$9I8"%$<=

$M"(&UH98'$ 

OP"8$ 8"%$9VUDD;

*L&I-L9%(-45$-%&32U8"%$9z9z5$F"'(5&<8"%$9=

": L&IUU>;

$M"(&UG5E$ 

J5$9K

4&'U95LPA($88<=

8"%$9U95LPA5$9I8"%$<=

95LPAL8&'$<=

5$(E5% *$M"(&-4&'2

ESPOL – Python Programación

Page 248: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 248/293

248

I$: $%L$59z5$F"'(5&<4&'=;

F8&J98 95LP"a&

8"%$9U8$$5z5$F"'(5&<4&'=

*L&I-L9%(-45$-%&32U8"%$9z9z5$F"'(5&<8"%$9=

L&IU>

8"%$9U'(5<L=A5CE'(<0=BD-DB'(5<L9%(=A5CE'(<_=BD-DB'(5<45$=A5CE'(<@=BD-DB%&3A5CE'(<,>=BDe%D

95LPU&4$%<95LP"a&BDA(M(D-D5BD=

95LPA'$$K<4&'=

95LPAO5"($<8"%$9=

95LPAL8&'$<=

I$: 5$$3489X9z5$F"'(5&<4&'-K=;

F8&J98 95LP"a&

8"%$9U8$$5z5$F"'(5&<4&'=

*L&I-L9%(-45$-%&32U8"%$9z9z5$F"'(5&<8"%$9=

L9%(UL9%(BK

8"%$9U'(5<L=A5CE'(<0=BD-DB'(5<L9%(=A5CE'(<_=B

D-DB'(5<45$=A5CE'(<@=BD-DB%&3A5CE'(<,>=BDe%D

95LPU&4$%<95LP"a&BDA(M(D-D5BD=

95LPA'$$K<4&'=

95LPAO5"($<8"%$9=

95LPAL8&'$<=

I$: 8"%$9z9z5$F"'(5&<8"%$9=;MU8"%$9A'48"(<D-D=

L&IU"%(<M*>2=

L9%(U"%(<M*+2=

45$U:8&9(<M*,2=

%&3UM*.2*>;8$%<M*.2=?+2

5$(E5% *L&I-L9%(-45$-%&32

ESPOL – Python Programación

Page 249: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 249/293

249

fW9%$C& I$ 5$F"'(5&' $% I"'L&

94$5(E59<=

OP"8$ G5E$;

45"%(<DD=

45"%(<D+= c%F5$'95 95(sLE8&D=

45"%(<D,= k&%'E8(95 95(sLE8&D=45"%(<D.= k&34595D=

45"%(<D/= l$%I$5D=

45"%(<D0= d8"3"%95D=

45"%(<D_= '98"5D=

&4LU"%4E(<Dd8"C9 E%9 &4L"\%; D=

": &4LUUD+D;

"%F5$'&<=

$8": &4LUUD,D;

L&%'E8(9<=

$8": &4LUUD.D;

L&34595<=

$8": &4LUUD/D;

a$%I$5<=

$8": &4LUUD0D;

$8"3"%95<=

$8": &4LUUD_D;

45"%(<DtI"\'D=

J5$9K 

Prueba del programa

TTT

c%F5$'$ $8 %&3J5$ I$8 95LP"a&; :$55$($5& 

d8 95LP"a& %& $M"'($

n"F"($ + '" I$'$9 L5$95 $8 95LP"a& $% $8 I"'L&; + 

+= c%F5$'95 95(sLE8&

,= k&%'E8(95 95(sLE8&.= k&34595

/= l$%I$5

0= d8"3"%95

_= '98"5

d8"C9 E%9 &4L"\%; + 

c%F5$'$ L\I"F& ; +,. 

c%F5$'$ L9%("I9I; ,> 

c%F5$'$ 45$L"& ; +@A0 

c%F5$'$ %&3J5$ ; G989I5& 

ESPOL – Python Programación

Page 250: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 250/293

250

+= c%F5$'95 95(sLE8&

,= k&%'E8(95 95(sLE8&

.= k&34595

/= l$%I$5

0= d8"3"%95

_= '98"5d8"C9 E%9 &4L"\%; + 

c%F5$'$ L\I"F& ; ,./ 

c%F5$'$ L9%("I9I; /> 

c%F5$'$ 45$L"& ; .A,0 

c%F5$'$ %&3J5$ ; H8$M\3$(5& 

+= c%F5$'95 95(sLE8&

,= k&%'E8(95 95(sLE8&

.= k&34595

/= l$%I$5

0= d8"3"%95

_= '98"5

d8"C9 E%9 &4L"\%; + 

c%F5$'$ L\I"F& ; ./0 

c%F5$'$ L9%("I9I; 0> 

c%F5$'$ 45$L"& ; ,A/0 

c%F5$'$ %&3J5$ ; n$'(&5%"889I&5 

+= c%F5$'95 95(sLE8&

,= k&%'E8(95 95(sLE8&

.= k&34595/= l$%I$5

0= d8"3"%95

_= '98"5

d8"C9 E%9 &4L"\%; , 

c%F5$'$ L\I"F&; ,./ 

k\I"F&; ,./

k9%("I9I; />

h5$L"&; .A,0

7&3J5$; H8$M\3$(5&

+= c%F5$'95 95(sLE8&

,= k&%'E8(95 95(sLE8&

.= k&34595

/= l$%I$5

0= d8"3"%95

_= '98"5

d8"C9 E%9 &4L"\%; . 

c%F5$'$ L\I"F&; ,./ 

c%F5$'$ 89 L9%("I9I L&3459I9; 0 

ESPOL – Python Programación

Page 251: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 251/293

251

+= c%F5$'95 95(sLE8&

,= k&%'E8(95 95(sLE8&

.= k&34595

/= l$%I$5

0= d8"3"%95

_= '98"5d8"C9 E%9 &4L"\%; , 

c%F5$'$ L\I"F&; ,./ 

k\I"F&; ,./

k9%("I9I; /0

h5$L"&; .A,0

7&3J5$; H8$M\3$(5&

Los archivos son almacenados en el disco en formato texto, por lo cual se puede visualizarel contenido de estos archivos para constatar y depurar los programas

EL siguiente gráfico muestra en pantalla el archivo que ha sido creado en el disco para elejemplo anterior  

ESPOL – Python Programación

Page 252: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 252/293

252

9.3 Ejercicios de desarrollo de programas de aplicación

1. Diseño de un sistema de registro y control de atención de los pacientes de una clínica.

Los datos deben almacenarse en disco.

Menú con las opciones y acciones que se deben instrumentar

1.- Ingreso de PacienteIngresar y almacenar los datos del paciente:

Código del pacienteCódigo de la enfermedadCódigo del médico tratante

2.- Consulta de pacienteIngresar el código del paciente

Mostrar el código de la enfermedad y el código del médico tratante3.- Dar de alta a un pacienteIngresar el código de un pacienteEliminar el registro del paciente

4.- Consulta de médicoIngresar el código de un médicoMostrar la lista de los códigos de los pacientes asignados

5.- Consulta de enfermedadIngresar el código de una enfermedadMostrar la lista de los códigos de los pacientes que la tienen

6.- Salir

2. Diseño de un sistema para registro y control de alquiler de vehículos

Los datos deben almacenarse en disco.

Menú con las opciones y acciones que se deben instrumentar1.- Registro de vehículo

Ingresar y almacenar los datos del vehículo:Código del vehículo (entero positivo)Tipo de vehículo (1: auto, 2: campero, 3: camioneta)Estado del vehículo (0: libre, 1: alquilado, 2: en reparación)Código del cliente en uso del vehículo (0 inicialmente)

2.- Consulta de vehículoIngresar el código del vehículoMostrar el tipo y estado del vehículo y el código del cliente en uso.

3.- Alquiler de vehículoLeer código del cliente (entero positivo)Leer tipo de acción (0: alquila, 1: devuelve)Cambiar el estado del vehículo

4.- Reparación de vehículoIngresar el código de un vehículoCambiar el estado del vehículo

5.- Dar de baja vehículoIngresar el código del vehículoEliminar el registro de vehículo del archivo

6.- Salir

ESPOL – Python Programación

Page 253: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 253/293

253

3. Diseñe y pruebe un sistema para control del alquiler de los n casilleros de un club. Loscasilleros son numerados 1, 2, 3, ..., n.

Inicialmente cada uno contiene el valor 0: disponible1) Asignar casillero2) Consultar casillero

3) Buscar usuario4) Notificar casilleros vencidos5) Liberar casillero6) Salir

Cada usuario del casillero contiene los siguientes datos:Código: entero, es la identificación del socio.Nombre: Nombre y apellido del socioMes: entero que indica el número del mes de vencimiento de uso del casillero

Los datos deben almacenarse en el disco

La opción 1 almacena el código del usuario, nomre y el número del mes de vencimiento.La opción 2 muestra un mensaje: casillero disponible o el código del usuario y el númerodel mes de vencimiento de uso, dado el número del casilleroLa opción 3, muestra los datos del socio y su casillero asignado, dado el código del socioLa opción 4 lista los casilleros y usuarios cuyo mes es mayor o igual a un mes dado.La opción 5, libera un casillero dado su número

ESPOL – Python Programación

Page 254: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 254/293

254

10 Programación Orientada a Objetos 

La metodología de la Programación Orientada a Objetos organiza el desarrollo de laprogramación usando como centro los datos. Los datos son categorizados medianteclases. Una clase permite empaquetar atributos o propiedades que son las variables que

recibirán valores y los métodos que son funciones que contienen instrucciones.

Cuando se crea una instancia de la clase, esta entidad se denomina objeto, el cual tieneacceso a los atributos y a los métodos definidos en la clase.

Hay otros aspectos especializados y que deberán revisarse posteriormente, como laherencia, el polimorfismo, etc.

La clase se la define con la palabra reservada class 

La clase debe contener un método especial con el nombre  __init__ denominado

constructor, el cual inicia algunas variables y ejecuta algunos métodos necesarios

Los métodos deben tener al menos un parámetro, generalmente se acostumbra escribir lapalabra self , y los demás parámetros requeridos. El parámetro self   sirve para hacerreferencias a los atributos de la clase en cada método.

Los atributos o variables que deben ser accesibles desde fuera de la clase debendeclararse anteponiendo la palabra self. al nombre de la variable.

Los objetos son instancias o referencias a la clase y deben ser creados antes de acceder alos métodos y atributos.

Ejemplo. Diseñar una clase para describir un artículo con los siguientes atributos:código, cantidad y precio.

Solución

Nombre de la clase: articulo

 Atributos: cod  (código del artículo)cant  (cantidad actual)pre  (precio)

Métodos cantidad  (muestra la cantidad actual)precio (muestra el precio)vender   (reduce la cantidad actual)comprar   (incrementa la cantidad actual)

ESPOL – Python Programación

Page 255: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 255/293

255

La clase articulo

L89'' 95("LE8&<=;

I$: zz"%"(zz<'$8:-LI-L(-45=;

'$8:AL&IULI'$8:AL9%(UL(

'$8:A45$U45

I$: L9%("I9I<'$8:=;

45"%(<Dk9%("I9I 9L(E98; D-'$8:AL9%(=

I$: 45$L"&<'$8:=;

45"%(<Dh5$L"&; D-'$8:A45$=

I$: a$%I$5<'$8:-M=;

": MSU'$8:AL9%(;

'$8:AL9%(U'$8:AL9%(?M

$8'$;

45"%(<Dk9%("I9I "%'E:"L"$%($D=

I$: L&34595<'$8:-M=;

'$8:AL9%(U'$8:AL9%(BM

Creación de objetos de la clase artículo en la ventana interactiva

TTT :5&3 95("LE8& "34&5(Q

TTT 9U95("LE8&<+,.-,>-0A/= Se crea el objeto a de la clase artículoTTT 9A45$L"&<=

h5$L"&; 0A/

TTT 9AL9%("I9I<=

k9%("I9I 9L(E98; ,>

TTT 9Aa$%I$5<0=

TTT 9AL9%("I9I<=

k9%("I9I 9L(E98; +0

TTT JU95("LE8&<,./-.>-/A,=  Se crea el objeto b de la clase artículo TTT JAL9%("I9I<=

k9%("I9I 9L(E98; .>

TTT JAL&34595<0=

TTT JAL9%("I9I<=

k9%("I9I 9L(E98; .0

ESPOL – Python Programación

Page 256: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 256/293

256

10.1 Diseño de clases para representar estructuras de datos especiales

Las estructuras de datos son dispositivos especiales usados como contenedores de datos. Sondiseñados para facilitar las operaciones en ciertas aplicaciones.

El tipo  lista de Python tiene muchos métodos con los que fácilmente se pueden instrumentardirectamente las estructuras de datos lineales básicas: Pila, Cola, Lista. Sin embargo, con finesdidácticos y para que el uso de los métodos de Python queden ocultos al programador, seinstrumentan las estructuras de datos Pila y Cola usando la metodología de la ProgramaciónOrientada a Objetos

10.1.1 Estructura de datos Pila

Una Pila es una estructura lineal que está definida para operar solamente con el dato en eltope o extremo del contenedor de datos que representa a la Pila.

Diseño de la clase Pila

Variable:lista Es el contenedor de datos

Métodos:Constructor: Inicia el contenedor de datosPoner:  Agrega un elemento al tope de la pilaSacar:  Elimina el elemento del tope de la pilaTope:  Entrega una copia del elemento del topeVacía: Detecta si la pila está vacía

L89'' 4"89<=;

I$: zz"%"(zz<'$8:=; >3/*%&1).&/1 

'$8:A8"'(9U*2 >5*2.2' (+ ./*&(*(-/1 -( -'&/%

I$: 4&%$5<'$8:-M=; >\F1(F' )* (+(0(*&/ '+ &/D( 

'$8:A8"'(9U'$8:A8"'(9B*M2

I$: '9L95<'$8:=; >$+202*' (+ &/D( -( +' D2+' 

": %&( '$8:Aa9L"9<=;

I$8 '$8:A8"'(9*?+2 >f62.'-/ ./0/ _+&20/ (+(0(*&/ 

I$: (&4$<'$8:=; >$*&1(F' (+ &/D( -( +' D2+' 

": %&( '$8:Aa9L"9<=;

MU'$8:A8"'(9*?+2

5$(E5% M

I$: 3&'(595<'$8:=;

45"%(<'$8:A8"'(9=

I$: a9L"9<'$8:=; >^(&(.&' %2 +' D2+' (%&c @'.,' 

5$(E5% 8$%<'$8:A8"'(9=UU>

ESPOL – Python Programación

Page 257: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 257/293

257

Prueba de la clase pila en la ventana interactiva

TTT :5&3 4"89 "34&5( Q

TTT 4U4"89<= Crea el objeto p  de la clase pila TTT 4A4&%$5<.=

TTT 4A3&'(595<=*.2

TTT 4A4&%$5<1=

TTT 4A3&'(595<=

*.- 12

TTT 4A4&%$5<@=

TTT 4A3&'(595<=

*.- 1- @2

TTT 4A'9L95<=

TTT 4A3&'(595<=

*.- 12

TTT 4A4&%$5<`=

TTT 4A3&'(595<=

*.- 1- `2

TTT MU4A(&4$<=

TTT M

`

TTT 4A3&'(595<=

*.- 1- `2

TTT 4Aa9L"9<=

H98'$

TTT ]U4"89<= Crea el objeto q de la clase pila TTT ]A4&%$5</=

TTT ]A4&%$5<_=

TTT ]A3&'(595<=

*/- _2

TTT 4A3&'(595<=

*.- 1- `2

Nota. El elemento que se coloca en la pila puede ser un dato estructurado, por ejemplo

una lista.

ESPOL – Python Programación

Page 258: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 258/293

258

Aplicación de la clase Pila

Búsqueda de la salida en un laberinto

Suponga el problema de encontrar la ruta de salida de un laberinto de nxm casillas. La casilla

inicial es la casilla en la esquina superior izquierda, y la casilla de salida es la casilla en laesquina opuesta. Las otras casillas en los bordes están bloqueadas.

Solución

Las casillas libres se marcan con 0 y las bloqueadas con 1. De cualquier casilla se puede seguira alguna de las 8 casillas adyacente, siempre que esté libre y no haya sido visitadaanteriormente. Se necesita una pila para almacenar la ruta y poder retroceder y continuar conotra casilla libre y no visitada. Una matriz adicional se define para mantener el registro decasillas visitadas.

Variablesq:  Matriz que contiene el laberintop:  Pila que contiene la ruta recorrida en el laberintov:  Matriz para registrar con 1 las casillas visitadasdx,dy:  Listas con valores para actualizar las coordenadas alrededor de una casillax,y: Coordenadas de la ruta 

:5&3 %E34N "34&5(Q

:5&3 4"89 "34&5(Q

fn$:"%"L"\% I$8 89J$5"%(& 4959 E%9 45E$J9

]U9559N<**>-+-+-+-+-+-+-+2-

*+->->->-+->->-+2-

*+-+-+->-+-+-+-+2-

*+->->-+-+-+-+-+2-

*+->-+->-+->-+-+2-

*+->-+-+->-+->-+2-

*+->-+->->->->-+2-

*+-+-+-+-+-+-+->22=

45"%(<DY9J$5"%(&e%D-]=*%-32U]A'P94$

IMU*>-+-+-+->-?+-?+-?+2 f l98&5$' 4959 9L(E98"X95 L&&5I$%9I9' 

INU*+-+->-?+-?+-?+->-+2

aUX$5&'<*%-32-"%(= f W9(5"X I$ 395L9' I$ L9'"889' a"'"(9I9' 

4U4"89<= f h"89 4959 FE95I95 89 5E(9 5$L&55"I9 

XU*>->2 f k$8I9 "%"L"98 

4A4&%$5<X=

'98"I9UH98'$ 

ESPOL – Python Programación

Page 259: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 259/293

259

OP"8$ %&( 4Aa9L"9<= 9%I %&( '98"I9;

*M-N2U4A(&4$<=

": MUU%?+ 9%I NUU3?+; f !" 88$F9 9 89 L$8I9 :"%98- '98"5 

'98"I9UG5E$ 

J5$9K

4A'9L95<=%E$a&UG5E$ 

OP"8$ %E$a&;

%E$a&UH98'$b

:&5 " "% 59%F$<@=;

4MUMBIM*"2

4NUNBIN*"2

": 4MT> 9%I 4MS% 9%I 4NT> 9%I 4NS3 9%I

]*4M2*4N2UU> 9%I a*4M2*4N2UU>;

XU*4M-4N2 f k&8&L95 L$8I9 $% 89 4"89 

4A4&%$5<X= f '" P9N 5E(9 N %& :E$ a"'"(9I9 

%E$a&UG5E$ 

MU4M

NU4N

a*4M2*4N2U+ f W95L95 L$8I9 a"'"(9I9 

J5$9K

": '98"I9;

45"%(<D[E(9 I$ '98"I9 $% 5$a$5'9D=

OP"8$ %&( 4Aa9L"9<=; f [E(9 I$ '98"I9 I$8 89J$5"%(& $% 5$a$5'9 

*M-N2U4A(&4$<=

45"%(<DM UD-M-D N UD-N=4A'9L95<=

$8'$;

45"%(<D7& P9N 5E(9 I$ '98"I9D=

Prueba del programa

>>>**> + + + + + + +2

*+ > > > + > > +2

*+ + + > + + + +2

*+ > > + + + + +2

*+ > + > + > + +2

*+ > + + > + > +2

*+ > + > > > > +2

*+ + + + + + + >22

Ruta de salida en reversaM U 1 N U 1

M U _ N U _

M U _ N U 0M U 0 N U /

ESPOL – Python Programación

Page 260: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 260/293

260

M U / N U .

M U . N U ,

M U , N U .

M U + N U .

M U + N U ,

M U + N U +>>>

Nota: Para verificar la ruta en la solución, hay que recordar que la numeración de celdasen Python comienza en 0 

ESPOL – Python Programación

Page 261: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 261/293

261

10.1.2 Estructura de datos Cola

Una Cola es una estructura lineal que está definida para operar con los datos ubicados enel inicio o en el final del contenedor de datos que representa a la cola.

Diseño de la clase Cola

Variable:Lista: Es el contenedor de datos

Métodos:Constructor: Inicia el contenedorPoner:  Agrega un elemento al final de la colaSacar:  Elimina el elemento del frente de la colaFrente: Entrega una copia del elemento del frenteVacía: Detecta si la cola está vacía

L89'' L&89<=;

I$: zz"%"(zz<'$8:=; >3/*%&1).&/1 

'$8:A8"'(9U*2 >5*2.2' (+ ./*&(*(-/1 -( -'&/% @'.,/ 

I$: 4&%$5<'$8:-M=; >\'F1(F' (+(0(*&/ '+ L2*'+ -( +' ./+'

'$8:A8"'(9U*M2B'$8:A8"'(9

I$: '9L95<'$8:=;

": %&( '$8:Aa9L"9<=;

I$8 '$8:A8"'(9*?+2 >g/11' (+ (+(0(*&/ -(+ L1(*&(

I$: :5$%($<'$8:=; >$*&1(F' )*' ./D2' -(+ L1(*&( 

": %&( '$8:Aa9L"9<=;

MU'$8:A8"'(9*?+2

5$(E5% M

I$: 3&'(595<'$8:=;

45"%(<'$8:A8"'(9=

I$: a9L"9<'$8:=; >^(&(.&' %2 +' ./+' (%&c @'.,' 

5$(E5% 8$%<'$8:A8"'(9=UU>

Prueba de la clase cola en la ventana interactiva

TTT :5&3 L&89 "34&5( L&89

TTT LUL&89<=

TTT LA4&%$5<./=

TTT LA3&'(595<=

*./2

TTT LA4&%$5</0=

TTT LA3&'(595<=

*/0- ./2

ESPOL – Python Programación

Page 262: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 262/293

262

TTT LA4&%$5<1.=

TTT LA3&'(595<=

*1.- /0- ./2

TTT LA4&%$5<,0=

TTT LA3&'(595<=

*,0- 1.- /0- ./2TTT LA'9L95<=

TTT LA3&'(595<=

*,0- 1.- /02

ESPOL – Python Programación

Page 263: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 263/293

263

Aplicación de la clase cola

Simulación del comportamiento de una cola de clientes

Ejemplo. Suponer una cola de clientes que serán atendidos en una estación de servicio.

Se conoce que la llegada de un cliente en cada minuto tiene distribución uniforme con unvalor de probabilidad dado. El tiempo de atención del cliente que está frente a la colatambién es un valor aleatorio entero entre 1 y un valor máximo dado como dato enminutos. Se desea conocer cuantos clientes quedarían en la cola luego de trancurrir unacantidad de minutos especificada.

Solución

Variablesc:  Cola cuyos elementos contienen el tiempo de atención a cada cliente qyue llegat:  Tiempo de la simulación

t_frente: Tiempo de atención del cliente en el frente de la cola

f!"3E89L"\% I$ E%9 L&89 I$ L8"$%($'

:5&3 L&89 "34&5( L&89

:5&3 59%I&3 "34&5(Q

(z'"3E8U"%(<"%4E(<Dk9%("I9I I$ 3"%E(&' 4959 89 '"3E89L"\%; D==

45&Jz"%FU:8&9(<"%4E(<Dh5&J9J"8"I9I I$ "%F5$'& I$ E% L8"$%($ $% L9I9

3"%E(&; D==

(z9($%LU"%(<"%4E(<DG"$34& 3)M"3& 4959 9($%L"\% 9 L9I9 L8"$%($

$% 3"%E(&'; D==

LUL&89<=

(U> >h2(0D/ D'1' (+ D1/.(%/ -( +' %20)+'.24* <1(+/Y= 

(z:5$%($U>b >h2(0D/ -(+ .+2(*&( (* (+ L1(*&(

OP"8$ (S(z'"3E8;

4U59%I&3<= >?1/6'62+2-'- D'1' +' ++(F'-' -( )* .+2(*&( 

": 4SU45&Jz"%F;

IU59%I"%(<+-(z9($%L= >^)1'.24* -( +' '&(*.24* -(+ .+2(*&(

LA4&%$5<I= >\F1(F'1 .+2(*&( <F)'1-'1 -)1'.24*= 

": (z:5$%($SU>;

": %&( LAa9L"9<=; >$+ .+2(*&( -(+ L1(*&( &(102*4

(z:5$%($ULA:5$%($<= >C( 2*2.2' (+ &2(0D/ -(+ L1(*&(LA'9L95<=

$8'$;

(z:5$%($U(z:5$%($?+ >A(%&'1 8 02* '+ &2(0D/ -(+ L1(*&( 

(U(B+b

%U>

OP"8$ %&( LAa9L"9<=;

LA'9L95<=

%U%B+

45"%(<Dk9%("I9I I$ L8"$%($' ]E$ ]E$I95&%; D-%=

ESPOL – Python Programación

Page 264: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 264/293

264

Prueba del programa

TTT

k9%("I9I I$ 3"%E(&' 4959 89 '"3E89L"\%; +,> 

h5&J9J"8"I9I I$ "%F5$'& I$ E% L8"$%($ $% L9I9 3"%E(&; >A,0 

G"$34& 3)M"3& 4959 9($%L"\% 9 L9I9 L8"$%($ $% 3"%E(&'; 0 k9%("I9I I$ L8"$%($' ]E$ ]E$I95&%; /

TTT

ESPOL – Python Programación

Page 265: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 265/293

265

10.2 Ejercicios de Programación Orientada a Objetos

1. Crear una clase Empleado que modele la información que una empresa mantiene sobrecada empleado: código, sueldo base, pago por hora extra, horas extras realizadas en el

mes, casado o no y número de hijos.

 Al crear objetos de esta clase se deberán proporcionar los datos de un empleado, y losmétodos deberán permitir realizar:

a) Cálculo sueldo incluyendo pago de horas extras.b) Cálculo de retenciones. Suponer 5% si es casado y 5% por cada hijoc) Cálculo del sueldo neto.d) Mostrar el detalles de pago

2. Crear una clase Rectangulo para modelar rectángulos por medio de cuatro puntos (losvértices).

Los métodos deberán permitir

a) Trasladar el rectángulo a una posición dados los desplazamientos en cada eje.b) Contraer las dimensiones, dado un valor en porcentaje.c) Rotar el rectángulo alrededor del origen, dado el ángulo de rotaciónc) Mostrar las coordenadas de los cuatro vértices

ESPOL – Python Programación

Page 266: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 266/293

Page 267: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 267/293

267

11.1 Diseño de interfaz de usuario con Programación Orientada a Objetos

La Programación Orientada a Objetos provee un procedimiento más formal para definirclases, objetos gráficos, asignación de código y activación.

El siguiente ejemplo es una adaptación del ejemplo que se puede encontrar en lareferencia: Basic Python Tutorial de Investary en el canal de YouTube:

https://www.youtube.com/channel/UCvfluOiZ_eyBfzDXNft_7Eg  

Aplicación para crear un botón

:5&3 (K"%($5 "34&5(Q

L89'' 948"L9L"&%<H593$=;

I$: zz"%"(zz<'$8:-39'($5=;

H593$Azz"%"(zz<'$8:-39'($5='$8:AF5"I<=

'$8:AL5$95zO"IF$('<=

I$: L5$95zO"IF$('<'$8:=;

'$8:AJ&(&%+U€E((&%<'$8:-($M(U6W$%'9C$6=

'$8:AJ&(&%+AF5"I<=

a$%(9%9UGK<=

a$%(9%9A("(8$<Dh5"3$5 J&(\%D=

a$%(9%9AF$&3$(5N<D.>>M,>>D=

944U948"L9L"&%<a$%(9%9=

a$%(9%9A39"%8&&4<=

ESPOL – Python Programación

Page 268: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 268/293

268

Otras formas de asignar texto al botón

:5&3 (K"%($5 "34&5(Q

L89'' 948"L9L"&%<H593$=;

I$: zz"%"(zz<'$8:-39'($5=;H593$Azz"%"(zz<'$8:-39'($5=

'$8:AF5"I<=

'$8:AL5$95zO"IF$('<=

I$: L5$95zO"IF$('<'$8:=;

'$8:AJ&(&%+U€E((&%<'$8:=

'$8:AJ&(&%+AF5"I<=

'$8:AJ&(&%+AL&%:"FE5$<($M(UDW$%'9C$D=

a$%(9%9UGK<=

a$%(9%9A("(8$<Dh5"3$5 J&(\%D=

a$%(9%9AF$&3$(5N<D.>>M,>>D=

944U948"L9L"&%<a$%(9%9=

a$%(9%9A39"%8&&4<=

:5&3 (K"%($5 "34&5(QL89'' 948"L9L"&%<H593$=;

I$: zz"%"(zz<'$8:-39'($5=;

H593$Azz"%"(zz<'$8:-39'($5=

'$8:AF5"I<=

'$8:AL5$95zO"IF$('<=

I$: L5$95zO"IF$('<'$8:=;

'$8:AJ&(&%+U€E((&%<'$8:=

'$8:AJ&(&%+AF5"I<=

'$8:AJ&(&%+*D($M(D2UD3$%'9C$D

a$%(9%9UGK<=

a$%(9%9A("(8$<Dh5"3$5 J&(\%D=

a$%(9%9AF$&3$(5N<D.>>M,>>D=

944U948"L9L"&%<a$%(9%9=

a$%(9%9A39"%8&&4<=

ESPOL – Python Programación

Page 269: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 269/293

269

Aplicación para conteo de clicks del botón

:5&3 (K"%($5 "34&5(Q

L89'' 948"L9L"&%<H593$=;

I$: zz"%"(zz<'$8:-39'($5=;

H593$Azz"%"(zz<'$8:-39'($5=

'$8:AF5"I<=

'$8:AJ&(&%zL8"LK'U>

'$8:AL5$95zO"IF$('<=

I$: L5$95zO"IF$('<'$8:=;

'$8:AJ&(&%+U€E((&%<'$8:=

'$8:AJ&(&%+AF5"I<=

'$8:AJ&(&%+*D($M(D2UDk&%($& I$ L8"LK'D

'$8:AJ&(&%+*DL&339%ID2U'$8:A9L(E98"L$zL&%($&

I$: 9L(E98"L$zL&%($&<'$8:=;

'$8:AJ&(&%zL8"LK'U'$8:AJ&(&%zL8"LK'B+

'$8:AJ&(&%+*D($M(D2UDG&(98L8"LK'; DB

'(5<'$8:AJ&(&%zL8"LK'=

a$%(9%9UGK<=

a$%(9%9A("(8$<Dk8"LK'D=

a$%(9%9AF$&3$(5N<D.>>M,>>D=

944U948"L9L"&%<a$%(9%9=

a$%(9%9A39"%8&&4<=

ESPOL – Python Programación

Page 270: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 270/293

270

Aplicación para ingreso y verificación de un dato

:5&3 (K"%($5 "34&5(Q

L89'' 948"L9L"&%<H593$=;

I$: zz"%"(zz<'$8:-39'($5=;H593$Azz"%"(zz<'$8:-39'($5=

'$8:AF5"I<=

'$8:AL5$95zO"IF$('<=

I$: L5$95zO"IF$('<'$8:=;

'$8:A"%'(5EL("&%UY9J$8<'$8:-($M(UDd%(5$ $8 49''O&5ID=

'$8:A"%'(5EL("&%AF5"I<5&OU>-L&8E3%U>-L&8E3%'49%U,-

'("LKNUƒ=

'$8:A49''O&5IUd%(5N<'$8:=

'$8:A49''O&5IAF5"I<5&OU+-L&8E3%U+-'("LKNUƒ=

'$8:A'EJ3"(zJE((&%U€E((&%<'$8:-($M(UDc%F5$'$D-

L&339%IU'$8:Aa$5":"L95=

'$8:A'EJ3"(zJE((&%AF5"I<5&OU,-L&8E3%U+-'("LKNUƒ=

'$8:A($M(UG$M(<'$8:-O"I(PU.0-P$"FP(U0-O594Uƒw[n=

'$8:A($M(AF5"I<5&OU.-L&8E3%U>-L&8E3%'49%U,-'("LKNUƒ=

I$: a$5":"L95<'$8:=;

L&%($%"I&U'$8:A49''O&5IAF$(<=

": L&%($%"I&UUD'$L5$(&D;

3$%'9C$UDtLL$'& 4$53"("I&D

$8'$;3$%'9C$UDtLL$'& %$F9I&D

'$8:A($M(AI$8$($<>A>-d7n=

'$8:A($M(A"%'$5(<>A>-3$%'9C$=

a$%(9%9UGK<=

a$%(9%9A("(8$<Dh9''O&5ID=

a$%(9%9AF$&3$(5N<D.>>M,>>D=

944U948"L9L"&%<a$%(9%9=

a$%(9%9A39"%8&&4<=

ESPOL – Python Programación

Page 271: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 271/293

271

12 Eficiencia de algoritmos y programas

La eficiencia de un algoritmo y su programación está relacionada con el tiempo necesariopara obtener la solución. Este tiempo depende de la cantidad de operaciones que sedeben realizar. Así, si se tienen dos algoritmos para resolver un mismo problema, es más

eficiente el que requiere menos operaciones para producir el mismo resultado.

Sea n  el tamaño del problema, y T(n) una función que mide la eficiencia del algoritmo(cantidad de operaciones requeridas). Para obtener T(n) se pueden realizar pruebas en elcomputador con diferentes valores de n  registrando el tiempo real de ejecución. Estetiempo es proporcional a la cantidad de operaciones que se realizaron, por lo tanto sepuede usar para estimar la función T(n).

Esta forma experimental para determinar T(n)  tiene el inconveniente de usar lainstrumentación computacional del algoritmo para realizar las pruebas. Es preferibleconocer la eficiencia del algoritmo antes de invertir el esfuerzo de la programación

computacional para preveer que sea un algoritmo aceptable.

Para determinar la eficiencia de un algoritmo antes de su instrumentación se puedeanalizar la estructura del algoritmo o realizar un recorrido del mismo en forma abstracta.

Ejemplo.  El siguiente algoritmo calcula la suma de los primeros n números naturales.Encontrar T(n) 

Sea T la cantidad de sumas que se realizanA A A

' U >

:&5 " "% 59%F$<%=;

' U ' B "

.La suma está dentro de una repetición que se realiza n veces, por lo tanto,

T(n) = n

Ejemplo. El siguiente algoritmo suma los elementos de una matriz cuadrada a de orden n.Encontrar T(n)

Sea T la cantidad de sumas

A A A ' U >

:&5 " "% 59%F$<%=;

:&5 C "% 59%F$<%=;

' U ' B 9*"2*C2

La suma está incluida en una repetición doble. La variable i, cambia n veces y para cadauno de sus valores, la variable j cambia n veces. Por lo tanto.

T(n) = n2 

ESPOL – Python Programación

Page 272: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 272/293

272

Ejemplo. El siguiente algoritmo es una modificación del anterior. Suponga que se deseasumar únicamente los elementos de la sub-matriz triangular superior. Obtener T(n)

A A A 

' U >

:&5 " "% 59%F$<%=;

:&5 C "% 59%F$<"-%=;' U ' B 9*"2*C2

Si no es evidente la forma de T(n), se puede recorrer el algoritmo y anotar la cantidad desumas que se realizan

Valor Cantidad de ciclosi j0 n1 n-12 n-2

... ...n-1 1

Entonces, T(n) = 1 + 2 + ... + n =2n n n

(n 1)2 2 2

  = (suma de una serie aritmética) 

Otra manera de obtener la función T(n) consiste en programar el conteo de los ciclos de unalgoritmo para obtener puntos de su eficiencia.

Ejemplo. Programa para conteo de ciclos para el ejemplo anterior

%U"%(<"%4E(<Dc%F5$'$ %; D==LU>

:&5 " "% 59%F$<%=;

:&5 C "% 59%F$<"-%=;

LULB+

45"%(<L=

Debido a que son dos ciclos, T(n)  debe ser un polinomio algebraico de segundo grado.Para obtener este polinomio son suficientes tres puntos  (n, c):

Se realizaron tres pruebas del programa de conteo y se obtuvieron los resultados :

TTT

c%F5$'$ %; / 

+>

TTT

c%F5$'$ %; 0 

+0

TTT

c%F5$'$ %; _ ,+

ESPOL – Python Programación

Page 273: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 273/293

273

Con estos resultados se puede construir el polinomio de interpolación que representa a  T(n). Este polinomio se lo puede obtener manualmente o con un método computacional.En el capítulo 14 se describe el método de Lagange para obtener T(n)

El resultado que se obtuvo fue : 

TTT %U*/-0-_2

TTT LU*+>-+0-,+2

TTT 4U89F59%F$<%-L=

(QQ,R, B (R,

Resultado que coincide con el obtenido anteriormente con un conteo directo manual

Para medir el tiempo real de ejecución de un proceso (programa o función) se puede usarla función clock() de la librería time:

TTT :5&3 ("3$ "34&5(QTTT L8&LK<=b D1/.(%/b L8&LK<=

12.1 La notación O( )

Supongamos que para resolver un problema se han diseñado dos algoritmos: A y B, coneficiencias TA(n) = 10n+2, TB(n) = 2n2 + 3, respectivamente. ¿Cual algoritmo es máseficiente?.

Para valores pequeños de n, TB(n) < T

A(n), pero para valores grandes de n, T

B(n) > T

A(n).

Es de interés práctico determinar la eficiencia de los algoritmos para valores grandes de n,por lo tanto el algoritmo A es más eficiente que el algoritmo B como se puede observar enel siguiente gráfico:

Si T(n) incluye términos de n que tienen diferente orden, es suficiente considerar eltérmino de mayor orden pues es el que determina la eficiencia del algoritmo cuando n esgrande. Para compararlos, no es necesario incluir los coeficientes y las constantes.

ESPOL – Python Programación

Page 274: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 274/293

274

n [log(n)] n [n log(n)] n n 2n  n!

1  0 1 0 1 1 2 13  1 3 3 9 27 8 65  1 5 8 25 125 32 1207  1 7 13 49 343 128 50409  2 9 19 81 729 512 3.62x105

11 2 11 26 121 1331 2048 3.99x107

13  2 13 33 169 2197 8192 6.22x109

15 2 15 40 225 3375 32768 1.30x1012

17  2 17 48 289 4913 1.31x105  3.55x1014

19  2 19 55 361 6859 5.24x105  1.21x1017

21  3 21 63 441 9261 2.09x106  5.10x1019

23  3 23 72 529 12167 8.38x106  2.58x1022

25  3 25 80 625 15625 3.35x107  1.55x1025 

50  3 50 195 2500 125000 1.12x1015

  3.04x1064

 100  4 100 460 10000 1000000 1.26x1030  9.33x10157 

Ejemplo. Suponga T(n) = n2 + n + 10. Evaluar T para algunos valores de n

T(2) = 4 + 2 + 10T(5) = 25 + 5 + 10T(20) = 400 + 20 + 10

T(100) = 10000 + 100 + 10

Se observa que a medida que n crece, T depende principalmente del término dominanten2. Este hecho se puede expresar usando la notación O( )  la cual indica el “orden” de laeficiencia del algoritmo, y se puede escribir: T(n) = O(n2) lo cual significa que la eficienciaes proporcional a n2, y se dice que el algoritmo tiene eficiencia cuadrática o de segundoorden.

En general, dado un problema de tamaño n, la medida de la eficiencia T(n) de un algoritmose puede expresar con la notación O(g(n)) siendo g(n) alguna expresión tal como: n, n2,n3, ..., log(n), n log(n), ..., 2n, n!,  ...  etc, la cual expresa el orden de la cantidad de

operaciones que requiere el algoritmo.

Es de interés medir la eficiencia de los algoritmos antes de su instrumentacióncomputacional. En el siguiente cuadro se ha tabulado T(n) con algunos valores de n ypara algunas funciones típicas g(n).

Tabulación de T(n) con algunos valores de n para algunas funciones típicas g(n)

Los algoritmos en las dos últimas columnas son de tipo exponencial  y factorial respectivamente. Se puede observar que aún con valores relativamente pequeños de n (mayor a 100) el valor T(n) es muy alto. Los algoritmos con este tipo de eficiencia sedenominan no factibles pues ningún computador actual pudiera calcular la solución paravalores de n grandes en un tiempo aceptable.

ESPOL – Python Programación

Page 275: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 275/293

275

13 Librerías especializadas

 Algunos temas revisados en estas secciones requieren que los usuarios tengan un nivelmatemático mayor al nivel básico utilizado en los capítulos anteriores

13.1 Librería gráfica: Pylab, Matplotlib

Esta librería puede decargarse de la dirección:

http://www.lfd.uci.edu/~gohlke/pythonlibs/

Pylab incluye la librería gráfica Matplotlib junto con las librerías numéricas NumPy, SciPy

13.1.1 Gráficos en el plano

Algunos códigos y símbolos para graficar

plot: Función para graficar en el plano con el estilo, marca y color especificados:

marcas: DoD: círculos, D.D: puntos, D*D: estrellas, DsD: cuadrados,D+D: cruces, D^D: triángulos, DpD: pentágonos, DhD: hexágonos,D?D: línea contínua, D? ?D: línea discontínua, D:D: línea punteada

color: DbD: blue, DgD: green, Dr D: red, DkD: black, DyD: yellow, DcD: cyan

title:  Agrega el títuloxlabel, ylabel:  Coloca nombres a los ejesgrid:  Muestra las cuadrículaslegend: Muestra un recuadro con identificación para los gráficosloc: Ubicación del recuadro: Dlower D, Dupper D, Dcenter D, DleftD, DrightD show(): Despliega el gráfico en pantalla

TTT :5&3 4N89J "34&5(QTTT MU959%F$<>-,->A+=

TTT 48&(<M-L&'<M=-D?JD=

TTT 48&(<M-8&F<MB+=-D?5D=

TTT ("(8$<DHE%L"&%$'D=

TTT M89J$8<DMD=

TTT N89J$8<D:<M=D=

TTT F5"I<G5E$=

TTT 8$F$%I<<DL&'$%&D-D8&F95"(3&D=-8&LUDE44$5 5"FP(D=

TTT 'P&O<=

ESPOL – Python Programación

Page 276: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 276/293

Page 277: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 277/293

277

13.1.3 Gráficos de ecuaciones implícitas

TTT :5&3 4N89J "34&5(Q

TTT M59%F& U 959%F$<>-/->A>+=

TTT N59%F& U 959%F$<?,-/->A>+=

TTT M- N U 3$'PF5"I<M59%F&-N59%F&=

TTT :U<M?,=QQ,B<N?+=QQ,BMQN?.TTT FUMQ$M4<MBN=BN?.

TTT L&%(&E5<M- N- :-*>2=

TTT L&%(&E5<M- N- F-*>2=

TTT F5"I<G5E$=

TTT 'P&O<=

Nota. Las funciones matemáticas del módulo math no se pueden usar con meshgrid

13.1.4 Graficación de histogramas

TTT :5&3 4N89J "34&5(Q

TTT :5&3 59%I&3 "34&5(Q

TTT %U%&5398<'"X$U+>>=

TTT P"'(<%=

TTT ("(8$<Dg"'(&F5939D=

TTT F5"I<G5E$=

TTT 'P&O<=

ESPOL – Python Programación

Page 278: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 278/293

278

13.1.5 Gráficos 3D

Referencia para este ejemplo [6]

TTT :5&3 4N89J "34&5(Q

TTT :5&3 348z(&&8K"('A348&(.I "34&5( tM$'.n

TTT :"FU:"FE5$<=TTT 9MUtM$'.n<:"F=

TTT MU959%F$<?/-/->A,0=

TTT NU959%F$<?/-/->A,0=

TTT ‚-U3$'PF5"I<M-N=

TTT [U']5(<‚QQ,BQQ,=

TTT xU'"%<[=

TTT 9MA48&(z'E5:9L$<‚--x-5'(5"I$U+-L'(5"I$U+-L394UDP&(D=

TTT 'P&O<=

ESPOL – Python Programación

Page 279: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 279/293

279

13.2 Librería para manejo matemático simbólico: SymPy 

Con la librería SymPy  se puede explorar el manejo matemático simbólico.

Esta librería puede decargarse de la dirección:

http://www.lfd.uci.edu/~gohlke/pythonlibs/

Referencia para algunos ejemplos [7]

Para acceder a esta librería

TTT :5&3 'N34N "34&5(Q

13.2.1 Declaración de variables smbólicas

TTT MU!N3J&8<DMD=TTT 9-JU'N3J&8'<D9-JD=

13.2.2 Operaciones algebraicas

TTT .QMB,QM

0QM

TTT aU*,QM-.QM-0QM2

TTT 'E3<a=

+>QM

TTT FU<,BM=QQ,

TTT EU$M49%I<F=

TTT E

MQQ, B /QM B /

TTT :9L(&5<E=

<M B ,=QQ,

13.2.3 Evaluación de expresiones

TTT EU!N3J&8<DED=

TTT aU'"%<E=

TTT aA'EJ'<E-+A,= evaluar por sustitución>A`.,>.`>@0`_1,,_

TTT aA'EJ'<E-+A,=A$a98:<0= evalf especifica dígitos >A`.,>/

TTT M-NU'N3J&8'<DM-ND=

TTT :U,Q$M4<M=B.QNB+

TTT 5U:A'EJ'<M-,=A'EJ'<N-.=

TTT 5

+> B ,Q$M4<,=

TTT 5U:A'EJ'<M-,=A'EJ'<N-.=A$a98:<@=

TTT 5

,/A11@++, 

ESPOL – Python Programación

Page 280: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 280/293

280

13.2.4 Operaciones del cálculo

TTT :5&3 'N34N "34&5(Q

TTT 9-JU'N3J&8'<D9-JD=

TTT $M49%I<'"%<9BJ=-(5"FUG5E$=

'"%<9=QL&'<J= B '"%<J=QL&'<9=

TTT '"348":N<'"%<9=QQ,BL&'<9=QQ,=

+

TTT :UMQ$M4<M=BNQQ,B+

TTT I"::<:-M=

MQ$M4<M= B $M4<M=

TTT I"::<:-N=

,QN

TTT :UMQ$M4<M=BMQQ,B+TTT "%($F59($<:-<M->-,==

+1R. B $M4<,=

TTT "%($F59($<:-<M->-,==A$a98:<@=

+.A>001,.

TTT :UMQ$M4<M=BNQQ,B+

TTT "%($F59($<:-M=

MQ<NQQ, B += B <M ? +=Q$M4<M=

TTT "%($F59($<:-N=

NQQ.R. B NQ<MQ$M4<M= B +=

TTT "%($F59($<:-<M->-,=-<N-+-.==

,Q$M4<,= B 1>R.

TTT %U!N3J&8<D%D=

TTT !E3<+R%QQ,-<%-+-+>==A$a98:<@=

+A0/`1_11

TTT 8"3"(<'"%<M=RM-M->=

+

TTT 8"3"(<+RM-M-&&=>

TTT 8"3"(<+RM-M->-I"5UDBD=

&&

TTT 8"3"(<+RM-M->-I"5UD?D=

?&&

TTT '$5"$'<$M4<M=-M-+-1=

dBdQMBdQMQQ,R,BdQMQQ.R_BdQMQQ/R,/BdQMQQ0R+,>BdQMQQ_R1,>Bw<MQQ1=

ESPOL – Python Programación

Page 281: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 281/293

281

13.2.5 Resolución de ecuaciones

Este componente de la libraría SymPy todavía está en desarrollo

TTT :5&3 'N34N "34&5(Q

TTT MU!N3J&8<DMD=

Resolver la ecuación polinómica: x3 – 2x -5.2 = 0

TTT EU'&8a$<MQQ.?,QM?0A,=

TTT E El resultado es un vector  *,A++,,`,_,.+@1/,-

?+A>0_+/_.++0`.1+ ? +A+_>.+_@>1@>_@+Qc-

?+A>0_+/_.++0`.1+ B +A+_>.+_@>1@>_@+Qc2

Resolver la ecuación no lineal: $M y πM U > 

TTT EU'&8a$<$M4<M=?4"QM=

TTT E El resultado es un vector  *?Y93J$5(ƒ<?+R4"=2 Solución simbólica TTT :8&9(<E*>2= Solución numérica >A00.@,1>.__//0+._

Resolver la ecuación no lineal: L&'<M= y πM U > 

TTT EU'&8a$<L&'<M=?4"QM= No encontró la solución 

7& 98F&5"(P3' 95$ "348$3$%($I (& '&8a$ $]E9("&% L&'<M= ? 4"QM

TTT :5&3 'N34N "34&5(Q

TTT MU!N3J&8<DMD=

TTT NUHE%L("&%<DND=

Resolver la ecuación diferencial: No<M= B M ? + U > 

TTT I'&8a$<n$5"a9("a$<N<M=-M=BM?+=

N<M= UU k+ ? MQQ,R, B M

Resolver la ecuación diferencial: No<M= B N<M= B M ? + U > 

TTT I'&8a$<n$5"a9("a$<N<M=-M=BN<M=BM?+=

N<M= UU <k+ B <?M B ,=Q$M4<M==Q$M4<?M=

Resolver la ecuación diferencial: Noo<M= B No<M= B M ? + U > 

TTT I'&8a$<n$5"a9("a$<N<M=-M-M=Bn$5"a9("a$<N<M=-M=BM?+=

N<M= UU k+ B k,Q$M4<?M= ? MQQ,R, B ,QM

ESPOL – Python Programación

Page 282: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 282/293

282

13.2.6 Salida formateada de expresiones

TTT :5&3 'N34N "34&5(Q

TTT MU!N3J&8<DMD=

TTT NU<MB+=QQ,R<MB.=

TTT 445"%(<N= pprint es ‘pretty print’ ,

<M B +=????????M B .

SymPy tiene un módulo para graficar

13.2.7 Gráficos en el plano con SymPy

TTT :5&3 'N34N "34&5(Q

TTT MU!N3J&8<DMD=

TTT :UMQ'"%<M=TTT 48&(<:-<M->-,Q4"==

13.2.8 Gráficos 3D con SymPy

TTT :5&3 'N34N "34&5(Q

TTT :5&3 'N34NA48&(("%F "34&5(Q

TTT M-NU'N3J&8'<DM-ND=TTT XUMQQ,?NQQ,

TTT 48&(.I<X-<M-?0-0=-<N-?0-0==

ESPOL – Python Programación

Page 283: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 283/293

283

14 Métodos Numéricos

Los métodos numéricos son alternativas para resolver problemas matemáticos para loscuales no se puede, o es muy laborioso, obtener la solución con métodos analíticos, o silos métodos computacionales disponibles no proporcionan la respuesta correcta.

Esta sección tiene como referencia a [10]

14.1 Resolución de problemas en la ventana interactiva

Cálculo de una raíz real con la fórmula de Newton:

ii 1 i i

i

f(x )x x , f '(x ) 0

f '(x )= ≠  , i = 0, 1, 2, . . .

Ejemplo. Calcular una raíz real de la ecuacion:  f(x) = ex – x = 0

Librería de matemáticas simbólicas: Sympy 

TTT :5&3 'N34N "34&5(Q

TTT MU!N3J&8<DMD=

TTT :U$M4<M=?4"QM

TTT 48&(<:-<M->-,==

TTT I:UI"::<:-M= Obtención de f’(x) TTT 5U>A0  Valor inicial del gráfico TTT 5U5?:8&9(<:A'EJ'<M-5==R:8&9(<I:A'EJ'<M-5==  float  evalúa la expresión TTT 5

>A00,+`@>,`++,/0`

TTT 5U5?:8&9(<:A'EJ'<M-5==R:8&9(<I:A'EJ'<M-5==

TTT 5

>A00.@,0.`/11.`1@/

TTT 5U5?:8&9(<:A'EJ'<M-5==R:8&9(<I:A'EJ'<M-5==

TTT 5

>A00.@,1>.__/,@/>/

ESPOL – Python Programación

Page 284: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 284/293

284

TTT 5U5?:8&9(<:A'EJ'<M-5==R:8&9(<I:A'EJ'<M-5==

TTT 5

>A00.@,1>.__//0+._

TTT 5U5?:8&9(<:A'EJ'<M-5==R:8&9(<I:A'EJ'<M-5==

TTT 5>A00.@,1>.__//0+._

TTT :8&9(<:A'EJ'<M-5==  Verificar si f(r) = 0 ?+A0+`,,__0.`@@_`0_$?+1

Si se comienza con r = 1.5 se puede calcular la otra raíz real:

TTT 5U+A0

A A A

A A A

A A A

TTT 5U5?:8&9(<:A'EJ'<M-5==R:8&9(<I:A'EJ'<M-5==

TTT 5

+A_.@0,@/+``1>._._

TTT :8&9(<:A'EJ'<M-5==  Verificar si f(r) = 0 /A0`+//0`@0`/1+_0$?+_

Uso de la función solve de Sympy para obtener las raíces de la ecuacion anterior:

TTT :5&3 'N34N "34&5(QTTT MU!N3J&8<DMD=

TTT :U$M4<M=?4"QM

TTT 5U'&8a$<:=

TTT 8$%<5=  La función solve solo permitió calcular una raíz +

TTT 5

*?Y93J$5(ƒ<?+R4"=2 Solución expresada con constantes TTT :8&9(<5*>2=

>A00.@,1>.__//0+._  Solución en formato decimal TTT 5*>2A$a98:<_=

>A00.@,1  evalf   controla cuantos dígitos 

ESPOL – Python Programación

Page 285: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 285/293

285

14.2 Librería de métodos numéricos

En la siguiente librería se han instrumentado como referencia, algunos métodos numéricosclásicos. También se incluyen ejemplos de su utilización. La formulación matemátca paracada método se la puede encontrar en la referencia bibliográfica [10].

La librería incluye los módulos de los métodos numéricos y puede extenderse con nuevasfunciones. Se la almacenó con el nombre metodos  con el que debe importarse para suaplicación como se indica en los ejemplos.

Los métodos numéricos instrumentados inicialmente son:

Método de la BisecciónCálculo de raíces reales de una ecuación

Método de Gauss-Jordan

Resolución de un sistema de ecuaciones lineales

Método de interpolación de LagrangeObtencion y evaluación del polinomio de interpolación dado un conjunto de puntos

Método de SimpsonIntegración numérica de una función acotada de una variable en un intervalo

Método de Runge-KuttaResolución de una ecuación diferencial de primer orden con una condición en elinicio.

ESPOL – Python Programación

Page 286: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 286/293

286

f Y"J5$5s9 I$ 3p(&I&' %E3p5"L&'

f k)8LE8& I$ 59sL$' 5$98$' I$ E%9 $LE9L"\%; €"'$LL"\% 

I$: J"'$LL"&%<:- 9- J- $=;

OP"8$ J?9TU$;LU<9BJ=R,

": :<L=UU>;

5$(E5% L

$8'$;

": :<9=Q:<L=T>;

9UL

$8'$;

JUL

5$(E5% L

f!&8EL"\% I$ E% '"'($39 I$ $LE9L"&%$' 8"%$98$'; v9E''?^&5I9%

I$: F9E''C&5I9%<9-J=;

%U8$%<J=

:&5 " "% 59%F$<%=;

9*"2U9*"2B*J*"22 >i'&12E ')0(*&'-'

:&5 $ "% 59%F$<%=;

4U$

:&5 " "% 59%F$<$B+-%=;

": 9J'<9*"2*$2=T9J'<9*42*$2=; >g)%.'1 D2@/&( 

4U"

9*$2-9*42U9*42-9*$2 >5*&(1.'062' L2+'% 

(U9*$2*$2

": 9J'<(=S+$?+>; >i'&12E %2*F)+'1 

5$(E5% *2

:&5 C "% 59%F$<$-%B+=;

9*$2*C2U9*$2*C2R( >T/10'+2E'1 L2+'

:&5 " "% 59%F$<%=;": "VU$;

(U9*"2*$2

:&5 C "% 59%F$<$-%B+=;

9*"2*C2U9*"2*C2?(Q9*$2*C2 >A(-).21 L2+'%

MU*2

:&5 " "% 59%F$<%=;

MUMB*9*"2*%22 >C/+).24* 

5$(E5% M

ESPOL – Python Programación

Page 287: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 287/293

287

fh&8"%&3"& I$ c%($54&89L"\%; Wp(&I& I$ Y9F59%F$

:5&3 'N34N "34&5( Q

I$: 89F59%F$<M-N-EU7&%$=;

%U8$%<M=": EUU7&%$;

(U!N3J&8<D(D=

$8'$;

(UE

4U>

:&5 " "% 59%F$<>-%=;

YU+

:&5 C "% 59%F$<>-%=;

": CVU";

YUYQ<(?M*C2=R<M*"2?M*C2=

4U4BN*"2QY4U$M49%I<4=

5$(E5% 4

f c%($F59L"\% %E3p5"L9; H\53E89 I$ !"34'&%

I$: '"34'&%<:- 9- J- 3=;

PU<J?9=R3

'U>

MU9b

:&5 " "% 59%F$ <+-3=;

": "i,UU+;'U'B/Q:<MB"QP=

$8'$;

'U'B,Q:<MB"QP=

'UPR.Q<:<9=B'B:<J==

5$(E5% '

f !&8EL"\% I$ E%9 dAnAw; Wp(&I& I$ [E%F$?ZE((9 I$ LE95(& &5I$%

I$: 5E%F$KE((9<:-M-N-P-3=;

EU*2

aU*2

:&5 " "% 59%F$<3=;K+UPQ:<M-N=

K,UPQ:<MBPR,- NBK+R,=

K.UPQ:<MBPR,- NBK,R,=

K/UPQ:<MBP- NBK.=

NUNB+R_Q<K+B,QK,B,QK.BK/=

MUMBP

EUEB*M2

aUaB*N2

5$(E5% *E-a2

ESPOL – Python Programación

Page 288: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 288/293

288

14.3 Aplicación de los métodos numericos de la librería Métodos

Resolución de ejemplos en la ventana interactiva

Para aplicar los métodos se deben cargar las librerias Pylab y Métodos 

a) Aplicación del método de la Bisección

Resolver la ecuación: f(x) = x3 – x – 1 = 0

TTT :5&3 4N89J "34&5(Q

TTT :5&3 3$(&I&' "34&5(Q

TTT I$: :<M=;5$(E5% MQQ.?M?+

TTT (U959%F$<>-,->A+=

TTT 48&(<(-:<(==

TTT F5"I<G5E$=TTT 'P&O<=

TTT LUJ"'$LL"&%<:-+-,->A>>>>+=

TTT L

+A.,/1+/__>_//0.+, Raíz calculada con cinco decimales TTT :<L=

?+A/>0@1/_@1>,+0@$?>0  Verificar en la ecuación 

ESPOL – Python Programación

Page 289: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 289/293

289

b) Aplicación del método de Gauss-Jordan

Resolver el sistema

8 4 3 2

2 4 1 X 3

5 7 4 4

=

 

TTT :5&3 4N89J "34&5(Q

TTT :5&3 3$(&I&' "34&5(Q

TTT 9U**@-/-.2-*,-/-+2-*0-1-/22

TTT JU*,-.-/2

TTT MUF9E''C&5I9%<9-J=

TTT M

*>A>,.@>`0,.@>`0,.1@- >A@@>`0,.@>`0,.@>`- ?>A01+/,@01+/,@01+/2

c) Aplicación del método de interpolación de Lagrange

Colocar un polinomio de interpolación sobre los puntos

(x, f(x)): (2, 4), (3, 5), (5, 7), (6, 6)

TTT :5&3 4N89J "34&5(Q

TTT :5&3 3$(&I&' "34&5(Q

TTT MU*,-.-0-_2TTT NU*/-0-1-_2

TTT 4U89F59%F$<M-N-/=  Evaluación del polinomio con x=4 TTT 4

_A..............

TTT 4U89F59%F$<M-N=

TTT 4

?(QQ.R_ B 0Q(QQ,R. ? ,0Q(R_ B 1  Polinomio de interpolación 

TTT I$: :<(=; 5$(E5% ?(QQ.R_ B 0Q(QQ,R. ? ,0Q(R_ B 1

TTT (U959%F$<,-_A+->A+= 

TTT 48&(<(-:<(==  Gráfico de los puntos y el polinomioTTT 48&(<M-N-D&D=

TTT F5"I<G5E$=

TTT 'P&O<= 

ESPOL – Python Programación

Page 290: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 290/293

290

d) Aplicación del método de Simpson

Calcular numéricamente el valor de la integral definida debajo del polinomio en el ejemploanterior:

23 2

0

1 5 25s ( t t t 7)dt

6 3 6= − + − +∫  

TTT :5&3 4N89J "34&5(Q

TTT :5&3 3$(&I&' "34&5(Q

TTT I$: :<(=; 5$(E5% ?(QQ.R_ B 0Q(QQ,R. ? ,0Q(R_ B 1

TTT 'U'"34'&%<:->-,-@=  Con 8 franjas TTT '

`A//////////////.

e) Aplicación del método de Runge-Kutta

Resolver numéricamente la ecuación diferencial:

No<M= y ,M B N y + U >- > ≤ M ≤ ,, con la condición inicial, N<>= U +No<M= U :<M-N= U ,M y N B + 

TTT :5&3 4N89J "34&5(Q

TTT :5&3 3$(&I&' "34&5(Q

TTT I$: :<M-N=; 5$(E5% ,QM?NB+

TTT *E-a2U5E%F$KE((9<:->-+->A+-,>=  Puntos de la solución y(x) TTT 48&(<E-a-D&D= Graficar la solución numérica TTT F5"I<G5E$=

TTT 'P&O<=

ESPOL – Python Programación

Page 291: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 291/293

291

14.4 Librerías de Python para resolver numéricamente ecuaciones diferenciales

Resolver numéricamente la ecuación diferencial:

No<M= y ,M B N y + U >- > ≤ M ≤ ,, con la condición inicial, N<>= U +No<M= U :<M-N= U ,M y N B + 

TTT :5&3 %E34N "34&5(QTTT :5&3 4N89J "34&5(QTTT :5&3 'L"4NA"%($F59($ "34&5( &I$"%(

TTT I$: :<N-M=; 5$(E5% ,QM?NB+ #Note el orden de los parámetros x, y 

TTT MU8"%'49L$<>-,-,>=TTT NU&I$"%(<:-+-M=TTT 48&(<M-N-D&D=TTT F5"I<G5E$=TTT 'P&O<=

x, y  son vectores que contienen los puntos de la solución

x  es generado con la función linspace y  es generado con el método odeint 

Para expresar la condición inicial: y(0) = 1, el primer punto del vector   x  generado conlinsapce debe contener el valor de x = 0, mientras que el valor y = 1  debe ser elsegundo parámetro en el método odeint 

El gráfico de la solución obtenida es idéntico al que se obtuvo con el método Runge-Kutta.

ESPOL – Python Programación

Page 292: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 292/293

292

14.5 Problemas de aplicación de los métodos numéricos

1. Se necesita construir un recipiente rectangular, sin tapa, de un litro de capacidad. Paraconstruirlo se debe usar una lámina rectangular de 32 cm de largo y 24 cm de ancho. Elprocedimiento será recortar un cuadrado idéntico en cada una de las cuatro esquinas y

doblar los bordes de la lámina para formar el recipiente. Determine la medida del lado delcuadrado que se debe recortar en cada esquina para que el recipiente tenga la capacidadrequerida. Formule el modelo matemático y resuélvalo con el método de la Bosección.

2. Un comerciante compra tres productos: A, B, C. Estos productos se venden por peso enKg. pero en las facturas únicamente consta el total que debe pagar. El valor incluye elimpuesto a las ventas y supondremos, por simplicidad que es 10%. El comerciante deseaconocer el precio unitario de cada artículo, para lo cual dispone de tres facturas con lossiguientes datos:

Factura Kg. de A Kg. de B Kg. de C Valor pagado

1 4 2 5 $19.802 2 5 8 $30.033 2 4 3 $17.82

Formule el modelo matemático para encontrar la solución y obténgala mediante el métodode Gauss-Jordan

3. Los siguientes datos pertenecen a la curva de Lorentz, la cual relaciona el porcentaje deingreso económico global de la población en función del porcentaje de la población:

% de población % de ingreso global25 10

50 2575 70

100 100

Ejemplo. El 25% de la población tiene el 10% del ingreso económico global.

Use el método de Lagrange para obtener y graficar el polinomio de interpolacion que es elmodelo para representar los datos.

4. En el techado de las casas se utilizan planchas corrugadas con perfil ondulado. Cada

onda tiene la forma f(x) = sen(x), con un periodo de 2π pulgadas

El perfil de la plancha tiene 8 ondas y la longitud de cada onda se la puede calcular con

la siguiente integral:

Use el método de Simpson con m = 4, 6, 8, 10 para calcular . Estime el error en el últimoresultado y con él, encuentre la longitud del perfil de la plancha.

5. Obtenga y grafique 10 puntos de la solución de la siguiente ecuación diferencial nolineal utilizando el método de Runge-Kutta.

y’- 2x + 2y2 + 3 = 0, y(0) = 1, 0 ≤ x ≤ 1

ESPOL – Python Programación

Page 293: Manual De Programacion Python

8/10/2019 Manual De Programacion Python

http://slidepdf.com/reader/full/manual-de-programacion-python 293/293

293

15 Bibliografía