Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Sesion 1 : Introducción a python para Economist...

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

Sesion 1 : Introducción a python para Economistas (EPC - 2020)

Avatar for Abraham Zamudio

Abraham Zamudio

June 07, 2026

More Decks by Abraham Zamudio

Other Decks in Education

Transcript

  1. Sección 0 : Fundamentos de Programación y Lenguajes de programación

    : Una visión practica Abraham Zamudio 2 / 182
  2. Introducción : Fundamentos de programación Concepción del curso Una parte

    cada vez mayor de la actividad humana ahora tiene lugar en entornos digitales en línea. Sin embargo, los investigadores sociales están predominantemente capacitados para investigar e interpretar un mundo pre-digital. En este curso, formaremos investigadores sociales que deben comprometerse cada vez más con el desarrollo de software para comprender la sociedad contemporánea (y futura). Como un paso en esta dirección y como parte de una iniciativa para desarrollar una comunidad que practique la programación en la investigación social, desarrollaremos el presente curso Introducción a python para Economistas Abraham Zamudio 3 / 182
  3. Introducción : Fundamentos de programación Herramientas y lenguajes de programación

    al 2020 La ubicuidad de los sistemas digitales significa que áreas cada vez más grandes de actividad humana generan datos transaccionales que facilitan formas poderosas e innovadoras para describir, analizar y explicar la vida social. Incluso si gran parte de estos datos permanecen bloqueados detrás de la confidencialidad comercial, ya no es posible imaginar que las ciencias sociales puedan seguir siendo las mismas. Sin embargo, el compromiso con estas oportunidades ha sido desigual en las ciencias sociales. Es simplista y peligroso enmarcar la programación como una panacea para las ciencias sociales. Pero, fuera de los libros, la construcción de herramientas con lenguajes programación ya es una herramienta vital para responder a las preocupaciones emergentes en ciencias sociales. Abraham Zamudio 4 / 182
  4. Introducción : Fundamentos de programación Herramientas y lenguajes de programación

    al 2020 Los científicos sociales, y de hecho, la mayoría de los científicos de datos, pasan la mayor parte de su tiempo tratando de comprender los datos para ejecutar análisis estadísticos. Esto hace que la forma en que la mayoría de los científicos sociales usan Python sea fundamentalmente diferente de cómo la usan la mayoría de los desarrolladores de software. Abraham Zamudio 5 / 182
  5. Introducción : Fundamentos de programación Herramientas y lenguajes de programación

    al 2020 Los científicos sociales están interesados principalmente en escribir programas relativamente simples (scripts) que ejecutan una serie de comandos (recodificar variables, combinar conjuntos de datos, analizar documentos de texto, etc.) para organizar sus datos en una forma que puedan analizar. Y debido a que generalmente escriben sus scripts para una aplicación específica, generalmente no se centran en escribir código con muchas abstracciones.En otras palabras, los científicos sociales tienden a estar principalmente interesados en aprender a usar las herramientas existentes de manera efectiva, no a desarrollar nuevas. Abraham Zamudio 6 / 182
  6. Introducción : Fundamentos de programación Herramientas y lenguajes de programación

    al 2020 Los científicos sociales que aprenden Python tienden a tener prioridades diferentes en términos de desarrollo de habilidades que los Desarrolladores de software. Sin embargo, la mayoría de los tutoriales en línea fueron escritos para desarrolladores o estudiantes de ciencias de la computación, por lo que uno de los objetivos de este curso es proporcionar a los científicos sociales alguna orientación sobre las habilidades que deben priorizar en su formación inicial. Abraham Zamudio 7 / 182
  7. Introducción : Fundamentos de programación Herramientas y lenguajes de programación

    al 2020 En forma primaria podemos mencionar , 1. Tipos de datos: números enteros, números punto flotante, cadenas de caracteres , datos booleanos, listas, diccionarios y conjuntos (las tuplas son algo opcionales). 2. Escritura de bucles y definición de funciones. 3. Comprensión de los tipos mutables e inmutables. 4. Métodos para manipular cadenas de caracteres. 5. Administración de los módulos de python y el uso de estos módulos. 6. Lectura e interpretación de errores. Abraham Zamudio 8 / 182
  8. Introducción : Fundamentos de programación ¿ Quienes usan python en

    economía ? (a) Paul Romer (b) Thomas Sargent (c) John Stachurski Figure: Economistas que usan python Abraham Zamudio 9 / 182
  9. Introducción : El poder de python en Ciencias sociales Ecosistema

    Figure: Python en Ciencias Sociales Algunas referencias: Python: An Ecosystem for Scientific Computing [2011] Code and Data for the Social Sciences: A Practitioner’s Guide PYTHON IN 2020 Abraham Zamudio 12 / 182
  10. Introducción : El poder de python en Ciencias sociales Ecosistema

    Figure: Python en Ciencias Sociales Algunas referencias: Python: An Ecosystem for Scientific Computing [2011] Code and Data for the Social Sciences: A Practitioner’s Guide PYTHON IN 2020 Abraham Zamudio 12 / 182
  11. Introducción : El poder de python en Ciencias sociales Ecosistema

    de Python para investigación y desarrollo Necesidad : Idea general de un algoritmo 1. Obtener datos (por simulación, por experimentos, por encuestas ,de manera automatizada , de sensores , etc) 2. Manipular y procesar la data (Los puntos de partida son : álgebra lineal, cálculo diferencial , cálculo integral, estadística descriptiva.) 3. Visualizar resultados, de comprensión rápida, pero también con gráficos de alta calidad , para informes o publicaciones. (pares ordenados, rectas, planos ,curvas, superficies, etc .) Abraham Zamudio 13 / 182
  12. Introducción : El poder de python en Ciencias sociales Ecosistema

    de Python para investigación y desarrollo Fortalezas de python Baterías incluidas : Gran colección de bloques (como ladrillos para construis una casa) ya existentes de métodos numéricos clásicos, herramientas para gráficar o procesar datos. No necesitaras programar el trazado de una función, o como calcular una transformada de fourier o algún método de pronostico que exista en la literatura clásica. No reinventes la rueda Freely Available Software for Linear Algebra (September 2018) Abraham Zamudio 14 / 182
  13. Introducción : El poder de python en Ciencias sociales Ecosistema

    de Python para investigación y desarrollo Fortalezas de python Fácil de aprender : A la mayoría de los profesionales no se les paga como programadores, ni se les a entrenado para eso en la universidad/instituto, hoy en día tener habilidades de desarrollo de software es tan común y bien visto que marca una diferencia al momento de postular a algún puesto de trabajo. Recopilacion de libros sobre algoritmos Abraham Zamudio 15 / 182
  14. Introducción : El poder de python en Ciencias sociales Ecosistema

    de Python para investigación y desarrollo Fortalezas de python Comunicación fácil : Para mantener el código vivo dentro de un laboratorio de investigación, una compañía o alguna dependencia del estado , debe ser tan legible como un libro por parte de los que colaboradores, estudiantes o quizás clientes. La sintaxis de python es simple, evitando símbolos extraños o largas especificaciones de rutina que desviarían al lector de la comprensión matemática o científica del código. Abraham Zamudio 16 / 182
  15. Introducción : El poder de python en Ciencias sociales Ecosistema

    de Python para investigación y desarrollo Fortalezas de python Código eficiente : Los módulos numéricos de python son computacionalmente eficientes. Pero no esta demás decir que un código rápido se vuelve inútil si se dedica demasiado tiempo en escribirlo. Python apunta a tiempos de desarrollo y tiempos de ejecución rápidos, hoy en dia comparables con los tiempos de procesamiento de los lenguajes de programacion compilados (C, C++, Fortran). Efficient use of linear algebra library for simulations Numerical Linear Algebra Software Numerical linear algebra software Linear Algebra Numerical linear algebra algorithms and software Armadillo : C++ library for linear algebra & scientific computing Abraham Zamudio 17 / 182
  16. Introducción : El poder de python en Ciencias sociales Ecosistema

    de Python para investigación y desarrollo Fortalezas de python Universal : Python es un lenguaje usado para problemas diferentes, tanto si te interesa la analítica de un determinado conjunto de datos, la computación de alto performance (CPU y GPU), el desarrollo de un dashboard o algún sistema web, e inclusive hasta una aplicación para móviles . Aprender python evita aprender un nuevo software cada nuevo problema. Abraham Zamudio 18 / 182
  17. Introducción : El poder de python en Ciencias sociales ¿

    Como se compara python con otras soluciones ? Lenguajes compilados : C,C++, Fortran ... Pros :Muy rápido. Para cálculos pesados, es difícil superar la velocidad de estos lenguajes de programación. Contras :Usabilidad un poco pesada al inicio: sin interac- tividad durante el desarrollo, pasos de compilación obliga- torios (dependientes de la arquitectura, del sistema oper- ativo y del compilador), sintaxis detallada, administración de memoria manual y muchos otros aspectos técnicos a tener cuenta. Estos son lenguajes complicados para no programadores. Abraham Zamudio 19 / 182
  18. Introducción : El poder de python en Ciencias sociales ¿

    Como se compara python con otras soluciones ? Matlab Pros : Muy rica colección de bibliotecas con numerosos al- goritmos implementados, para muchos dominios de aplica- ciones diferentes. Ejecución rápida porque estas bibliote- cas a menudo se escriben en un lenguaje compilado.Entorno de desarrollo agradable: completo y con manual de ayuda muy documentado, editor integrado, etc. El soporte com- ercial está disponible. Contras : El idioma base es bastante deficiente y puede volverse restrictivo para usuarios avanzados.No es gratis, la licencia estándar cuesta mas de 1000 dolares (sin ningún toolbox, para un solo núcleo y un máximo de 8gb de memoria ram) Abraham Zamudio 20 / 182
  19. Introducción : El poder de python en Ciencias sociales ¿

    Como se compara python con otras soluciones ? Julia Pros : Julia es un lenguaje de programación moderno, ex- presivo y de alto rendimiento diseñado para la computación científica y la manipulación de datos.Está diseñado para computación distribuida y paralela. Julia proporciona una extensa biblioteca de funciones matemáticas con gran pre- cisión numérica. Julia ofrece potentes capacidades de tipo shell para administrar otros procesos en el sistema opera- tivo. Contras : Ecosistema limitado a computación numérica. Aún joven (Aparición : 2012). Abraham Zamudio 21 / 182
  20. Introducción : El poder de python en Ciencias sociales ¿

    Como se compara python con otras soluciones ? Otros lenguajes scripting : Scilab, Octave, GnuPlot, IDL , etc Pros : De código abierto, gratuito, o al menos más barato que Matlab.Algunas características pueden ser muy avanzadas (programación estadística en R,procesamiento de imágenes satelitales en IDL , etc.) Contras : Hay menos algoritmos disponibles que en Mat- lab, y el lenguaje no es más avanzado.Algunos programas están dedicados a un dominio. Ej: Gnuplot para dibujar curvas. Estos programas son muy potentes, pero están restringidos a un solo tipo de uso, como el trazado de curvas. Abraham Zamudio 22 / 182
  21. Introducción : El poder de python en Ciencias sociales ¿

    Como se compara python con otras soluciones ? Python Pros : Muy buenas y bien documentadas librerías para computación científica, análisis de datos, inteligencia arti- ficial y muchos otros campos de las ciencias aplicadas.Lenguaje bien pensado, que permite escribir código muy legible y bien estructurado: codificamos lo que pensamos.Muchos módulos más allá de la computación científica (servidores web, acceso a puertos seriales, puertos usb, etc.).Software libre y de código abierto, ampliamente difundido, con una comunidad vi- brante.Una variedad de entornos potentes para trabajar, como IPython, Spyder, Jupyter notebooks,Pycharm. Ademas de Google Colab y muchos otros entornos web de desarrollo. Contras Abraham Zamudio 23 / 182
  22. Empecemos con formulas 1. Problemas fáciles de formular, interpretar y

    comprender. 2. Muchos conceptos fundamentales del lenguaje de progra- mación python son introducidos en esta sección: Variables. Expresiones Aritméticas. Impresión de textos y números. ¿Porque? ¿Porque? Abraham Zamudio 25 / 182
  23. Evaluemos una formula matemática : MRUV Lanzamos un objeto hacia

    arriba (verticalmente) con velocidad inicial v0. Analizamos la trayectoria que sigue este objeto. y(t) = v0 t − 1 2 g t2 donde 1. y es la altura (posición) como función del tiempo. 2. v0 es la velocidad inicial en el tiempo cero. 3. g es la aceleración de la gravedad. Tarea : Dados v0, g, t, calcular y. Abraham Zamudio 26 / 182
  24. Otras formulas 1. Hallar las soluciones de : ax2 +

    bx + c = 0 2. Hallar la fuerza de atracción gravitacional entre dos masas : F = G m1 m2 d2 3. Hallar la fuerza electrica entre dos cargas: F = k q1 q2 d2 4. El volumen de una esfera de radio r Vol = 4 3 πr3 Abraham Zamudio 27 / 182
  25. Otras formulas 1. Interés simple : i = F −

    P P ∗ n 2. Interés Compuesto : n = log F P log(1 + i) 3. Tasa Efectiva: tea = (1 + iv)n − 1 4. Anualidades Vencidas C = Pi 1 − (1 + i)−n Abraham Zamudio 28 / 182
  26. ¿Usar una calculadora? Un programa (o software) es mucho mas

    poderoso Una secuencia de instruc- ciones para la computadora, escrita en un lenguaje de pro- gramación, algo así como el inglés, pero mucho más simple, y mucho más estricto. ¿Que es un programa? ¿Que es un programa? Abraham Zamudio 29 / 182
  27. Función print Mandar/escribir un mensaje (cadena) en pantalla (prompt) Una

    de las primeras cosas que aprenderemos en python es a comunicarnos con el lenguaje. En este sentido , empezaremos con la funcion que le permite a python decirnos (comunicarnos) algún mensaje. La sintaxis tipo printf (C/C++) da una gran flexibilidad en el formato de texto con números La salida de nuestros cálculos a menudo contienen texto y números, por ejemplo para t = 0.6 s y = 1.23 m Abraham Zamudio 30 / 182
  28. Función print Mandar/escribir un mensaje (cadena) en pantalla (prompt) Queremos

    controlar el formato con el que se imprimen los resultados en pantalla : Estilo : 0.6 vs. 6E − 01 o 6.0e − 0.1. Aquí es donde el formato (impresión) que obtenemos con print es fundamental para este propósito: MRUV : Version1 1 v0 = 5 2 g = 9.81 3 t = 0.6 4 y = v0*t - 0.5*g*t**2 5 print(y) Abraham Zamudio 31 / 182
  29. Función print Nombre de las Variables Como elegir los nombres

    de las variables : 1. Use los mismos nombres para la variable en el programa que en la descripción matemática del modelo (formulación del problema) que desea resolver. 2. Para todas las variables que no tengan una definición matemática precisa, use un nombre descriptivo cuidadosamente seleccionado. MRUV: Version2 1 initial_velocity = 5 2 acceleration_of_gravity = 9.81 3 TIME = 0.6 4 VerticalPositionOfBall = initial_velocity*TIME - \ 5 0.5*acceleration_of_gravity*TIME**2 6 print(VerticalPositionOfBall) Abraham Zamudio 32 / 182
  30. Mas sobre la ayuda el interprete Después de ejecutar :

    help() 1 help> True 2 3 help> collections 4 5 help> builtins 6 7 help> modules 8 9 help> keywords 10 11 help> symbols 12 13 help> topics 14 15 help> LOOPING Si desea salir de la consola de ayuda, escriba quit. Abraham Zamudio 35 / 182
  31. Función print Formateando texto y números Opciones de la función

    print (MRUV : Version3) 1 initial_velocity = 5 2 3 acceleration_of_gravity = 9.81 4 5 TIME = 0.6 6 7 VerticalPositionOfBall = initial_velocity*TIME - \ 8 0.5*acceleration_of_gravity*TIME**2 9 10 print("En t=%g s, la altura de la pelota es %.2f m." % \ 11 (TIME,VerticalPositionOfBall)) Abraham Zamudio 36 / 182
  32. Función print Formateando texto y números Aqui podemos ver una

    lista con las mas importantes opciones de print Abraham Zamudio 37 / 182
  33. Función print Formateando texto y números Ejemplo 1 (MRUV :

    Version4) 1 v0 = 5 2 3 g = 9.81 4 5 t = 0.6 6 7 y = v0*t - 0.5*g*t**2 8 9 print('En t={t:g} s, la altura de la pelota es {y:.2f} m.' \ 10 .format(t=t, y=y) 11 ) Abraham Zamudio 38 / 182
  34. Función print Formateando texto y números Ejemplo 1 (MRUV :

    Version5) 1 v0 = 5 2 g = 9.81 3 t = 0.6 4 y = v0*t - 0.5*g*t**2 5 6 print( """ 7 En t=%f s, una bola con 8 velocidad inicial v0=%.3E m/s 9 esta en la altura %.2f m. 10 """ % (t, v0, y) 11 ) Abraham Zamudio 39 / 182
  35. Variables de tipo lógico (boolean) y operadores lógicos Una expresión

    booleana (o expresión lógica) se evalúa en uno de los dos estados : verdadero o falso. Python proporciona el tipo booleano que se puede establecer en Falso o Verdadero. Muchas funciones y operaciones devuelven objetos booleanos. La palabra clave not también se puede usar para invertir un tipo booleano. 1 not True Abraham Zamudio 40 / 182
  36. Variables de tipo lógico (boolean) y operadores lógicos Operadores de

    comparación Los operadores <, <=,>,> =, ==,!= comparan los valores de 2 objetos y devuelve Verdadero o Falso. La comparación depende del tipo de los objetos. 1 10 == 10 2 10 <= 10 3 2**2 >= 4 4 (4**128)-2**256 < 0 Abraham Zamudio 41 / 182
  37. Variables de tipo lógico (boolean) y operadores lógicos Encadenamiento de

    operadores de comparación Los operadores de comparación se pueden encadenar. Considere los siguientes ejemplos: 1 x = 2 2 3 1 < x < 3 4 5 10 < x < 20 6 7 3 > x <= 2 8 9 2 == x < 4 Abraham Zamudio 42 / 182
  38. Variables de tipo lógico (boolean) y operadores lógicos Evaluación de

    operadores lógicos y de comparación La evaluación utilizando los operadores and / or sigue estas reglas: and y or evalúan la expresión de izquierda a derecha. Operadores Descripción not x Retorna True si x es False,False en otro caso x and y Retorna x si x es False, y en otro caso x or y Retorna y si x es False, x en otro caso 1 a = True 2 b = False 3 # Ojo con lo que se obtiene 4 "a y b es", a and b 5 print(('a y b es',a and b)) 6 print(('a o b es',a or b)) 7 print(('negacion de a es',not a)) Abraham Zamudio 43 / 182
  39. Variables de tipo lógico (boolean) y operadores lógicos Operadores de

    pertenencia in se evalúa en True si encuentra una variable en una secuencia especificada y false en caso contrario. not in evalúa en False si encuentra una variable en una secuencia, True en caso contrario. 1 'Bueno' in 'Este es un buen ejemplo' 2 3 'bueno' not in 'Este es un buen ejemplo' 4 5 1234 in 21345871234 # ERROR !!!!! 6 7 '1234' in "21345871234" # CORRECTO 8 9 # para ver la documentacion de estas funciones 10 help("in") Abraham Zamudio 44 / 182
  40. Variables de tipo lógico (boolean) y operadores lógicos Operadores de

    identidad is evalúa en True si las variables a cada lado del operador apuntan al mismo objeto y False en caso contrario is not evalúa como False si las variables a ambos lados del operador apuntan al mismo objeto y True en caso contrario 1 p = 'Hola' 2 ps = p 3 ps is p 4 ps is not (not p) Abraham Zamudio 45 / 182
  41. Importando módulos Evaluando funciones matemáticas estándar Las fórmulas matemáticas frecuentemente

    involucran fun- ciones como sin, cos, tan, sinh, cosh, exp, log, etc. En una calculadora de bolsillo, usted tiene botones especiales para tales funciones. Del mismo modo, en un programa, escrito en python, también tiene una funcionalidad ya preparada para evaluar estos tipos de funciones matemáticas. Uno podría, en principio, escribir su propio programa para evaluar, por ejemplo, la función sin(x), pero cómo hacerlo de manera eficiente es un tema no trivial. Los expertos han trabajado en este problema durante décadas e implementado sus mejores recetas en piezas de software que deberíamos reutilizar. Abramowitz and Stegun: Handbook of Mathematical Functions Abraham Zamudio 47 / 182
  42. Importando módulos Evaluando funciones matemáticas estándar Problema : Considere la

    fórmula para calcular la altura de una bola en movimiento vertical, con una velocidad inicial hacia arriba v0: y = vo t − 1 2 g t2 0 = 1 2 g t2 − v0 t + y Entonces : t1 = v0 − v2 0 − 2gy g t2 = v0 + v2 0 − 2gy g Abraham Zamudio 49 / 182
  43. Importando módulos Evaluando funciones matemáticas estándar El programa para evaluar

    las expresiones para t1 y t2 en un programa de computadora, necesitamos acceso a la función de raíz cuadrada. En Python, la función de raíz cuadrada y muchas otras funciones matemáticas, como sin, cos, sinh, exp, y log, están disponibles en un módulo llamado math. Primero debemos importar el módulo antes de que podamos usarlo, es decir, debemos escribir import math u otra de las formas para acceder a los componentes del modulo math. A partir de entonces, para tomar la raíz cuadrada de una variable a, podemos escribir math.sqrt(a). Esto se demuestra en un programa para calcular t1 y t2: Abraham Zamudio 50 / 182
  44. Importando módulos Evaluando funciones matemáticas estándar Modulo math (Linea 6)

    1 # definimos las variables de entrada 2 v0 = 5 3 g = 9.81 4 y = 0.2 5 6 # importamos/cargamos el modulo math 7 import math 8 9 # Aplicamos las formulas matematicas del problema 10 t1 = (v0 - math.sqrt(v0**2 - 2*g*y))/g 11 t2 = (v0 + math.sqrt(v0**2 - 2*g*y))/g 12 13 # imprimimos resultados 14 print('En t=%g s y %g s, la altura es %g m.' %(t1, t2, y)) Abraham Zamudio 51 / 182
  45. Importando módulos Dos formas de importar un módulos Primer camino

    1 import math 2 # y ahora podemos acceder a las funciones de manera individual 3 x = math.sqrt(y) 4 5 # Para ver el contenido del modulo math ejecutamos 6 dir(math) 7 8 # para ver la ayuda de una funcion del modulo math usamos : 9 help(math.sqrt) Abraham Zamudio 52 / 182
  46. Importando módulos Dos formas de importar un módulos Segundo camino

    1 from math import sqrt 2 # Ahora podemos trabajar con sqrt de manera directa 3 # , sin la necesidad de usar el prefijo math 4 # De esta manera se puede importar mas de una funcion 5 # del modulo math 6 from math import sqrt, exp, log, sin, cos, pi 7 8 # Ojo con los sgtes 3 resultados 9 sin(pi/6) 10 cos(pi/3) 11 sin(pi/6) + cos(pi/3) 12 13 # Este camino tiene sus pro y sus contra, por ejemplo 14 # con la siguiente linea obtenemos un error 15 dir(math) 16 17 # Sin embargo la funcion help funciona como esperariamos 18 help(sin) Abraham Zamudio 53 / 182
  47. Importando módulos Versión alternativa de la segunda forma Importando todos

    las funciones del modulo math 1 from math import * Esta ultima linea sirve para importar todas las funciones del modulo math.Importar todas las funciones de un modulo usando el carácter * es conveniente, pero da lugar a una gran cantidad de palabras reservadas que no se pueden usar. En general se recomienda solo importar las funciones que se van a usar. Abraham Zamudio 54 / 182
  48. Importando módulos Creando alias a los módulos Los módulos y

    funciones importados pueden recibir nuevos nombres (alias) en la sentencia import. Importando todos las funciones del modulo math 1 import math as m 2 # m es ahora el nombre del modulo math 3 v = m.sin(m.pi) 4 from math import log as ln 5 v = ln(5) 6 from math import sin as s, cos as c, log as ln 7 v = s(x)*c(x) + ln(x) Abraham Zamudio 55 / 182
  49. Importando módulos Acceso a la ayuda del modulo math Consulta

    la ayuda del modulo math : help() 1 help> math Abraham Zamudio 56 / 182
  50. Ejercicio 1: Calcular el sinh(x) Nuestro primer ejercicio implica hacer

    llamadas a algunas funciones matemáticas del modulo math.Veamos la definición de la función sinh(x) sinh(x) = 1 2 (ex − e−x ) Hacer el calculo de tres formas diferentes : Llamando a la función math.sinh. Calculando el lado derecho usando math.exp. Calculando el lado derecho usando el operador exponencial (**) : math.e**x Abraham Zamudio 57 / 182
  51. Ejercicio 2: Distancia entre dos puntos Como segundo ejercicio también

    haremos llamadas a algunas funciones matemáticas del modulo math.Vamos a calcular la distancia entre dos puntos del plano cartesiano (R2). Para ello, sean A = (x1, y1) y B = (x2, y2), entonces la distancia entre A y B se calcula haciendo uso del Teorema de Pitagoras. d(A, B) = (y2 − y1)2 + (x2 − x1)2 Hacer el calculo para A = (−1, 2) y B = (3, 6). Funciones de ayuda : a. math.pow b. math.sqrt Abraham Zamudio 58 / 182
  52. Ejercicio 3: Listado de funciones del modulo math 1 import

    math 2 math_ls = dir(math) 3 print(math_ls) Usa como mínimo 5 funciones que no conozcas de las funciones listadas en la salida de la linea 3, para construir un par de ejemplos de calculo. Abraham Zamudio 59 / 182
  53. Ejercicio 4: Numeros complejos en python 1 a = -2

    2 b = 0.5 3 # Creamos numeros complejos con las variables 4 s = complex(a, b) 5 print(s) 6 w= s.conjugate() 7 s*w 8 s/w 9 s.real 10 s.imag Lea lo concerniente al modulo cmath. Funciones matematicas para numeros complejos. Abraham Zamudio 60 / 182
  54. Computación simbólica con python : Sympy Introduccion La biblioteca Symbolic

    Python (SymPy) tiene como objetivo proporcionar un sistema de álgebra computacional (CAS) con todas las funciones. A diferencia de muchos otros CAS, SymPy es principalmente una biblioteca, en lugar de un entorno completo. Esto hace que SymPy sea ideal para la integración en aplicaciones y cálculos que también usan otras bibliotecas de Python. Al momento de escribir este material, la última versión es 1.6. Más información sobre SymPy está disponible en http://www.sympy.org. Abraham Zamudio 62 / 182
  55. Computación simbólica con python : Sympy Wikipedia En matemáticas y

    ciencias de la computación, el álgebra computacional, también conocida como cálculo simbólico o cálculo algebraico, es un área científica que se refiere al estudio y desarrollo de algoritmos y software para la manipulación de expresiones matemáticas y otros objetos matemáticos. Aunque, hablando con propiedad, el álgebra computacional debe ser un sub-campo de la computación científica, ellos son considerados generalmente como campos distintos, porque la computación científica se basa generalmente en el análisis numérico con números y cálculos aproximados en punto flotante; mientras que, el álgebra computacional enfatiza el cálculo exacto con expresiones que contengan variables que no tienen cualquier valor dado y por lo tanto son manipulados como símbolos (de ahí se debe el nombre de cálculo simbólico). Abraham Zamudio 63 / 182
  56. Computación simbólica con python : Sympy Sistema de álgebra computacional

    Un sistema algebraico computacional o sistema de álgebra computacional (CAS, del inglés computer algebra system) es un programa de ordenador o calculadora avanzada que facilita el cálculo simbólico. La principal diferencia entre un CAS y una calculadora tradicional es la habilidad del primero para trabajar con ecuaciones y fórmulas simbólicamente, en lugar de numéricamente. Es decir, una expresión como a + b es interpretada siempre como "la suma de dos variables", y no como "la suma de dos números" (con valores asignados). Abraham Zamudio 64 / 182
  57. Computación simbólica con python : Sympy Sistema de álgebra computacional

    : Características (I) Simplificación de una expresión a la forma más simple o a una forma estándar. Cambio en la forma de las expresiones: expansión de productos y potencias, factorización, reescritura de un cociente de polinomios como suma de fracciones parciales, reescritura de funciones trigonométricas como exponenciales (y viceversa), etc. Operaciones con matrices incluyendo productos de matrices, inversa de una matriz, etc. Resolución de algunas ecuaciones. Cálculo de algunos límites de funciones. Cálculo de derivadas y derivadas parciales. Cálculo de algunas integrales indefinidas, definidas y de algunas transformadas integrales. Abraham Zamudio 65 / 182
  58. Computación simbólica con python : Sympy Sistema de álgebra computacional

    : Características (II) Aproximación de funciones por desarrollo en series de potencias. Resolución de algunas ecuaciones diferenciales. Manipulación exacta de fracciones y radicales. Realización de operaciones con precisión arbitraria. Respecto a la presentación de resultados: Visualizado de las expresiones matemáticas en una forma bidimensional, usando con frecuencia sistemas de composición similares a L A TEX. Abraham Zamudio 66 / 182
  59. Computación simbólica con python : Sympy Otros sistemas de álgebra

    computacional Algunos de los CAS más destacados son: Mathematica Maple SageMath Matlab Magma Abraham Zamudio 67 / 182
  60. Computación simbólica con python : Sympy Primeros pasos 1 import

    sympy 2 3 help(sympy) En esta documentación se pueden notar fácilmente 3 campos 1. PACKAGE CONTENTS 2. SUBMODULES 3. DATA Abraham Zamudio 68 / 182
  61. Computación simbólica con python : Sympy Primeros pasos 1 from

    sympy import * 2 3 # cuatro variables simbolicas son creadas, los valores 4 # previos de estas variables son sobreescritos. 5 x, y, a, b = symbols('x y a b') 6 7 # La variable f se convierte automáticamente 8 # en un caracter. 9 f = a**3 * x + 3 * a**2 * x**2/2 + a * x**3 + x**4/4 10 type(f) 11 12 var('u, v') 13 # La variable f se convierte automáticamente 14 # en un caracter 15 f = sin(u) ** 2 + tan(v) 16 type(f) Abraham Zamudio 69 / 182
  62. Computación simbólica con python : Sympy Primeros pasos La principal

    diferencia entre las funciones de symbols() y var() es que la primera función devuelve una referencia a un objeto de tipo carácter (character object). Para su uso en el futuro, se le debe asignar una variable. El segundo, sin asignación, crea una variable de carácter. 1 import sympy as sp 2 a = sp.Rational(1,2) 3 4 ARacional = sp.Rational(2)**50/sp.Rational(10)**50 5 Afloat = 2**50/10**50 6 7 sp.pi**2 8 # Evaluación numérica adaptativa de expresiones SymPy, 9 # usando mpmath para funciones matemáticas. 10 sp.pi.evalf() 11 (sp.pi + sp.exp(1)).evalf() Abraham Zamudio 70 / 182
  63. Computación simbólica con python : Sympy Primeros pasos : Un

    poco de álgebra Para hacer operaciones simbólicas hay que definir explícitamente los símbolos que vamos a usar, que serán en general las variables y otros elementos de nuestras ecuaciones: 1 x = sp.Symbol('x') 2 y = sp.Symbol('y') 3 # Podemos manipular los símbolos como queramos 4 x+y+x-y 5 (x+y)**2 6 ((x+y)**2).expand() 7 # Es posible hacer una sustitución usando la función subs 8 ((x+y)**2).subs(x, 1) 9 ((x+y)**2).subs(x, y) Abraham Zamudio 71 / 182
  64. Computación simbólica con python : Sympy Primeros pasos : Calculo

    con limites lim x→c f (x) = L ↔ ∀ > 0∃δ > 0 : 0 < |x − c| < δ → |f (x) − L| < 1 x = sp.Symbol("x") 2 sp.limit(sin(x)/x, x, 0) 3 4 # Limites infinitos 5 sp.limit(x, x, oo) 6 sp.limit(1/x, x, oo) 7 sp.limit(x**x, x, 0) Abraham Zamudio 72 / 182
  65. Computación simbólica con python : Sympy Primeros pasos : Cálculo

    de derivadas La derivada de una función describe su tasa de cambio en un punto dado. En SymPy podemos calcular la derivada de una función usando sympy.diff, o alternativamente usando el método diff de instancias de expresión SymPy. Para representar la derivada de primer orden de una función abstracta f (x) con respecto a x, podemos hacer : 1 x = sp.Symbol('x') 2 diff(sp.sin(x), x) 3 diff(sp.sin(2*x), x) 4 diff(sp.tan(x), x) 5 6 # este ultimo resultado se puede comprobar : 7 dx = sp.Symbol('dx') 8 sp.limit( (tan(x+dx)-tan(x) )/dx, dx, 0) Abraham Zamudio 73 / 182
  66. Computación simbólica con python : Sympy Primeros pasos : Cálculo

    de derivadas Este método se extiende fácilmente a funciones multivariadas: 1 g = sp.Function('g')(x, y) 2 g.diff(x, y) 3 g.diff(x, 3, y, 2) Abraham Zamudio 74 / 182
  67. Computación simbólica con python : Sympy Primeros pasos : Cálculo

    de derivadas Consideremos f (x) = exp − x2 2 cos(πx) (1) 1 x = sp.Symbol('x') 2 f = sp.exp(-x**2 / 2) * sp.cos(sp.pi*x) 3 4 dfdx = f.diff(x) 5 6 print("f'(x) =", sp.latex(sp.simplify(dfdx))) 7 8 print("f'(x) =", (sp.simplify(dfdx))) Abraham Zamudio 75 / 182
  68. Computación simbólica con python : Sympy Primeros pasos : Cálculo

    de derivadas Para funciones de más de una variable, podemos tomar derivadas parciales para una variable a la vez tratando las variables restantes como constantes. Definamos la función g(x, y) = exp − x2 + y2 2 cos(πx) (2) 1 x, y = sp.symbols('x, y') 2 g = sp.exp(-(x**2 + y**2) / 2) * sp.cos(sp.pi*x) 3 4 sp.simplify(g.diff(x)) 5 6 sp.simplify(g.diff(y)) Abraham Zamudio 76 / 182
  69. Computación simbólica con python : Sympy Primeros pasos : Cálculo

    de derivadas Para una función arbitraria f (x1, x2, . . . , xn) : Rn → R se define el gradiente de f como el vector formado por las derivadas parciales: ∇f : Rn → Rn (3) ∇f (x1, x2, . . . , xn) =         ∂f ∂x1 ∂f ∂x2 . . . ∂f ∂xn         (4) Abraham Zamudio 77 / 182
  70. Computación simbólica con python : Sympy Primeros pasos : Cálculo

    de derivadas de orden superior 1 # Derivada de orden 1 2 sp.diff(sin(2*x), x, 1) 3 4 # Derivada de orden 2 5 sp.diff(sin(2*x), x, 2) 6 7 # Derivada de orden 3 8 sp.diff(sin(2*x), x, 3) Abraham Zamudio 78 / 182
  71. Computación simbólica con python : Sympy Primeros pasos : Expansión

    de Series Las expansiones de series son una herramienta importante en muchas disciplinas en informática. Con una expansión en serie, una función arbitraria se puede escribir como un polinomio, con coeficientes dados por las derivadas de la función en el punto alrededor del cual se realiza la expansión en serie. Al truncar la expansión de la serie en algún orden n, el enésimo orden Se obtiene una aproximación de la función. En SymPy, la expansión en serie de una función o una expresión se puede calcular utilizando la función sympy.series o el método en serie disponible en las instancias de expresión de SymPy. El primer argumento para sympy.series es una función o expresión que se va a expandir, seguida de un símbolo con respecto a la cual se debe calcular la expansión (se puede omitir para expresiones y funciones de una sola variable). Abraham Zamudio 79 / 182
  72. Computación simbólica con python : Sympy Primeros pasos : Expansión

    de Series 1 x = sp.Symbol("x") 2 f = sp.Function("f")(x) 3 sp.series(f, x) Para cambiar el punto alrededor del cual se expande la función, especificamos el argumento x0 como en el siguiente ejemplo: 1 x0 = sp.Symbol("{x_0}") 2 f.series(x, x0, n = 2) Aquí también especificamos n = 2, para solicitar una expansión en serie con solo términos de hasta segundo orden. Tenga en cuenta que los errores debidos a los términos truncados están representados por el objeto de orden O (). Abraham Zamudio 80 / 182
  73. Computación simbólica con python : Sympy Primeros pasos : Expansión

    de Series El objeto order es útil para realizar un seguimiento del orden de una expresión cuando se computa con expansiones en serie, como multiplicar o agregar diferentes expansiones. Sin embargo, para una evolución numérica concreta, es necesario eliminar el término de orden de la expresión, lo que se puede hacer utilizando el método removeO: 1 f.series(x, x0, n = 2).removeO() Abraham Zamudio 81 / 182
  74. Computación simbólica con python : Sympy Primeros pasos : Expansión

    de Series Si bien las expansiones mostradas anteriormente se calcularon para una función no especificada f (x), naturalmente también podemos calcular las expansiones en serie de funciones y expresiones específicas, y en esos casos obtenemos resultados específicos. Por ejemplo, podemos generar fácilmente las expansiones de muchas funciones matemáticas estándar: 1 sp.cos(x).series() 2 3 sp.sin(x).series() 4 5 sp.exp(x).series() 6 7 (1/(1+x)).series() Abraham Zamudio 82 / 182
  75. Computación simbólica con python : Sympy Primeros pasos : Expansión

    de Series Así como expresiones anteriores,en general también pueden ser funciones multivariables: 1 y = sp.Symbol("y") 2 3 expr = sp.cos(x) / (1 + sp.sin(x * y)) 4 5 expr.series(x, n = 4) 6 7 expr.series(y, n = 4) Abraham Zamudio 83 / 182
  76. Computación simbólica con python : Sympy Primeros pasos : Integración

    simbólica (I) 1 sp.integrate(6*x**5, x) 2 sp.integrate(sp.sin(x), x) 3 sp.integrate(sp.log(x), x) 4 sp.integrate(2*x + sp.sinh(x), x) 5 sp.integrate(exp(-x**2)*erf(x), x) 6 7 # También es posible calcular integrales definidas: 8 sp.integrate(x**3, (x, -1, 1)) 9 sp.integrate(sin(x), (x, 0, pi/2)) 10 sp.integrate(cos(x), (x, -pi/2, pi/2)) Abraham Zamudio 84 / 182
  77. Computación simbólica con python : Sympy Primeros pasos : Integración

    simbólica (II) 1 # Y también integrales impropias: 2 sp.integrate(exp(-x), (x, 0, sp.oo)) 3 sp.integrate(log(x), (x, 0, 1)) 4 5 # Algunas integrales definidas complejas es necesario 6 # definirlas como objeto Integral() y luego evaluarlas 7 # con el método evalf(): 8 integ = sp.Integral(sin(x)**2/x**2, (x, 0, oo)) 9 integ.evalf() Abraham Zamudio 85 / 182
  78. Computación simbólica con python : Sympy Primeros pasos : Resolución

    de Ecuaciones (I) SymPy es capaz de resolver ecuaciones algebraicas de una o varias variables: 1 # f(x)=0 2 sp.solve(x**4 - 1, x) 3 4 # Es capar de resolver múltiples ecuaciones respecto a 5 # múltiples variables (sistemas de ecuaciones) 6 # proporcionando una tupla como segundo argumento: 7 sp.solve([x + 5*y - 2, -3*x + 6*y - 15], [x, y]) 8 9 # También tiene capacidad (limitada) de resolver 10 # ecuaciones transcendentales: 11 sp.solve(sp.exp(x) + 1, x) Abraham Zamudio 86 / 182
  79. Computación simbólica con python : Sympy Primeros pasos : Resolución

    de Ecuaciones (II) Otra alternativa, en el caso de ecuaciones polinómicas, es factor. factor devuelve el polinomio factorizado en términos irreducibles y es capaz de calcular la factorización sobre varios dominios: 1 f = x**4 - 3*x**2 + 1 2 sp.factor(f) Abraham Zamudio 87 / 182
  80. Computación simbólica con python : Sympy Ecuaciones Diferenciales SymPy es

    capaz de resolver (algunas) ecuaciones diferenciales ordinarias. Para resolver ecuaciones diferenciales, use el método dsolve. Primero, cree una función indefinida pasando el argumento cls = sym.Function a la función symbols: Escribe un programa que resuelve la ecuación diferencial ordinaria : dx dt + x = 1 1 t = sp.symbols('t') 2 x = sp.symbols('x', cls = sp.Function) 3 edo1 = sp.Eq(x(t).diff(t) , 1-x(t)) 4 sol_ode1 = sp.dsolve(edo1,x(t)) 5 print(sol_ode1) Abraham Zamudio 88 / 182
  81. Computación simbólica con python : Sympy Ecuaciones Diferenciales Escribe un

    programa que resuelve la ecuación diferencial ordinaria : d2y dt2 + dy dt + y = et 1 t = sp.symbols('t') 2 y = sp.symbols('y', cls = sp.Function) 3 edo2 = sp.Eq(y(t).diff(t,t) + y(t).diff(t) + y(t) , sp.exp(t)) 4 sol_edo2 = sp.dsolve(edo2 , y(t)) 5 print(sol_edo2) Abraham Zamudio 89 / 182
  82. Computación simbólica con python : Sympy Ejercicio 5 Calcular √

    2 con 100 decimales Calcular 1 2 + 1 3 en aritmética racional. Calcular la forma expandida de (x + y)6. Calcular lim x→0 sen(x) x Resuelve el sistema de ecuaciones : x + y = 2 2x + y = 0 Abraham Zamudio 90 / 182
  83. Entrada de Usuario (input) Consideremos el programa para evaluar la

    formula x = A sin(ω t) Ecuación de una Onda 1 from math import sin 2 A = 0.1 3 w = 1 4 t = 0.6 5 x = A*sin(w*t) 6 print(x) En este programa, A, w y t son datos de entrada en el sentido de que estos parámetros deben ser conocidos antes de que el programa pueda realizar el cálculo de x. Los resultados producidos por el programa, en este caso la variable x, constituyen los datos de salida. Abraham Zamudio 92 / 182
  84. Entrada de Usuario (input) Entrada estándar : teclado Conversión de

    grados Celsius-Fahrenheit 1 C = input('C=? ') 2 C = float(C) 3 F = 9.0/5*C + 32 4 print(F) Saludo 1 name = str(input("Cual es tu nombre? ")) 2 print("Mucho gusto " + name + "!") 3 age = input(" Cual es tu edad ? ") 4 print("Ya tienes %s anios de edad %s !" % (age,name)) Abraham Zamudio 93 / 182
  85. Entrada de Usuario (input) Entrada por linea de comandos :

    Modulo sys Conversión de grados Celsius-Fahrenheit (c2f_cli.py) 1 import sys 2 C = float(sys.argv[1]) 3 F = 9.0/5*C + 32 4 print(F) Ejecutar 1 %run c2f_cli.py 21 Abraham Zamudio 94 / 182
  86. Entrada de Usuario (input) Entrada por linea de comandos :

    Modulo sys MRUV 1 import sys 2 t = float(sys.argv[1]) 3 v0 = float(sys.argv[2]) 4 g = 9.81 5 y = v0*t - 0.5*g*t**2 6 print(y) Ejecutar 1 %run mruv_cli.py 0.6 5 Abraham Zamudio 95 / 182
  87. Estructura de Decisión : IF El flujo de un programa

    a veces necesita tomar decisiones en base a evaluaciones booleanas, esto se traduce en una estructura condicional. Para ver esto de manera matemática, veamos la siguiente función : f (x) = sin(x) , 0 ≤ x ≤ π 0 , en otro caso Abraham Zamudio 97 / 182
  88. Estructura de Decisión : IF En python la implementación de

    esta función necesitaría la evaluación del valor de x, esto lo resolvemos con la estructura if. 1 from math import pi, sin 2 def f(x): 3 if 0 <= x <= pi: 4 value = sin(x) 5 else: 6 value = 0 7 return value 8 9 f(2) Abraham Zamudio 98 / 182
  89. Estructura de Decisión : Bloques IF-ELSE La estructura general de

    un bloque if-else es: 1 if condition: 2 <bloque de sentencias ejecutadas si condicion es TRUE> 3 else: 4 <bloque de sentencias ejecutadas si condicion es FALSE> Abraham Zamudio 99 / 182
  90. Estructura de Decisión : Bloques IF-ELSE Con la palabra reservada

    elif, abreviatura de else if, podemos tener varias condicionales if mutuamente excluyentes, que permiten una bifurcación múltiple del flujo del programa: 1 if condition1: 2 <bloque de sentencias> 3 elif condition2: 4 <bloque de sentencias> 5 elif condition3: 6 <bloque de sentencias> 7 else: 8 <bloque de sentencias> 9 10 <siguiente sentencia , fuera de los IF> Abraham Zamudio 100 / 182
  91. Estructuras de repetición : bucles (loops) Crea una table de

    grados celsius y fahrenheit -20 -4.0 -15 5.0 -10 14.0 -5 23.0 0 32.0 5 41.0 10 50.0 15 59.0 20 68.0 25 77.0 30 86.0 35 95.0 40 104.0 ¿Como seria un programa que escriba la tabla anterior? Abraham Zamudio 101 / 182
  92. Estructuras de repetición : bucles (loops) Algunos conceptos Una iteración

    significa ejecutar el mismo bloque de código una y otra vez, potencialmente muchas veces. Una estructura de programación que implementa la iteración se denomina bucle. En programación, hay dos tipos de iteración, indefinida y definida: Con la iteración indefinida, el número de veces que se ejecuta el ciclo no se especifica explícitamente de antemano. En cambio, el bloque designado se ejecuta repetidamente siempre que se cumpla alguna condición. Con una iteración definida, el número de veces que se ejecutará el bloque designado se especifica explícitamente en el momento en que comienza el ciclo. Abraham Zamudio 102 / 182
  93. Estructuras de repetición : bucles (loops) Creando la tabla :

    Una versión simple Conocemos como calcular linea por linea 1 C = -20 2 F = 9.0/5*C + 32 3 print(C, F) Seria suficiente repetir estas sentencias C = -20; F = 9.0/5*C + 32 ;print(C, F) C = -15; F = 9.0/5*C + 32 ;print(C, F) ... C = 35; F = 9.0/5*C + 32 ;print(C, F) C = 40; F = 9.0/5*C + 32 ;print(C, F) Abraham Zamudio 103 / 182
  94. Estructuras de repetición : bucles (loops) Creando una tabla :

    Características de la primera versión Muy aburrido de escribir y fácil de introducir errores de impresión. Cuando la programación se vuelve aburrida, usualmente hay una construcción que automatiza la escritura La computadora es extremadamente buena para realizar tareas repetitivas. Para este proposito usamos bucles (loops). Abraham Zamudio 104 / 182
  95. Estructura de repetición : While El bucle while hace posible

    repetir tareas similares.Un bucle while ejecuta repetidamente un conjunto de sentencias siempre que una condición booleana sea verdadera. 1 while condicion: 2 <sentencia 1> 3 <sentencia 2> 4 ... 5 <primera sentencia despues del bucle> Todas las sentencias dentro del bucle deben estar indentadas. El ciclo finaliza cuando se encuentra una declaración que no este indentada. Abraham Zamudio 105 / 182
  96. Estructura de repetición : While Ejemplo de sintaxis 1 i

    = 1 2 while i < 6: 3 print(i) 4 i += 1 Observación 1 : i se inicializa en 1.La expresión en el encabezado de la instrucción while en la línea 2 es i<6, lo cual es cierto, por lo que se ejecuta el cuerpo del bucle. Dentro del cuerpo del bucle en la linea 3 se imprime el valor actual de la variable i y luego en la línea 4, n va aumentando de 1 en 1 . Abraham Zamudio 106 / 182
  97. Estructura de repetición : While Ejemplo de sintaxis 1 i

    = 1 2 while i < 6: 3 print(i) 4 i += 1 Observación 2 : Cuando el cuerpo del ciclo ha finalizado, la ejecución del programa regresa a la parte superior del ciclo (línea 2), y la expresión se evalúa nuevamente. Todavía es cierto, por lo que el cuerpo se ejecuta nuevamente,imprimiendo el valor de 2 en la pantalla.Continuando con la actualización del valor en la variables i. Abraham Zamudio 107 / 182
  98. Estructura de repetición : While Ejemplo de sintaxis 1 i

    = 1 2 while i < 6: 3 print(i) 4 i += 1 Observación 3 : Esto continúa hasta que i se convierte en 6. En ese punto, cuando se prueba la expresión, es falsa y el ciclo termina. La ejecución se reanudaría en la primera declaración que sigue al cuerpo del bucle, pero no hay una en este caso. Abraham Zamudio 108 / 182
  99. Estructura de repetición : While Creación de la tabla 1

    print ('------------------')# cabecera de la tabla 2 C = -20 # inicia los valores de C 3 dC = 5 # define el incremento 4 while C <= 40: # inicia el bucle y la condicion 5 # primera sentencia dentro del bucle 6 F = (9.0/5)*C + 32 7 # segunda sentencia dentro del bucle 8 print(C, F) 9 # ultima sentencia dentro del bucle 10 C = C + dC 11 print ('------------------')# fin de la tabla Abraham Zamudio 109 / 182
  100. Estructura de repetición : While Flujo del programa dentro del

    bucle 1 C = -20 2 dC = 5 3 while C <= 40: 4 F = (9.0/5)*C + 32 5 print(C, F) 6 C = C + dC Visualizacion de le ejecucion Abraham Zamudio 110 / 182
  101. Estructura de repetición : While Simulemos el bucle while a

    mano Primero C = −20, como −20 ≤ 40 tiene valor booleano verdadero, entonces ejecutamos las sentencias que están dentro del bucle. Calculamos F, imprimirmos y actualizamos C a -15. Saltamos para nuevamente evalular la condicion, evaluamos C ≤ 40 lo cual es verdadero, luego nuevamente ejecutamos las sentencias del bucle. Continuamos hasta que C tome el valor de 45. Ahora la condicion del bucle 45 ≤ 40 tiene valor booleano FALSO, y el programa salta a la primera linea despues del bucle while. Abraham Zamudio 111 / 182
  102. While : Ejemplo (1) de la flexibilidad en la variable

    de control 1 i = 1 2 while i <= 50: 3 print(i) 4 i = 3*i + 1 5 print("Programa terminado") Abraham Zamudio 112 / 182
  103. While: Ejemplo (2) para verificar una condición sobre el dato

    de entrada 1 numero = int(input("Escriba un número positivo: ")) 2 while numero < 0: 3 print("¡Ha escrito un número negativo! Inténtelo de nuevo") 4 numero = int(input("Escriba un número positivo: ")) 5 print("Gracias por su colaboración") Abraham Zamudio 113 / 182
  104. While: Ejemplo (3) para verificar una condición sobre el dato

    de entrada 1 promedio, total, contar = 0.0, 0, 0 2 3 print("Introduzca la nota de un estudiante (-1 para salir): ") 4 nota = int(input("Ingrese la nota")) 5 while nota != -1: 6 total = total + nota 7 contar = contar + 1 8 print("Introduzca la nota de un estudiante (-1 para salir):") 9 nota = int(input("Ingrese la nota")) 10 promedio = total / contar 11 print("Promedio de notas del grado escolar es: " + str(promedio)) → Abraham Zamudio 114 / 182
  105. While y la sentencia break Con la instrucción break podemos

    detener el bucle (ciclo) incluso si la condición while es verdadera: 1 i = 1 2 while i < 6: 3 print(i) 4 if i == 3: 5 break 6 i += 1 1 var = 10 2 while var > 0: 3 print('Current variable value :', var) 4 var = var -1 5 if var == 5: 6 break 1 text = "Esto es Python" 2 i=0 3 while i < len(text): 4 print text[i] 5 i += 1 6 if text[i]=='t': 7 break 1 import random 2 sum = 0 3 while sum < 1000000: 4 sum += random.randint(0,100) 5 print(sum) 6 if sum >= 2500: 7 print('Se llego al limite') 8 break Abraham Zamudio 115 / 182
  106. Estructura de repetición : While Combinando expresiones booleanas Muchas condiciones

    pueden ser combinaciones de and y or : 1 while condition1 and condition2: 2 ... 3 while condition1 or condition2: 4 ... Reglas de la lógica proposicional Regla 1 : C1 y C2 es verdadero si ambas son verdaderas. Regla 2 : C1 o C2 es verdadero si una es verdadera. Abraham Zamudio 116 / 182
  107. Estructura de repetición : for ¿Cuanto usar el bucle for?

    Los bucles for se usan tradicionalmente cuando tiene un bloque de código que desea repetir un número fijo de veces. La sentencia for en Python itera sobre los miembros de una secuencia (al principio un objeto range), ejecutando el bloque para cada elemento del objeto range. Diferencie la sentencia for con sentencia while, que se usa cuando se necesita verificar una condición en cada iteración, o para repetir un bloque de código para siempre. Por ejemplo: 1 for x in range(0, 3): 2 print("Estamos en el indice %d" % (x)) Abraham Zamudio 117 / 182
  108. Estructura de repetición : for Bucles anidados Cuando tiene un

    bloque de código que desea ejecutar x número de veces, luego un bloque de código dentro de ese código que desea ejecutar y número de veces, utiliza lo que se conoce como un "bucle anidado". En Python, estos se usan mucho cuando alguien tiene un objeto iterable dentro de un objeto iterable. 1 for x in range(1, 11): 2 for y in range(1, 11): 3 print('%d * %d = %d' % (x, y, x*y)) Abraham Zamudio 118 / 182
  109. Estructura de repetición : for Ejemplos con Sympy 1 x

    = sp.symbols("x") 2 y = sp.symbols("y") 3 4 for i in range(21): 5 Dx_i = sp.diff(sp.cos(x*sp.pi) , x,i) 6 print(Dx_i) 7 8 for i in range(1,6): 9 Polx_i = (x+y)**i 10 Polx_i = Polx_i.expand() 11 print(Polx_i) Abraham Zamudio 119 / 182
  110. Sección 7 : Estructuras de datos básicas de python 1.

    listas 2. tuplas 3. diccionarios Abraham Zamudio 120 / 182
  111. Las listas son objetos para almacenar una secuencia de cosas

    (objetos) Hasta ahora una variable se ha referido a un numero (o a una cadena), pero algunas veces resulta natural tener una colección de números, por ejemplo la tabla de grados celsius y fahrenheit : -20,-15,-10,-5,0,...,40. Una solucion simple pero poco eficiente es asignar una variable a cada valor 1 C1 = -20 2 C2 = -15 3 C3 = -10 4 ... 5 C13 = 40 Abraham Zamudio 121 / 182
  112. Las listas son objetos para almacenar una secuencia de cosas

    (objetos) Pero es tonto y aburrido si es que tenemos muchos valores.Lo mejor es tener un conjunto de valores recolectados en una lista. 1 C = [-20, -15, -10, -5, 0, 5, 10, 15, 20, 25, 30, 35, 40] Una lista es una estructura de datos en Python que es una se- cuencia de elementos ordenada y modificable (mutable). Cada elemento o valor que está dentro de una lista se llama un item. Al igual que las cadenas se definen como caracteres entre comillas, las listas se definen al tener valores entre corchetes []. Definicion de Listas Definicion de Listas Abraham Zamudio 122 / 182
  113. Operaciones con listas: inicializacion e indexado Se inicializa con corchetes

    y coma entre cada uno de los objetos: 1 L1 = [-91, 'a string', 7.2, 0] Los elementos son accesados via indices : L1[3] (indice = 3).EL conjunto de indices empiezan en cero : 0,1,2,...,len(L1)-1. 1 mylist = [4, 6, -3.5] 2 3 print(mylist[0]) 4 5 print(mylist[1]) 6 7 print(mylist[2]) 8 9 len(mylist) Abraham Zamudio 123 / 182
  114. Operaciones con listas : append,extend,insert,delete 1 C = [-10, -5,

    0, 5, 10, 15, 20, 25, 30] 2 3 C.append(35) # agrega el elemento 35 al final 4 5 C = C + [40, 45] # extiende C 6 7 C.insert(0, -15) # inserta -15 en el indice 0 8 9 del C[2] # borra el tercer elemento Abraham Zamudio 124 / 182
  115. Operaciones con listas : búsqueda de elementos , indices negativos

    1 C.index(10) # indice del primer elemento con valor 10 2 3 10 in C # 10 es un elemento en C? 4 5 C[-1] # el ultimo elemento de la lista 6 7 C[-2] # el penultimo elemento de la lista 8 9 somelist = ['book.tex', 'book.log', 'book.pdf'] 10 11 texfile, logfile, pdf = somelist # asignacion directa Abraham Zamudio 125 / 182
  116. Operaciones con listas : Modificando listas con operadores (I) Los

    operadores pueden ser utilizados para hacer modificaciones a las listas. Veamos cómo utilizar los operadores + y *. 1 # El operador + se puede utilizar para concatenar 2 # dos o más listas 3 sea_creatures = ['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone'] → 4 oceans = ['Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic'] 5 6 print(sea_creatures + oceans) Abraham Zamudio 126 / 182
  117. Operaciones con listas : Modificando listas con operadores (II) El

    operador * se puede utilizar para multiplicar listas. Quizás necesite hacer copias de todos los archivos de un directorio en un servidor o compartir una lista de reproducción con amigos; en estos casos, deberá multiplicar las colecciones de datos. 1 print(sea_creatures * 2) 2 print(oceans * 3) Abraham Zamudio 127 / 182
  118. Operaciones con listas : Función enumerate() La función enumerate() permite

    iterar sobre los indices y los elementos de una lista. 1 alist = ['a1', 'a2', 'a3'] 2 3 for i, a in enumerate(alist): 4 print(i, a) Abraham Zamudio 128 / 182
  119. Operaciones con listas : Función zip() La funcion zip() permite

    iterar sobre dos listas en paralelo 1 alist = ['a1', 'a2', 'a3'] 2 blist = ['b1', 'b2', 'b3'] 3 4 for a, b in zip(alist, blist): 5 print(a, b) Abraham Zamudio 129 / 182
  120. Operaciones con listas : enumerate + zip Aquí se explica

    cómo iterar sobre dos listas y sus índices usando enumerate junto con zip: 1 alist = ['a1', 'a2', 'a3'] 2 blist = ['b1', 'b2', 'b3'] 3 4 for i, [a, b] in enumerate(zip(alist, blist)): 5 print(i, a, b) Abraham Zamudio 130 / 182
  121. Bucle sobre los elementos de una lista con una estructura

    for Usamos una estructura for para recorrer una lista y procesar cada elemento. 1 degrees = [0, 10, 20, 40, 100] 2 for C in degrees: 3 print('Grados celsius:', C) 4 F = 9/5.*C + 32 5 print('Fahrenheit:', F) 6 print ('La lista tiene', len(degrees), 'elementos') Visualizacion de le ejecucion Como con la estructura while, las sentencias dentro de for estan indentadas. Abraham Zamudio 131 / 182
  122. Simulamos el bucle a mano 1 degrees = [0, 10,

    20, 40, 100] 2 for C in degrees: 3 print(C) 4 print ('La lista tiene', len(degrees), 'elementos') Primer paso : C = 0 segundo paso : C = 10 y así tercer paso : C = 20 y así quinto paso : C = 100, ahora el bucle for termina y el flujo del programa salta a la primera sentencia con la misma indentación que la sentencia for : for C in degrees: Abraham Zamudio 132 / 182
  123. Creando una tabla con el bucle for 1 Cdegrees =

    [-20, -15, -10, -5, 0, 5, 10, 15,20, 25, 30, 35, 40] 2 for C in Cdegrees: 3 F = (9.0/5)*C + 32 4 print( C, F) Note que print( C, F) tiene una salida no muy precisa, usemos lo que ya vimos de la funcion print para formatear las dos columnas. 1 Cdegrees = [-20, -15, -10, -5, 0, 5, 10, 15,20, 25, 30, 35, 40] 2 for C in Cdegrees: 3 F = (9.0/5)*C + 32 4 #print( C, F) 5 print ('%5d %5.1f' % (C, F)) Abraham Zamudio 133 / 182
  124. Un bucle for siempre se puede traducir a un bucle

    while 1 # bucle for 2 for elemento in algunaLista: 3 # procesa elemento 4 5 # siempre se puede transformar en un while 6 indice = 0 7 while indice < len(algunaLista): 8 elemento = algunaLista[indice] 9 # procesa elemento 10 indice += 1 Pero no todo bucle while se puede expresar como un bucle for. Abraham Zamudio 134 / 182
  125. Version que usa while para crear la tabla 1 Cdegrees

    = [-20, -15, -10, -5, 0, 5, 10,15, 20, 25, 30, 35, 40] 2 index = 0 3 while index < len(Cdegrees): 4 C = Cdegrees[index] 5 F = (9.0/5)*C + 32 6 print( '%5d %5.1f' % (C, F)) 7 index += 1 Abraham Zamudio 135 / 182
  126. Implementacion de una sumatoria via un bucle for S =

    N i=1 i2 1 N = 14 2 3 S = 0 4 for i in range(1, N+1): 5 S += i**2 6 7 # otra forma (menos comun): 8 S = 0 9 i = 1 10 while i <= N: 11 S += i**2 12 i += 1 13 14 # Las sumatorias aparecen con frecuencia, asi que recuerda 15 # la implementacion. Abraham Zamudio 136 / 182
  127. Almacenando la tabla de grados celsius-fahrenheit en una lista Pongamos

    los valores de los grados fahrenheit en una lista: 1 Cdegrees = [-20, -15, -10, -5, 0, 5, 10,15, 20, 25, 30, 35, 40] 2 Fdegrees = [] # empezamos con una lista vacia 3 for C in Cdegrees: 4 F = (9.0/5)*C + 32 5 Fdegrees.append(F) # agregamos el nuevo elemento a Fdegrees 6 print(Fdegrees) Visualizacion de le ejecucion Abraham Zamudio 137 / 182
  128. Bucle for sobre una lista de indices 1 for elemento

    in algunaLista: 2 # procesa elemento 3 4 # de manera alternativa podemos iterar sobre 5 # los indices de la lista 6 7 for i in range(0, len(algunaLista), 1): 8 element = algunaLista[i] 9 # procesa elemento (algunaLista[i]) directamente help(range) Abraham Zamudio 138 / 182
  129. ¿Como podemos cambiar los elementos de una lista? Digamos que

    queremos sumar 2 a todos los elementos de una lista 1 v = [-1, 1, 10] 2 for e in v: 3 e = e + 2 4 v # [-1, 1, 10] no a sufrido cambios Abraham Zamudio 139 / 182
  130. Cambiar un elemento de lista requiere asignación de índices Dentro

    del bucle, e es un ordinario entero,la primera vez toma el valor de -1,la siguiente vez toma el valor de 1 y termina tomando el valor de 10, sin embargo la lista (v) permanece sin cambios. Solucion : Hay que indexar los elementos de la lista para cambiar sus valores. 1 v = [-1, 1, 10] 2 for i in range(len(v)): 3 v[i] = v[i] + 2 4 v Abraham Zamudio 140 / 182
  131. Enumeracion de Listas : Creacion compacta de listas Ejemplo :

    Calculo de dos listas en un bucle for 1 n = 16 2 Cdegrees = [];Fdegrees = [] # empty lists 3 for i in range(n): 4 Cdegrees.append(-5 + i*0.5) 5 Fdegrees.append((9.0/5)*Cdegrees[i] + 32) Python tiene una forma compacto de construir listas, usando bucles for: 1 Cdegrees = [-5 + i*0.5 for i in range(n)] 2 Fdegrees = [(9.0/5)*C + 32 for C in Cdegrees] Forma general 1 algunaLista = [expresion for elemento in algunaLista] donde expresion involucra a elemento. Abraham Zamudio 141 / 182
  132. Demostracion interactiva de enumeracion de listas 1 n = 4

    2 Cdegrees = [-5 + i*2 for i in range(n)] 3 Fdegrees = [(9.0/5)*C + 32 for C in Cdegrees] Visualizacion de le ejecucion Abraham Zamudio 142 / 182
  133. Listas anidadas : Listas de listas Una lista puede contener

    cualquier objeto, inclusive otra lista. En lugar de almacenar una tabla como dos listas separadas (una para cada columna) podemos unir las dos listas en una nueva lista. 1 Cdegrees = range(-20, 41, 5) 2 Fdegrees = [(9.0/5)*C + 32 for C in Cdegrees] 3 table1 = [Cdegrees, Fdegrees] # lista de dos listas 4 print (table1[0]) # la lista Cdegrees 5 print () 6 print (table1[1]) # la lista Fdegrees 7 print() 8 print (table1[1][2]) # El 3er elemento en Fdegrees Abraham Zamudio 143 / 182
  134. Columnas vs. Filas En el slide anterior, tabla1 es una

    tabla de dos columnas. Hagamos una tabla de filas, cada fila es un par [C,F] 1 table2 = [] 2 for C, F in zip(Cdegrees, Fdegrees): 3 row = [C, F] 4 table2.append(row) 5 # mas compacyto con enumeracion de lista 6 table2 = [[C, F] for C, F in zip(Cdegrees, Fdegrees)] Iteracion sobre una lista anidad : 1 for C, F in table2: 2 # tranaja con C y F desde una fila en tabla2 3 # o 4 for row in table2: 5 C, F = row 6 ... Abraham Zamudio 144 / 182
  135. Extrayendo sublistas (slices) Podemos tomar facilmente partes de una lista

    1 A = [2, 3.5, 8, 10] 2 3 A[2:] # desde el indice 2 hasta el final de la lista 4 5 A[1:3] # desde el indice 1 hasta, sin incluir, el indice 3 6 7 A[:3] # desde el inicio hasta, sin incluir, el indice 3 8 9 A[1:-1] # desde el indice 1 hasta ,sin incluir,el ultimo elemento → 10 11 A[:] # la lista completa 12 13 # Nota que las sublistas (slices) son copias 14 # de la lista original Abraham Zamudio 147 / 182
  136. Que hace el siguiente fragmento de codigo ? 1 Cdegrees

    = range(-20, 41, 5) 2 Fdegrees = [(9.0/5)*C + 32 for C in Cdegrees] 3 table2 = [[C, F] for C, F in zip(Cdegrees, Fdegrees)] 4 for C, F in table2[Cdegrees.index(10):Cdegrees.index(35)]: 5 print('%5.0f %5.1f' % (C, F)) Es un bucle for sobre una sublista de table2. Indices de la sublista : Cdegrees.index(10):Cdegrees.index(35), es decir, los indices corresponden a los elementos 10 y (sin incluir) 35 1 10 50.0 2 15 59.0 3 20 68.0 4 25 77.0 5 30 86.0 Abraham Zamudio 148 / 182
  137. Que hace el siguiente fragmento de codigo ? 1 Cdegrees

    = range(-20, 41, 5) 2 Fdegrees = [(9.0/5)*C + 32 for C in Cdegrees] 3 table2 = [[C, F] for C, F in zip(Cdegrees, Fdegrees)] 4 for C, F in table2[Cdegrees.index(10):Cdegrees.index(35)]: 5 print('%5.0f %5.1f' % (C, F)) Es un bucle for sobre una sublista de table2. Indices de la sublista : Cdegrees.index(10):Cdegrees.index(35), es decir, los indices corresponden a los elementos 10 y (sin incluir) 35 1 10 50.0 2 15 59.0 3 20 68.0 4 25 77.0 5 30 86.0 Abraham Zamudio 148 / 182
  138. Listas anidadas (I) La idea básica de una lista anidada

    es que usted tiene, esencialmente, una lista compuesta de listas. Por ejemplo: 1 L1 = [1,2] 2 L2 = [[1,2,3],[4,5,6]] Del ejemplo anterior, podemos ver que L1[0] es igual a 1, y L1[1] es igual a 2. En una lista anidada, como L2, el primer elemento de la lista, es una lista sí mismo. Entonces, L2[0] es la lista de [1,2,3], y L2[1] es la lista de [4,5,6]. Comprender este punto es vital para entender el siguiente slide. Abraham Zamudio 149 / 182
  139. Listas anidadas (II) Al pedir un elemento específico en una

    lista, decimos: L1[x], donde x es el elemento deseado. Pero, ¿qué decimos cuando queremos un elemento específico de una lista anidada? Nosotros decimos: L1[x][y]. Esto es más fácil de mostrar que de explicar, así que aquí hay un ejemplo: 1 L1 = [ 1, [73,89,42,32], 62, [24, 32], 99 ] En este ejemplo, L1[0] tiene el valor de 1, pero L1[1] tiene el valor de [73,89,42,32]. Desde aquí, actuaremos exactamente como si estuviéramos obteniendo un elemento de una lista no anidada, con una sola diferencia. Vamos a agregar otro conjunto de corchetes. Ejemplo: 1 L1[1] = [73,89,42,32] 2 L1[1][0] = 73 3 L1[1][1] = 89 Abraham Zamudio 150 / 182
  140. Las tuplas Tupla es una colección de objetos de Python

    como una lista. La secuencia de valores almacenados en una tupla puede ser de cualquier tipo, y están indexados por números enteros. La difer- encia importante entre una lista y una tupla es que las tuplas son inmutables. Los valores de una tupla están separados sintácti- camente por "comas". Aunque no es necesario, es más común definir una tupla cerrando la secuencia de valores entre paréntesis. Esto ayuda a entender las tuplas de Python más fácilmente. Definicion de Tuplas Definicion de Tuplas Las tuplas son inmutables y, por lo general, contienen una secuencia de elementos heterogéneos a los que se accede mediante desempaquetado o indexación (o incluso por atributo en el caso de tuplas con nombre). Abraham Zamudio 151 / 182
  141. Otro tipo de dato : Las tuplas Las tuplas son

    listas constantes (no pueden mutar o cambiar) 1 t = (2, 4, 6, 'temp.pdf') # definimos una tupla 2 t = 2, 4, 6, 'temp.pdf' # podemos obviar los parentesis 3 4 t[1] = -1 5 Traceback (most recent call last): 6 File "<ipython-input-99-593c03edf054>", line 1, in <module> 7 t[1] = -1 8 TypeError: 'tuple' object does not support item assignment 9 10 t.append(0) 11 Traceback (most recent call last): 12 File "<ipython-input-100-027f59be7fb0>", line 1, in <module> 13 t.append(0) 14 AttributeError: 'tuple' object has no attribute 'append' 15 16 17 del t[1] 18 Traceback (most recent call last): 19 File "<ipython-input-101-77cea8bc7ee1>", line 1, in <module> 20 del t[1] 21 TypeError: 'tuple' object doesn't support item deletion Abraham Zamudio 152 / 182
  142. Nota sobre las tuplas (I) La creación de tuplas en

    Python sin el uso de paréntesis se conoce como Tuple Packing. 1 # Creacion de una tupla vacia 2 Tuple1 = () 3 print("Tupla inicial vacia: ") 4 print (Tuple1) 5 6 # Creacion de una tupla con el uso de cadenas de caracteres 7 Tuple1 = ('novato', 'data') 8 print("\nTupla con el uso de cadenas de caracteres (Strings) ") 9 print(Tuple1) 10 11 # Creando una tupla con el uso de listas 12 list1 = [1, 2, 4, 5, 6] 13 print("\nTupla usando listas []: ") 14 print(tuple(list1)) Abraham Zamudio 153 / 182
  143. Nota sobre las tuplas (II) 1 # Creación de una

    tupla con el uso de la función incorporada 2 Tuple1 = tuple('Simulacion') 3 print("\nTupla con el uso de una funcion") 4 print(Tuple1) 5 6 # Creacion de una tupla con datos heterogeneos 7 Tuple1 = (1, 'CTIC', 8, 'UNI') 8 print("\nTupla con datos heterogeneos ") 9 print(Tuple1) 10 11 # Creacion de una tupla anidada 12 Tuple1 = (1, 0, 1, "A") 13 Tuple2 = ('Data', 'Science') 14 Tuple3 = (Tuple1, Tuple2) 15 print("\nTupla anidada: ") 16 print(Tuple3) 17 18 # Creacion de una tupla con repeticiones 19 Tuple1 = ('Geeks',) * 3 20 print("\nTuple with repetition: ") 21 print(Tuple1) Abraham Zamudio 154 / 182
  144. Tuplas : listas inmutables Las tuplas pueden hacer mucho de

    lo que las listas pueden hacer: 1 t = t +(-1.0, -2.0) # juntamos dos tuplas 2 t 3 t[1] # son indexadas 4 t[2:] #subtuplas (slices) 5 6 in t # pertenencia Abraham Zamudio 155 / 182
  145. Funcionalidad : Tuplas vs. Listas Las tuplas son inmutables (constantes)

    y por lo tanto estan protegidas de cambios accidentales. Las tuplas son mas rapidas que las listas. Las tuplas son ampliamente utilizadas en software desarrollado con python. Las tuplas (pero no las listas) se pueden usar como claves (keys) en otra estructura de dato llamada diccionarios. Abraham Zamudio 156 / 182
  146. Concatenación de tuplas La concatenación de la tupla es el

    proceso de unión de dos o más tuplas. La concatenación se realiza mediante el uso del operador "+". La concatenación de las tuplas se realiza siempre desde el final de la tupla original. Otras operaciones aritméticas no se aplican en las tuplas. Nota: solo se pueden combinar los mismos tipos de datos con la concatenación; se produce un error si se combinan una lista y una tupla. 1 # Concatenacion de tuplas 2 Tuple1 = (0, 1, 2, 3) 3 Tuple2 = ('Math', 'For', 'DS') 4 Tuple3 = Tuple1 + Tuple2 5 6 # IMprimiendo la Tupla3 7 print("\nTuplas despues de la concatenacion: ") 8 print(Tuple3) Abraham Zamudio 157 / 182
  147. Slicing de tuplas El slicing de una tupla se realiza

    para obtener un rango específico o una porción de subelementos de una tupla. El slicing también se puede hacer a listas y matrices. La indexación en una lista da como resultado la obtención de un único elemento, mientras que la opción de segmentación permite obtener un conjunto de elementos. 1 Tuple1 = tuple('DATASCIENCEFORBUSINESS') 2 3 # Removiendo el primer elemento 4 print("Removal of First Element: ") 5 print(Tuple1[1:]) 6 7 # Invirtiendo el orden 8 print("\nOrden invertido de los elementos de la tupla: ") 9 print(Tuple1[::-1]) 10 11 # imprimiendo los elementos en un rango determinado 12 print("\nElementos entre 4-9: ") 13 print(Tuple1[4:9]) Abraham Zamudio 158 / 182
  148. Ejercicio 6 En una baraja de cartas, cada carta es

    una combinación de un rango y un palo. Hay 13rangos: as (A), 2, 3, 4, 5, 6, 7, 8, 9, 10, jack (J), reina (Q), rey (K) y cuatro símbolos: palos (C), diamantes (D), corazones (H) y espadas (S). Una tarjeta típica puede ser D3. Escriba las sentencias que generen un mazo de cartas, es decir, todas las combinaciones CA, C2, C3, etc. a SK. Abraham Zamudio 159 / 182
  149. Ejercicio 7 Calcular combinaciones. Considere un número de identificación que

    consta de dos letras y tres dígitos, por ejemplo, RE198. Cómo podemos tener todas las combinaciones diferentes, y cómo puede un programa generar todos estos combinaciones? Si una colección de n cosas puede tener m1 variaciones de la primera cosa, m2 de la segunda y así sucesivamente, el número total de variaciones de la colección es igual a m1 * m 2 ... * mn.En particular, el número de ID ejemplificado anteriormente puede tener 26 * 26 * 10 * 10 * 10 = 676000 variaciones Para generar todas las combinaciones, debemos tener cinco bucles anidados.Los dos primeros pasan sobre todas las letras A, B, y así sucesivamente hasta Z, mientras que los tres siguientes pasan sobretodos los dígitos 0; 1; ... ; 9. Nota : Use string.ascii_uppercase perteneciente al modulo string Abraham Zamudio 160 / 182
  150. Otro tipo de dato : Los diccionarios En estos ultimos

    slides se aborda muchas técnicas para interpretar información en archivos y almacenar los datos en objetos prácticos de Python para un análisis de datos. Un objeto particularmente útil para muchos propósitos es el diccionario, que mapea objetos en objetos, muy a menudo se conecta a varios tipos de datos que luego se pueden buscar a través de las cadenas (strings). Hasta ahora hemos almacenado información en varios tipos de objetos, como números, cadenas, listas, tuplas. Un diccionario es un objeto muy flexible para almacenar diversos tipos de información, y en particular al leer archivos. Por lo tanto, es hora para introducir el diccionario. Creacion de diccionarios : temperaturas en ciudades 1 # cada elemento se escribe de la forma llave:valor 2 temps = {'Oslo': 13, 'London': 15.4, 'Paris': 17.5} 3 # o 4 temps = dict(Oslo=13, London=15.4, Paris=17.5) Abraham Zamudio 161 / 182
  151. Diccionarios Agregar nuevos elementos 1 temps['Madrid'] = 26.0 2 3

    temps['Lima'] = 28.0 4 5 temps['Huancayo'] = 13.5 6 7 temps['Piura'] = 35.9 8 9 temps['Paita'] = 32.8 10 11 12 print(temps) Abraham Zamudio 162 / 182
  152. Diccionarios Los diccionarios (o dict en Python) son una forma

    de almacenar elementos tal como lo haría en una lista de Python. Pero, en lugar de acceder a elementos utilizando su índice, le asigna una llave fija y accede al elemento utilizando la llave. De lo que ahora se trata es de un par "llave-valor", que a veces es una estructura de datos más apropiada para muchos problemas en lugar de una simple lista. A menudo tendrás que lidiar con los diccionarios cuando hagas ciencia de datos, lo que hace que la comprensión del diccionario sea una habilidad que querrás dominar. Abraham Zamudio 163 / 182
  153. Diccionarios Un diccionario en Python es una colección de elementos

    a los que se accede por una llave específica en lugar de un índice. ¿Qué significa esto? Cuando necesita buscar el significado de una palabra, trata de encontrar el significado utilizando la palabra en sí y no el posible índice de la palabra. Los diccionarios en Python funcionan con el mismo concepto, la palabra cuyo significado está buscando es la llave y el significado de la palabra es el valor, no necesita cono- cer el índice de la palabra en un diccionario para encontrar su significado. Imagine un diccionario en el mundo real ... Imagine un diccionario en el mundo real ... Abraham Zamudio 164 / 182
  154. Diccionarios : Operaciones La cadena city hace las veces del

    indice en una estructura vectorial (como las listas, tuplas, vectores , etc) y para acceder al valor lo hacemos de manera simular a las anteriores estructuras vectoriales. For para barrer todos los valores por medio de las llaves 1 for city in temps: 2 print('La temperatura en %s is %g' % (city, temps[city])) Podemos verificar si una llave (key) esta presente en una variable de tipo diccionario haciendo uso de una estructura de decision IF If para verificar 1 if 'Berlin' in temps: 2 print('Berlin:', temps['Berlin']) 3 else: 4 print('NO hay datos para Berlin') Abraham Zamudio 165 / 182
  155. Diccionarios : Operaciones Operaciones booleanas con diccionarios 1 'Tacna' in

    temps 2 # debe retornar False como resultado de la consulta Las llaves (keys) y los valores pueden ser extraidos como listas a partir del diccionario. 1 temps.keys() 2 3 temps.values() Abraham Zamudio 166 / 182
  156. Diccionarios : Operaciones Se puede ordenar las llaves 1 #

    podemos mostrar como se creo el diccionario : 2 for city in temps: 3 print(city) 4 5 # o mostrar las llaves de manera ordenada : 6 for city in sorted(temps): 7 print(city) Borrar un par clave:valor (Comando del) 1 len(temps) 2 del temps['Oslo'] 3 print(temps) 4 len(temps) Abraham Zamudio 167 / 182
  157. Diccionarios : Operaciones Copia de diccionarios 1 temps_copy = temps.copy()

    2 3 del temps_copy['Paris'] 4 # esto no afecta el diccionarios original :temps 5 6 temps_copy 7 8 temps Si dos variables hacen referencia al mismo diccionario (Copia sin usar el metodo .copy) 1 t1 = temps 2 t1['Stockholm'] = 10.0 # cambiamos t1 3 t1 4 temps # temps tambien cambio Abraham Zamudio 168 / 182
  158. Dictionary Comprehension Dictionary comprehension es un método para transformar un

    diccionario en otro diccionario. Durante esta transformación, los elementos dentro del diccionario original se pueden incluir condicionalmente en el nuevo diccionario y cada elemento se puede transformar según sea necesario. Una buena list comprehension puede hacer que su código sea más expresivo (intuitivo) y, por lo tanto, más fácil de leer e interpretar. La clave para crear comprehensions es no dejar que se vuelvan tan complejas que nuestra cabeza comience a girar cuando intentas descifrar lo que realmente esta haciendo. Mantener viva la idea de fácil de leer. Abraham Zamudio 169 / 182
  159. Dictionary Comprehension La forma de hacer un dictionary comprehension en

    Python es poder acceder a los objetos llave y a los objetos valor de un diccionario.Para ello tenemos los métodos keys() values() Por ejemplo : 1 dict1 = {'a': 1, 'b': 2, 'c': 3, 'd': 4} 2 dict1.keys() 3 dict1.values() Abraham Zamudio 170 / 182
  160. Dictionary Comprehension Copia de diccionarios Entonces, ahora que sabe cómo

    acceder a todas las llaves (Algunos autores usan la palabra clave para referirse a las llaves)) y sus valores en un diccionario. También puede acceder a cada par llave-valor dentro de un diccionario utilizando el método items (): 1 dict1.items() Abraham Zamudio 171 / 182
  161. Dictionary Comprehension Copia de diccionarios Esta es la plantilla general

    que puede seguir para hacer un dictionary comprehension en python : 1 dict_variable = {key:value for (key,value) in dictonary.items()} Esto puede servir como la plantilla básica y más simple. Esto puede volverse cada vez más complejo a medida que le agregue condicionalidades. Abraham Zamudio 172 / 182
  162. Dictionary Comprehension Comencemos con un simple ejemplo de dictionary comprehension

    : 1 dict1 = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5} 2 3 double_dict1 = {k:v*2 for (k,v) in dict1.items()} 4 5 print(double_dict1) En el código de comprehension anterior, se crea un nuevo diccionario double_dict1 a partir de un diccionario dict1 simplemente duplicando cada valor en él. Abraham Zamudio 173 / 182
  163. Dictionary Comprehension También puede realizar cambios en los valores de

    las llaves. Por ejemplo, creemos el mismo diccionario que el anterior pero también cambiemos los nombres de las llaves. 1 dict1_keys = {k*2:v for (k,v) in dict1.items()} 2 3 print(dict1_keys) Abraham Zamudio 174 / 182
  164. Dictionary Comprehension Los bucles For se utilizan para repetir una

    determinada operación o un bloque de instrucciones en un programa durante un número determinado de veces. Sin embargo, los bucles anidados (un bucle for dentro de otro bucle for) pueden ser confusos y complejos. Dictionary Comprehension es mejor en tales situaciones y puede simplificar la legibilidad y comprensión del código. Abraham Zamudio 175 / 182
  165. Agregando condicionales a los Dictionary Comprehension A menudo necesita agregar

    condiciones a una solución mientras aborda problemas. Exploremos cómo puedes agregar condicionales al Dictionary Comprehension para hacerlo más poderoso. Con un condicional if : Supongamos que necesita crear un nuevo diccionario a partir de un diccionario dado pero con elementos que son mayores que 2. Esto significa que necesita agregar una condición a la plantilla original 1 dict1 = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5} 2 3 dict1_cond = {k:v for (k,v) in dict1.items() if v>2} 4 5 print(dict1_cond) Abraham Zamudio 176 / 182
  166. Agregando condicionales a los Dictionary Comprehension Con múltiples condicionales if

    :En el problema anterior, ¿qué sucede si tiene que obtener no solo los elementos mayores que 2 sino también verificar si son múltiplos de 2 al mismo tiempo? 1 dict1_doubleCond = {k:v for (k,v) in dict1.items() if v>2 if v%2 == 0} → 2 print(dict1_doubleCond) La solución para agregar múltiples condicionales es tan fácil como simplemente agregar las condiciones una tras otra en su comprehension. Sin embargo, debe tener cuidado con lo que está tratando de hacer en el problema. Abraham Zamudio 177 / 182
  167. Agregando condicionales a los Dictionary Comprehension Veamos un ejemplo más

    con tres condicionales: 1 dict1 = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f':6} 2 3 dict1_tripleCond = {k:v for (k,v) in dict1.items() if v>2 if v%2 == 0 if v%3 == 0} → 4 5 print(dict1_tripleCond) Abraham Zamudio 178 / 182
  168. Agregando condicionales a los Dictionary Comprehension En un bucle for,

    esto corresponderá a: 1 dict1_tripleCond = {} 2 3 for (k,v) in dict1.items(): 4 if (v>=2 and v%2 == 0 and v%3 == 0): 5 dict1_tripleCond[k] = v 6 7 print(dict1_tripleCond) Abraham Zamudio 179 / 182
  169. Agregando condicionales a los Dictionary Comprehension Condicionales if-else : Tratar

    con una condición if-else también es fácil con el dictionary comprehension. Mira el siguiente ejemplo para verlo por ti mismo: 1 dict1 = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f':6} 2 3 # Identificar entradas pares e impares. 4 dict1_tripleCond = {k:('even' if v%2==0 else 'odd') for (k,v) in dict1.items()} → 5 6 print(dict1_tripleCond) Abraham Zamudio 180 / 182
  170. The Python Standard Library Review of python Basics The Python

    Tutorial Working with Lists and Dictionaries Tuples and Dictionaries What are the main data structures in Python? WRITING EFFICIENT PYTHON CODE Abraham Zamudio 182 / 182