<<

1

PythonTM CARLOS PEÑA ¿Qué es Python? 2

Python es un lenguaje de programación interpretado cuya filosofía hace hincapié en una sintaxis que favorezca un código legible.

 Se trata de un lenguaje de programación multiparadigma, ya que soporta orientación a objetos, programación imperativa y, en menor medida, programación funcional.  Es un lenguaje multiplataforma.  Posee una licencia de código abierto, denominada Python Software Foundation License, que es compatible con la Licencia pública general de GPL (General Public License) a partir de la versión 2.1.1.  El intérprete de Python estándar incluye un modo interactivo en el cual se escriben las instrucciones en una especie de intérprete de comandos: las expresiones pueden ser introducidas una a una, pudiendo verse el resultado de su evaluación inmediatamente. Historia de Python 3

• Su nombre se debe a la comedia 1969 británica Monty Python Flying Circus

• El holandés y creador Guido van Rossum publica el código. 1991 • Version 0.9.0

• Python 3.X 2009

Video Usos típicos de Python 4

 Web Development: , Pyramid, , , , web2py

 GUI Development: tkInter, PyGObject, PyQt, PySide, Kivy, wxPython

 Scientific and Numeric: SciPy, Pandas, IPython

: Buildbot, Trac, Roundup

 System Administration: Ansible, Salt, OpenStack Versiones de Python 5

Hasta la fecha (Julio 2017) existen dos versiones disponibles de Python: (descargables en www.python.org)

Python Python 2.X 3.X

Año de Año de lanzamiento lanzamiento 2000 2009

Ultima Ultima versión versión 2.7.13 3.6.2 ¿Cómo Trabajar con Python? 6

Se puede trabajar desde un archivo de texto Es necesario generado por un block de descargar alguna notas con extensión “.py”, •Sublime Text “.pyc”, “.pyd”, “.pyo” o (recomendado) versión de Python “.pyw” para luego •Block de notas desde la pagina ejecutarse en el símbolo de oficial e instalarla en sistema llamando previamente a Python. el sistema operativo

No es necesario (en la Se puede trabajar desde •ipython mayoría de los casos) algún paquete de •Spyder desarrollo en entorno tener instalada alguna Python. •Jupyter versión Python pues el desarrollador ya lo trae incluido Desarrolladores para Python 7

Locales

Es necesario instalarlos en nuestros ordenadores para poder ejecutarlos. Anaconda, Enthought Canopy, PyCharm, entre otros…

Onlines

Son ejecutables desde algún navegador web como Chrome, Safari… Codeskulptor, SourceLair, Codecademi, entre otros…

Portables

Pueden ser ejecutados desde un disco externo. WinPython, ZePyzo, entre otros… Librerías para Python 8 Algunas librerías mas comunes para la ingeniería son:

NumPy Bokeh np

SciPy as Bokeh

Math Numpy

Random

import MatplotLib Filosofía Python 9

Bello es mejor que feo. Explícito es mejor que implícito. Simple es mejor que complejo. Import Complejo es mejor que complicado. Plano es mejor que anidado. Disperso es mejor que denso. La legibilidad cuenta. this Los casos especiales no son tan especiales como para quebrantar las reglas. Lo práctico gana a lo puro. Los errores nunca deberían dejarse pasar silenciosamente. A menos que hayan sido silenciados explícitamente. Frente a la ambigüedad, rechaza la tentación de adivinar. Debería haber una -y preferiblemente sólo una- manera obvia de hacerlo. Aunque esa manera puede no ser obvia al principio a menos que usted sea holandés.15 Ahora es mejor que nunca. Aunque nunca es a menudo mejor que ya mismo. Si la implementación es difícil de explicar, es una mala idea. Si la implementación es fácil de explicar, puede que sea una buena idea. Los espacios de nombres (namespaces) son una gran idea ¡Hagamos más de esas cosas! Tipos de Datos 10 Tipo Clase Notas Ejemplo str Cadena Inmutable 'Cadena' unicode Cadena Versión Unicode de str u'Cadena' Mutable, puede list Secuencia contener objetos de [4.0, 'Cadena', True] diversos tipos Inmutable, puede tuple Secuencia contener objetos de (4.0, 'Cadena', True) diversos tipos Mutable, sin orden, no set([4.0, 'Cadena', set Conjunto contiene duplicados True]) Inmutable, sin orden, frozenset([4.0, frozenset Conjunto no contiene 'Cadena', True]) duplicados Grupo de pares {'key1': 1.0, 'key2': dict Mapping clave:valor False} Tipos de Datos 11 Tipo Clase Notas Ejemplo

Precisión fija, int Número entero convertido en long en 42 caso de overflow.

42L ó 45696678615198 long Número entero Precisión arbitraria 7643L

Coma flotante de float Número decimal 3.1415927 doble precisión

Parte real y parte complex Número complejo (4.5 + 3j) imaginaria j.

Valor booleano bool Booleano True o False verdadero o falso ¿Cuál versión de Python usaremos? 12

www.codeskulptor.org

Desarrollado en Texas, USA por Scott Python 2.X Rixner, Profesor de Rice University

Browser: Chrome, Posee las librerías Especial para la Safari, Mozilla. No OnLine necesarias para enseñanza compatible con comenzar Explorer Entorno Codeskulptor 13 URL: La ruta cambia cuando se presiona el botón de guardado Ejecutar: en este Documentación e botón se ejecuta información útil el código escrito acerca de en el editor funciones, librerías, estructuras, Guardado: en objetos. este botón se genera el URL único del código

Modo VIZ: es una Descarga: forma de correr el permite la programa paso a descarga del paso desglosando código al cada secuencia. ordenador Útil para hallar errores

Abrir: en este botón se abre el código guardado en el Demo: Contiene ordenador una buena cantidad de Refrescar: en ejemplos y códigos que pueden ser de este botón se Limpiar pantalla: en Pantalla de Pantalla de utilidad para el genera un nuevo este botón se limpia edición de ejecución de programador en URL para el la pantalla de comandos comandos código ejecución (derecha) etapa de aprendizaje Librerías Standard Modules 14 Disponibles Math Module Random Module en Collections Module – Default Dictionaries Codeskulptor Collections Module – Counters Regular Expression (re) Module Time Module Urllib2 Module

Graphics Modules SimpleGUI Module – Frame SimpleGUI Module – Control Objects SimpleGUI Module – Canvas SimpleGUI Module – TImers SimpleGUI Module – Images SimpleGUI Module – Sounds SimpleGUI Module – Constants SimpleGUI Module – Maps SimpleGUI Module – Markers SimpleGUI Module – Lines SimplePlot Module

Other Modules Numeric Module – Matrices CodeSkulptor Module

16

Python 2.7.13 SINTAXIS Y CONCEPTOS Nociones básicas 17

La representación de números en Python contempla los enteros, los decimales o punto flotantes:

 Enteros: Int >>> 1 -2 102

 Decimales: Float >>> 2.0 11.5 0.1334

 La function type() determina el tipo de objeto que se está manejando print type(4.0)

 La function int() convierte un número en entero mientras que float() lo convierte en decimal.

print int(4.7), float(-19) 4 -19.0 Nociones básicas 18

Para imprimir en pantalla en la version Python 2.X se dispone del comando print:

 Por ejemplo para imprimir en pantalla una cadena de caracteres (string) se hace uso de comillas dobles o simples:

print “hola” “hola” print ’hola’ ’hola’

 Si deseamos imprimir algún número o varios al mismo tiempo se tienen dos posibilidades:

1. Se colocan tantos print como datos diferentes se tengan

2. Se separan los datos a imprimir por comas (,) de esta forma se imprimiran los datos de forma independiente pero uno al lado del otro. print -3 -3 print 5, 8.5, -102 5 8.5 -102 Nociones básicas 19

 Para la definición de variables se tienen las siguientes reglas: 1. Se permite el uso de letras, números y underscore 2. No se puede comenzar un nombre con un número 3. Se distinguen minúsculas de mayúsculas 4. El símbolo “=“ le asigna el valor a la variable 5. Se puede modificar el valor de la variable a lo largo del código

Cierto_Falso=True print Cierto_Falso True Edad_Raul=12 print Edad_Raul 12

Los comentarios en python se hacen con el símbolo “#”. Todo lo que sea escrito en la linea de código después de “#” no será tomado en cuenta por Python. Nociones básicas 20

 Para la definición de variables se tienen las siguientes reglas (cont):

6. Se pueden definir más de una variable en una misma linea de código de la siguiente forma:

#Variable1, Variable2,…, VariableN = Valor_Var1, Valor_Var2,…, Valor_VarN #Por ejemplo: X,Y=1, 5 P, Q, Z = 9.8 , -4 , 9+3

print Y 5 print Z 12 print Q -4 print X 1

Notemos que deben haber tantos valores como variables. De lo contrario obtendremos un error en la ejecución. Otra forma para crear dos variables con iguales valores: A=B= -3.1416 Nociones básicas 21

Palabras reservadas para Python* And exec Not Assert finally or Break for pass Class from print Continue global raise def if return del import try elif in while else is with except lambda yield *Estas palabras no pueden ser usadas como identificadores (nombres) de variables Nociones básicas 22

Operadores elementales Operación Símbolo Ejemplo Suma, 푎 + 푏 + 6+11 Resta, 푎 − 푏 - 7-2 Producto, 푎. 푏 * -5*4 División, 푎 푏 / 4.0/3.0 o 4/3 División entera, 푎 푏 // 4.0//3.0 o 4//3 Potencia, 푎푏 ** 5**7 Resto de la división de a % 5%4 y b (módulo) a%b

Es importante destacar que Python en su versión 2.X arroja un valor entero de la división de dos enteros (por ejemplo 4/3=1), mientras que si al menos uno de los dos valores es decimal arrojará un valor decimal (por ejemplo 4.0/3 o 4/3.0 ambos=1.333333333). En la versión 3.X no es necesaria la distinción. Nociones básicas 23

Símbolo Operación > Mayor que >= Mayor o igual que

< Menor que Relacionales <= Menor o igual que == Igual que != Distinto que

<> Distinto que Operadores

Operador Descripción A and B Retorna True si ambas expresiones son verdaderas A or B Retorna True si A o B es verdadera

Lógicos not A Negado de A, retorna True cuando A es False y Operadores retorna False en el caso contrario. Nociones básicas 24

Operador Descripción Ejemplo A in B Retorna True si encuentra una A in B, aquí in resulta en True si variable en una secuencia A es un miembro de la especificada secuencia B

A not in B Retorna True si no encuentra A not in B, aquí not in resulta Operadores de de Miembros una variable en una en True si A no es un miembro secuencia especificada de la secuencia B

Operador Descripción Ejemplo A is B Retorna True si ambas A is B, aquí is resulta en True si expresiones son iguales id(A) es igual a id(B)

A is not B Retorna True si las expresiones A not is B, aquí is not resulta en Operadores

de de Identidad son diferentes True si id(A) no es igual al id(B) Nociones básicas 25 A B A and B Tablas de False False False comportamiento de los False True False operadores lógicos True False False True True True

Las tablas que aqui se presentan A B A or B tambien son conocidas como False False False tablas de la verdad. Es usual que en computacion el numero 1 False True True represente verdadero (True) y 0 True False True falso (False) True True True Python por tener una filosofía de A not A código legible usa las palabras del ingles True y False. True False False True Nociones básicas 26

 Regla de precedencia:

1. Paréntesis (), potencia **

2. Signo positivo +, signo negativo -, Multiplicación *, división /, modulo %

3. Suma +, Resta -

4. Menor que <, menor o igual que <=, mayor que >, mayor o igual que >=,

5. igual que ==, distinto que !=, distinto que <>

6. Es igual is, No es igual is not

7. Está en in, No está en not in

8. O or, Y and, negación not

print 1 + 1 > 2 False print 1 + (6.8 + 5 < 45) * 3 4 print not(1 + (6.8 + 5 < 45)) False print 33 < 3 or (1 > 2 ** 2 == 2) False Nociones básicas 27

 Algunas formas “cortas” que ofrece Python para ciertas operaciones como cuando definimos X=1, y dentro de un ciclo deseamos modificar el valor de “X” por si mismo mas alguna operacion como por ejemplo: X=X+1 o X=X*2

y = 2 y += 3 print "Ex. 0", y x = 5.0 x -= 2 Ex. 0: 5 print "Ex. 1", x Ex. 1: 3.0 x *= 5 Ex. 2: 15.0 print "Ex. 2:", x Ex. 3: 7.5 x /= 2 Ex. 4: 2.0 print "Ex. 3:", x Ex. 5: 16.0 x //= 3 print "Ex. 4:", x x **= 4 print "Ex. 5:", x Nociones básicas 28

 A menudo necesitamos seguir escribiendo una línea en la línea siguiente manteniendo la continuidad, esto se hace a través del carácter: (\)

Ejemplo= Item_A + Item_B + Item_C + \ Item_D + Item_E + \ Item_F + Item_G + \ Item_H + …

Operacion= 1 + \ 3*3 + \ 18 4*2 print Operacion

Obs: Es necesario introducir y mantener una identación en las líneas subsiguientes Cadena de Caracteres 29

¿Qué es una cadena de Caracteres? Una cadena de caracteres o String, es una secuencia ordenada de elementos que pertenecen a un lenguaje formal o a un alfabeto. Es el análogo a una oración. Es usado para dar mensajes o almacenar información escrita importante. Son secuencias no-mutables, es decir sus componentes (caracteres) no pueden ser modificados luego de haber sido almacenados en una variable. Para crear un string es necesario escribir dentro de comillas simples o dobles el mensaje deseado. Si el mensaje es abierto con comillas simples debe cerrarse con comillas simples. Ocurre lo mismo si se abre el mensaje con comillas dobles, entonces se tendrá que cerrar el mensaje con comillas dobles.

cadena=“Dinamica de Fluidos” Ejemplo2=“He’s my friend” cadena=‘Dinamica de Fluidos’ Ejemplo3=‘Ella dijo “Adios” al culminar’ Cadena de Caracteres 30

 Para acceder a una letra o entrada de una cadena de caracteres (string) en Python se tiene:

1. Una sola entrada string[indice] donde el índice para la primera entrada es 0 y la última el tamaño de la cadena. (Se puede hacer uso de la función len(str) si se desea conocer el tamaño de la cadena)

2. Si se desconoce el tamaño de la cadena se puede usar el índice string[-1] para obtener el último carácter de la cadena, string[-2] para la penúltima y así sucesivamente.

3. Si se desea tomar una fracción de la cadena (slide) se utiliza string[ini:fin] donde el primer número es el comienzo, el segundo es el final y el ultimo numero es el paso. Sin embargo, Python no tomara el carácter de la posición “fin” sino “fin-1”. Es un intervalo del tipo: [inicial,final) es decir cerrado al inicio y abierto al final. Cadena de Caracteres 31

 Para concatenar mensajes formados por cadena de caracteres (string) en Python se tiene:

1. Solo se pueden concatenar en una cadena de caracteres tipos de datos correspondientes a cadenas de caracteres

2. Por el contrario, sí queremos concatenar mensajes compuestos de cadena de caracteres puede hacerse por medio del símbolo “+”

3. Si se tienen datos que no sean Strings como enteros (int) o decimals (float) se puede emplear la function str(numero). La función str(numero) convierte un número en cadena de caracteres de esta forma logramos formar y concatenar el mensaje.

print “tengo”+” “+str(24)+” años” tengo 24 años

Cadena1=“Dinamica” Cadena2=“Fluidos” = Cadena1+ “ de ” +Cadena2 print C Dinamica de Fluidos Cadena de Caracteres 32

Para acceder a una letra o entrada de una cadena de caracteres (string) se tiene: Final n-1

Cadena[0:n:p]

Paso cadena=“Hello! How are Variable Inicio you?” print cadena[0] H print cadena[2] l print cadena[-1] ? print cadena[-3] o print cadena[0:4] Hel print cadena[3:-2] lo! How are yo print len(cadena) 17 print cadena[:6] Hello! print cadena[11:] are you? print cadena[:] Hello! How are you? Cadena de Caracteres 33

Para acceder a una letra o entrada de una cadena de caracteres (string) se tiene (Cont): Final n-1

Cadena[0:n:p]

Paso Variable Inicio cadena=“Hello! How are you?” print cadena[2:9:1] llo! How print cadena[::4] Hooro print cadena[2::6] lo print cadena[::4] Hooro print cadena[::-1] ?uoy era woH !olleH print cadena[-1:-6:-1] ?uoy print cadena[-6:0:-1] era woH !olle print cadena[-6::-1] era woH !olleH Cadena de Caracteres 34

Si deseamos generar un párrafo en forma cadena de caracteres (string) se tiene que hace uso de tres comillas dobles o simples [(“”” “””) (‘’’ ‘’’)]. Por ejemplo:

Parrafo=‘’’...No trata sino de fijarlos irrevocablemente en la infancia y quiere que los ciudadanos gocen, con tal de que no piensen sino en gozar. Trabaja en su felicidad, mas pretende ser el unico agente y el unico arbitro de ella, provee a su seguridad y a sus necesidades, facilita sus placeres, conduce sus principales negocios, dirige su industria, arregla sus sucesiones, divide sus herencias y se lamenta de no poder evitarles el trabajo de pensar y la pena de vivir... Alexis de Tocqueville. La democracia en America’’’

Obs: Nótese que en el texto se han omitido todas las tildes (acentuación) debido a que este tipo de caracteres generan conflictos con la versión manejada por CodeSkulptor. Colecciones de Datos 35

Al igual que los Strings existen otras secuencias Listas de datos que llamaremos colecciones Tuplas de datos. En Python existen tres tipos Diccionarios Colecciones de datos: Listas 36

 Es un tipo de colección ordenada de datos, equivalente a arreglos o vectores.

. Las listas pueden almacenar en cada uno de sus elementos: números (float and integers), strings, booleanos, tuplas, diccionarios y listas.

. Los elementos de las listas van encerrados entre corchetes y separados por comas

. Su tamaño puede ser modificado y al igual que el valor de cada una de sus componentes.

. Al igual que los strings anteriormente vistos sus componentes se manejan con el sistema de índices de la siguiente manera: Final n-1

Lista= [ elem1, elem2, …,elemN ] Lista[ 0 : n-1 : p ]

Paso (Opcional) Definición Elementos Variable Inicio de Variable de la lista Colecciones de datos: Listas 37

Veamos algunos ejemplos:

L=[5, 3, “Hello”, [9.55, -4], False] L2=L[0] L3=L[3][1] [5, 3, “Hello”, [9.55, -4], False] L4=L[-1] 5 L5=L[2:4] -4 L6=L[0:4:2] False L7=L[0::2] [“Hello”,[9.55,-4]] print L , L2, L3, L4, L5, L6, L7 [5,”Hello”] L[-1]=True [5,”Hello”,False] print L [5, 3, “Hello”, [9.55, -4], True] L[0:2]=[4] [4, “Hello”, [9.55, -4], True] print L

b=[4,3,{"clave1":[1,2,3], "clave2":True, 2:0.9},54,[4,5,76],(4,3,1),4] print b[2] print type(b[2]) print type(b)

{2: 0.9, 'clave1': [1, 2, 3], 'clave2': True} Colecciones de datos: Listas 38

 ¿Qué sucede si…?

. Deseo crear una referencia de una lista: a = [5, 3, 1, -1, -3, 5] b = a [0,3,1,-1,-3,5] b[0] = 0 [0,3,1,-1,-3,5] print a print b . Deseo crear una copia de una lista: a = [5, 3, 1, -1, -3, 5] b = list(a) b[0] = 0 [5,3,1,-1,-3,5] print a [0,3,1,-1,-3,5] print b . Deseo crear una lista a partir de una seguidilla de numeros. Por ejemplo: 2,4,6,8,10… se puede hacer desde la función: range(start, stop, step) L=range(2,14,2) [2,4,6,8,10,12,14] print list(L) Colecciones de datos: Tuplas 39

 Es un tipo de colección ordenada de datos, parecida a las listas con una diferencia notable: La inmutabilidad.

. Las tuplas pueden almacenar en cada uno de sus elementos: números (float and integers), strings, booleanos, tuplas, diccionarios y listas.

. Los elementos de las listas van encerrados entre paréntesis y separados por comas, aunque se puede prescindir del uso de paréntesis

. Las Tuplas tienen un tamaño fijo y sus valores no pueden ser modificados a diferencia de las listas. Son no-mutables.

. Para la “extracción” de valores de sus componentes se aplica la misma sintaxis de índices de las listas

T=(3, “Hello”, False) (3, “Hello”, False) T1=3, “Hello”, False (3, “Hello”, False) print T, T1 3 T2=T[0] print T2, type(T) Colecciones de datos: Diccionarios 40

 Los diccionarios o matrices asociativas es un tipo de colección de datos que posee las siguientes características:

1. No maneja índices para cada entrada como las listas o tuplas, en cambio maneja “claves”

2. El uso de llaves es imperativo “{ }”

3. A cada clave se le asigna un valor asociado.

4. Las claves deben estar separados por comas.

5. Como claves se puede usar cualquier tipo de elementos menos diccionarios o listas.

6. Los valores pueden ser modificados, sin embargo las claves no pueden

={“clave1”:[1,2,3], ”clave2”:True, 2:0.9} print d[“clave2”] True print d[2] 0.9 d[2]=False {“clave1”:[1,2,3], ”clave2”:True, 2:False} print d Funciones en Python 41

 Las Funciones son objetos que operan de la siguiente manera: Tomemos, por ejemplo, una función que calcule el área de un rectángulo

Instrucciones Base=2 SALIDAS a=2 Area=6 a*b=6

Altura=3 ENTRADAS b=3

Las funciones son cajas negras que pueden tener tantas entradas y salidas como se quiera y que ejecutan alguna acción que se definió en la concepción inicial de la función. Tienen la poderosa característica de poder ser “llamadas” en cualquier parte del código y cuantas veces se desee después de haberse definido. Python posee sus propias funciones como type, len, etc… y nos da la posibilidad de crear nuestraws propias funciones a las que el denomina las user-defined functions. Funciones en Python 42

 Funciones en Python (sintaxis):

Indica a Python que deseo definir Al igual que las variables tiene las mismas reglas para ser nombrada una nueva función De 0 a n argumentos de entrada def nombre_de_función(Arg1,Arg2,…,Argn): Operacion_ejemplo=Arg1+Arg2+…+Argn return Operacion_ejemplo Indica que Identación comenzará un nuevo Devuelve las salidas de la función obligatoria bloque de código

def Saludo(): def producto(a,b): print ‘hola’ Resultado=a*b return Resultado Saludo() Hola P=producto(4,5) 20 S=Saludo() None print P print S Funciones en Python 43

 Características de las Funciones:

1. ¿Qué sucede si llamamos a una función (que ha sido definida con al menos un parámetro de entrada) sin los argumentos de entrada? R= Python nos arrojará un error.

2. ¿Cómo evitar que esto suceda? R= la primera solución y la mas evidente: Escribir bien todos los parámetros de entrada en la llamada de la función. La segunda es predefinir los valores de los argumentos de entrada, para que en caso de no ser introducidos, la función les asigne un valor por defecto. Por ejemplo:

def producto(a=3,b=5): def Factorial_numero(numero): Resultado=a*b Factorial =1 print Resultado while numero > 0: Factorial *= numero P=producto(1) 5 numero -= 1 P=producto() 15 return Factorial Funciones en Python 44

 Características de las Funciones:

3. También podríamos al llamar a una función, definir los parámetros de entrada como parámetros de palabra clave. Es decir, se puede definir los argumentos de entrada en cualquier orden siempre que se haga referencia en cada entrada al nombre del parámetro tal como se expresa: def Funcion_ejemplo(Arg1,Arg2,Arg3,…,ArgN): Instrucciones

Funcion_ejemplo(Arg3=k3,ArgN=kN,Arg43=k43,…)

def producto(a,b,c): Resultado=a*b+c print Resultado

P=producto(c=3,a=2,b=2) 7 P=producto(b=3,c=2,a=2) 8 Funciones en Python 45

 Características de las Funciones:

3. Si además excedemos el numero de parámetros, python nos arrojara un error a menos que usemos un * en alguno de los argumentos. En este caso python asignara los valores demás a una tupla.

Si agregamos dos asteriscos ** le estaremos indicando a python que debe almacenar los datos en un diccionario en vez de una tupla. Es importante asignar la clave en la entrada correspondiente cuando la función sea llamada

def ejemplo(a,*b): 4 def ejemplo(a,**b): print a 50 print a for i in range(1,len(b)) 60 print b[“adicional1”] print b[i]*10 70 print b[“adicional2”] 4 80 Hi ejemplo(4,5,6,7,8,6) 60 ejemplo(4,adicional1=“hi”,adicional2=“bye”) bye Funciones en Python 46

 Características de las Funciones:

1. Pueden hacerse “llamadas” de funciones dentro de otras funciones

2. Las variables generadas dentro de su bloque de comando son locales, es decir, solo existen dentro de la función.

3. Son objetos que facilitan las operaciones recurrentes a lo largo de un código.

def ejemplo(a,*b): print a 4 for i in range(1,len(b)) 5 print b[i] 6 7 Mi_funcion = ejemplo 8 Mi_función(4,5,6,7,8,6) 6 Funciones en Python 47

Funciones anónimas (anonymous) También conocidas como funciones Lambda son funciones con declaraciones breves (no necesitan la declaración “def”). Algunas características son:

 Las formas lambda pueden tomar cualquier número de argumentos, pero devuelve un único valor en la forma de una expresión. No pueden contener comandos o múltiples expresiones.

 Una función anónima no puede ser una llamada directa a imprimir porque lambda requiere una expresión

 Las funciones lambda tienen su propio espacio de nombres local y no pueden acceder a variables que no sean los de su lista de parámetros y aquellos en el espacio de nombres global. Funciones en Python 48

 Características de las Funciones Lambda:

Nombre_Funcion = lambda Arg1,Arg2,…,ArgN: expresión

#Funcion_suma = lambda Arg1,Arg2,…,ArgN: Arg1+Arg2+…+Argn Funcion_suma = lambda a, b ,c ,d: a + b + c + d 13 Resultado = Funcion_suma(1,2,4,6) print Resultado

#Funcion_valor = lambda : valor Funcion_valor = lambda: 10 10 Resultado = Funcion_valor() print Resultado

#Funcion_formato = lambda sentencia: función o atributo ¿Qué Funcion_formato = lambda sentencia: ‘¿{}?’.format(sentencia) día es Resultado = Funcion_formato(‘Qué día es hoy’) hoy?’ print Resultado Funciones en Python 49

Funciones Anidadas: Es la definición de funciones dentro de otras funciones… Por ejemplo:

def nombre_función(arg1,arg2,…,argn): bloque de instrucciones def nombre_función_anidada1() bloque de instrucciones 2 return resultado def nombre_función_anidada2() bloque de instrucciones 2 return resultado2 print nombre_función_anidada1() print nombre_función_anidada2() Funciones en Python 50

Funciones Anidadas:

Ejemplo: def paridad(numero): """Funcion que determina si un numero es par o impar""" def comprobacion(): return numero>0

if comprobacion(): Docstring o def par_impar(): documentación resto=numero%2 de una función

return resto Siempre se if par_impar()==0: coloca en la print str(numero)+" es un numero par" primera línea luego del “def” else: de la función, print str(numero)+" es un numero impar" entre comillas else: dobles-triples print "Introduzca un numero mayor a cero“

paridad(0) Introduzca un numero mayor a cero paridad(66) 66 es un numero par paridad(5) 5 es un numero impar Funciones en Python 51

Algunas funciones útiles para cambiar los tipos de datos son: Función Descripción

int(x [,base]) Convierte x en un entero. de base especifica la base si x es una cadena.

long(x [,base] ) Convierte x en un entero largo. de base especifica la base si x es una cadena.

float(x) Convierte x para un número de coma flotante.

complex(real [,imag]) Crea un número complejo.

str(x) Convierte el objeto X a una representación de cadena.

repr(x) Convierte el objeto X a una cadena de expresión.

eval(str) Evalúa una cadena y devuelve un objeto.

tuple(s) Convierte s a una tupla. Funciones en Python 52

Algunas funciones útiles para cambiar los tipos de datos son:

Función Descripción

list(s) Convierte s a una lista.

set(s) Convierte s a un conjunto.

dict(d) Crea un diccionario. d debe ser una secuencia de (key,value) tuplas.

frozenset(s) Convierte s a un conjunto congelado.

chr(x) Convierte un entero a un personaje.

unichr(x) Convierte un entero a un carácter Unicode.

ord(x) Convierte un solo carácter a su valor entero.

hex(x) Convierte un entero a una cadena hexadecimal. Variables Globales y Locales 53

 Todas las variables en un programa pueden no ser accesibles en todos los lugares en ese programa. Esto depende de dónde se ha declarado una variable.  El alcance de una variable determina la parte del programa donde se puede acceder a un identificador particular. Hay dos ámbitos básicos de variables en Python • Variables globales • Variables locales Las variables que se definen dentro de un cuerpo de la función de tener un alcance local y los que se definen fuera de tener un alcance global. Esto significa que las variables locales sólo se puede acceder dentro de la función en la que se declaran, mientras que las variables globales se puede acceder a través del cuerpo programa de todas las funciones. Cuando se llama a una función, las variables declaradas dentro de él se ponen en alcance. Variables Globales y Locales 54

 Ejemplo:

def Cambio_gusto(): Mascotas_favoritas=‘Gatos’ Perros Mascotas_favoritas=‘Perros’ Perros print Mascotas_favoritas Cambio_gusto() print Mascotas_favoritas

def Cambio_gusto(): global Mascotas_favoritas Mascotas_favoritas=‘Gatos’ Perros Mascotas_favoritas=‘Perros’ Gatos print Mascotas_favoritas Cambio_gusto() print Mascotas_favoritas Estructuras de control 55

Las estructuras Selectivas o alternativas: son aquellas que de control son dirigen la ejecución de un programa aquellas que hacia un grupo de sentencias permiten dependiendo del resultado de una cambiar el flujo condicion. de ejecución de un Repetitivas o iterativas: Son aquellas que programa crean una repetición continua de un conjunto de instrucciones en la ejecución de un programa respecto de un grupo de Existen dos sentencias en función de una condición tipos… Estructuras de control: Selectivas 56

False  Estructuras de control: Condición 1. Selectivas: Permiten realizar una u otra operación según se cumpla o no una True determinada condición. Sentencias . Selección simple:

if (condición): Sentencia o bloque de instrucciones

False . Selección múltiple 1: Condición

if (condición): True Sentencia 1 o bloque de instrucciones 1 else: Bloque 1 Bloque 2 Sentencia 2 o bloque de instrucciones 2 Estructuras de control: Selectivas 57

 Estructuras de control:

1. Selectivas (continuación): True . Selección múltiple 2: Condición 1

False Bloque 1 if (condición): Sentencia 1 o bloque de instrucciones True elif (condición 2): Condición 2 Sentencia 2 o bloque de instrucciones 2 False else: Bloque 2 Sentencia 3 o bloque de instrucciones 3 Bloque 3

Permiten ejecutar uno u otro bloque de código de acuerdo a la condición satisfecha. Estructuras de control: Selectivas 58

 Condicionales if, elif y else:

Indica a Python que deseo Sentencia ejecutar un bloque de código si la sentencia es verdadera (True)

Identación if (result<=2)and(result!=0): obligatoria print 'Player wins!‘ elif (result==0): Indica que comenzará un Añade la posibilidad de print 'Player and Computer tie!' nuevo bloque de código considerar otra sentencia else: como un segundo, tercer, print 'Computer wins!' …, if Ejecuta un bloque de código cuando las sentencias del if o del (o los) elif NO fueron satisfechas (True)

Sólo se puede tener un “if” (el inicial) y un “else” (final) en un bloque condicional. Si se desean agregar otros bloques condicionales dentro del mismo bloque, serán usados tantos “elif” como se deseen. El “if” es obligatorio mientras que el “elif” y el “else” son opcionales. Estructuras de control: Selectivas 59

 Condicionales if, elif y else: Supongamos que deseamos por ejemplo ejecutar una orden cuando un valor (bien sea numero o letra) determinado se encuentre almacenado en una lista, string o una tupla… Podríamos usar la partícula “in” en la sentencia condicional del “if” para determinar si el valor existe dentro de alguna de estas: Lista=[2,5,9,0, 34,1,4.5,-1] Cadena='Programemos en python‘ Numero=5 if Numero in Lista: if ‘python' in Cadena: print ‘El numero esta en Lista‘ print ‘SI se encuentra la palabra' else: else: print ‘El numero NO esta en Lista’ print 'NO se encuentra la palabra'

Notemos que, el valor que arroja la particula “in” es un valor Booleano

Cadena='Programemos en python' print 'python' in Cadena True Estructuras de control: Selectivas 60

Ejemplo de estructuras de control selectivas: Estructuras de control: Repetitivas 61

 Estructuras de control:

2. Repetitivas: Permiten repetir las mismas operaciones o análogos sobre datos distintos.

. For: repite un conjunto de sentencias un numero predeterminado de veces

for i in range(0,n): for i in range(len(t)-1,-1,-1): Sentencia o bloque de Sentencia o bloque de instrucciones instrucciones

for

for i in vector de valores: for i in range(0,n): Sentencia o bloque de for j in range(0,m): instrucciones Sentencia o bloque de instrucciones Estructuras de control: Repetitivas 62

 Ciclos (loops) for y while:

Indica a Python que deseo ejecutar Variable a modificar por ciclo un ciclo donde la variable indicada se modifique en el intervalo señalado Indica donde será evaluado i Intervalo para i (comienzo, final) n=10 for i in range(1,n-1) : print ‘iteration= ‘+str(i) Identación obligatoria Indica que comenzará un nuevo bloque de código Desde Hasta

El ciclo for permite la variación de un parámetro dentro de un intervalo. En cada interacción la variable obtiene el valor siguiente dentro de los números contemplados dentro del intervalo. Pueden ser de uno en uno, de dos en dos, en cuenta regresiva, una lista con componentes predefinidas, entre otras. Estructuras de control: Repetitivas 63

 Ciclos (loops) for y while: Ejemplos: Lista=[] #Ejemplo 1 para generar una lista con valores entre 1 y 100 for valor in range(1,101) : Lista.append(valor) print valor

#Ejemplo 2 para generar una lista con valores entre 1 y 100 Lista=[valor for valor in range(1,101)]

#Ejemplo 2 para generar una lista con todos los numeros pares que existen entre 1 y 100 Lista=[valor for valor in range(1,101) if valor % 2 == 0]

#Ejemplo 2 para generar una lista con la frase: “100 palabras iguales” en sus 100 componentes

Lista=[“100 palabras iguales” for valor in range(1,101)] List comprehension Estructuras de control: Repetitivas 64

 Estructuras de control:

2. Repetitivas: Permiten repetir las mismas operaciones o análogos sobre datos distintos.

. While: Repite un conjunto de sentencias mientras haya algún o algunos elementos False “True”. El bucle se termina cuando todos los Condición elementos de condición retornan “False”. True

Bloque 1 while condición: sentencia o bloque de instrucciones 1 else: Sentencia o bloque de instruciones 2 Bloque 2 Estructuras de control: Repetitivas 65

 Ciclos (loops) for y while:

Indica a Python que deseo ejecutar un ciclo que se mantenga iterando Expresión a evaluar con datos Booleanos “mientras” la expresión que precede al while sea verdadera (True) tn=10 #criterio de parada num=0 #tiempo inicial while num

Ejecuta un bloque de código cuando la expresión del ciclo es Falsa

El ciclo While se mantiene iterando siempre y cuando la expresión que se coloca inicialmente sea siempre verdadera (True). Sin embargo, cuando esta expresión sea falsa (False) el ciclo terminará. Es importante destacar que siempre se debe verificar que el ciclo posea algún criterio de parada y pueda terminar el ciclo, de lo contrario seguirá iterando eternamente. Estructuras de control: Proposiciones 66

 break: 1. Se termina el bucle actual y reanuda la ejecución en la siguiente sentencia, al igual que la sentencia break tradicional en C. 2. El uso más común para la rotura es cuando alguna condición externa se activa requiere una salida False precipitada de un bucle. La break declaración Condición puede ser usada tanto en while y for bucles. True 3. Si está utilizando bucles anidados, la sentencia break se detiene la ejecución del bucle más interior e inicia la ejecución de la siguiente línea de código después Bloque 1 del bloque

Break while condicion: Bloque de instrucciones break Fin Estructuras de control: Proposiciones 67

 continue:

1. Se devuelve el control al comienzo del bucle while .. El “continue” comunicado rechaza todas las sentencias restantes en la iteración actual del bucle y mueve el control de nuevo a la parte superior False del bucle. Condición

2. La “continue” declaración puede ser True usada tanto en while y for bucles.

Bloque 1

Continue while condicion: Bloque de instrucciones continue

Fin Estructuras de control: Proposiciones 68

 pass:

1. Se utiliza cuando se requiere una declaración sintácticamente pero no quiere ningún comando o código a ejecutar.

2. El pass declaración es una null operación; no pasa nada cuando se ejecuta. El pass también es útil en lugares donde su código con el tiempo irán, pero no se ha escrito todavía.

3. Una utilidad puede ser en plantillas y espacios a ser rellenados posteriormente por otros programadores. Esto permite la ejecución del código sin generar errores por líneas vacías.

while condicion: pass Programación Orientada a Objetos 69

Programación orientada a objetos (POO): Es un paradigma de programación popularizado en los años 90’, en el que se usan objetos -y sus interacciones- para el desarrollo de programas.

Comencemos definiendo qué son las clases y los objetos… …Un Objeto es una entidad que posee características y acciones especificas. Las características del objeto son llamadas atributos mientras que las acciones que ejecuta el objeto son llamadas métodos. …Una Clase es la declaración de un objeto, es decir, la definición de un objeto es la clase. A menudo y a groso modo una case se puede ver como una plantilla o molde del cual proviene el objeto que vamos a crear. La creación de un objeto a partir de una clase es denominada Instanciación.

Por ejemplo… Creemos una clase y luego un objeto a partir de ella: Programación Orientada a Objetos 70

 Clases y Objetos:

Los objetos son ejemplares de una clase cualquiera. Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se creará. Programación Orientada a Objetos 71

Las características mas importantes de la programación orientada a objetos son: 1. Abstracción: Mediante la abstracción la mente humana modeliza la realidad en forma de objetos 2. Encapsulado: Es el mecanismo que nos permite unir el código con los datos que manipula y mantiene a ambos de las indiferencias exteriores y de uso indebido 3. Modularidad: Propone dividir la aplicación en varios módulos (Clases, paquetes o componentes) cada uno de ellos con un sentido propio 4. Jerarquía: Las distintas clases de un programa se organizan mediante la jerarquía. Esta presentación da lugar a los arboles de herencia 5. Herencia: es el proceso por el cual un objeto adquiere las propiedades de otro 6. Paso de mensajes: Un objeto puede solicitar de otro objeto que realice una acción determinada o que modifique su estado. 7. Polimorfismo: Es una característica que permite que la interfaz sea utilizada por una clase general de acciones. La acción especifica queda determinada por la naturaleza exacta de la situación. Programación Orientada a Objetos 72

 Clases: Nombre de la clase. Por convención (no es obligatorio) Indica a Python que se comienza con mayúscula deseo crear una nueva Clase class Nombre_de_clase: def __init__(self,arg1,arg2,…,argn): Variable por defecto El constructor print ‘Nueva clase’ que guarda la __init__ es el método referencia a la clase inicial que tendrá que se está creando todo objeto creado def metodo1(self,arg1,arg2,…,argn): en el marco de esta self.Atributo1=arg1 clase . Self indica la creación . de un atributo que Indica a Python . puede ser extraído que deseo crear un def metodoN(self,arg1,arg2,…,argn): cuando se requiera nuevo Método. print argn, argn-1,…,arg2,arg1

Nota: El nombre de la variable self no está reservado en este lenguaje. Los métodos se escriben como funciones que estarán disponibles para ser ejecutadas por el objeto cuando así se requiera. Pueden ser definidos tantos métodos como se deseen. Programación Orientada a Objetos 73

 Objetos:

Identidad del objeto Indica a Python que deseo crear un nuevo objeto a partir de una Clase

Objeto=Nombre_de_clase()

Ejecución del Atributo Objeto.Metodo1(Arg1,Arg2,…,Argn) Ejecución del adquirido de la clase Método adquirido asignada Objeto.Atributo1 de la clase asignada

Para que un objeto ejecute una acción o método es necesario utilizar el operador punto, seguido del método que deseamos invocar, especificando cada argumento (si los tuviese)

Si nuestro objetivo es manejar un atributo también usaremos el nombre del objeto seguido por el operador punto y luego el atributo. Para asimilarlo podría ayudarlo leer mentalmente “el Atributo del objeto” y “el método del objeto”. Programación Orientada a Objetos 74

 Clases y objetos:

#Definamos una clase:

class Vehiculo_Hyundai: def __init__(self): #Método que indica el color del vehículo self.combustible = ‘gasolina’ #Atributo1 del vehiculo= Combustible print 'El vehiculo esta disenado para usar ‘ + self.combustible

def ano(self, ano): #Método que indica el año del vehículo self.ano=ano #Atributo2 del vehiculo= Año

def motor(self, cil , lt): #Método que indica el tipo de motor del vehículo cil, lt = str(cil), str(lt) self.tipo_motor = 'Motor a Gasolina ‘ + cil + ' cilindros de ‘ + lt + ' litros' self.Num_cilindros = cil + ' cilindros‘ #Atributo4 del vehiculo= Numero de Cilindros

def Lugar_de_fabricacion(self): #Método que indica el tipo de motor del vehículo print 'Yangjae-Dong, Seocho-Gu - Seul' Programación Orientada a Objetos 75

 Clases y objetos (cont): Definimos el objeto asignándole a una identidad una clase #Definicion de objeto 1 Tucson=Vehiculo_Hyundai() Ahora esta identidad es un objeto que posee todas los métodos y atributos definidos en el #Atributos por defecto paso anterior print Tucson.combustible El vehiculo esta disenado para usar gasolina

#Atributos adicionales gasolina Tucson.motor(4,2.0) print Tucson.tipo_motor Motor a Gasolina 4 cilindros de 2.0 litros

Tucson.Lugar_de_fabricacion() Yangjae-Dong, Seocho-Gu – Seul

Tucson.ano(2007) print Tucson.ano 2007 Programación Orientada a Objetos 76

 Clases y objetos (cont): Notemos que en nuestro caso los objetos están representados por los modelos pertenecientes a la marca Surcoreana #Definicion de objeto 2 Accent=Vehiculo_Hyundai() El vehiculo esta disenado para usar gasolina

#Atributos adicionales Accent.motor(4,1.5) print Accent.Num_cilindros 4 cilindros

Podemos definir N cantidad de En vista de que la clase representa objetos a partir de una clase. a todos los vehículos Hyundai pudiésemos definir todos los Con esto se facilita la creación modelos fabricados por dicha de entidades que comparten casa automotriz características similares. Programación Orientada a Objetos 77 Documentación de clases A menudo es necesario compartir nuestros códigos con otros programadores por lo que, los comentarios y la documentación es fundamental para el entendimiento del código. Python nos da la oportunidad de documentar nuestras clases de la siguiente forma:

class Nombre_de_clase: ‘Documentación de clase’ def __init__(self,arg1,arg2,…,argn): print ‘constructor de nueva clase’ . . . def metodoN(self,arg1,arg2,…,argn): print argn, argn-1,…,arg2,arg1 Ahora la clase tiene una cadena de documentación, a la que se puede acceder a través de nombreclase.__doc__ Programación Orientada a Objetos 78 Built-In Atributos de clase Cada clase de Python mantiene los siguientes atributos incorporados a los que se puede acceder mediante operador punto como cualquier otro atributo

1. __dict__: Diccionario que contiene espacio de nombres de la clase.

2. __doc__: cadena de documentación de clase o ninguno, si no definido.

3. __name__: Nombre de clase.

4. __module__: Nombre del módulo en el que se define la clase. Este atributo es "__main__" en modo interactivo.

5. __bases__: Una tupla posiblemente vacío que contiene las clases de base, en el orden de su aparición en la lista de clase base. Programación Orientada a Objetos 79

 Herencia: En lugar de empezar desde cero, puede crear una clase que derive de una clase ya existente haciendo una lista de las clases padre (entre paréntesis) después del nombre de la nueva clase. La clase hija hereda los atributos de su clase padre, y se puede usar esos atributos como si estuvieran definidas en la clase hija. Una clase hija también puede anular los miembros de datos y métodos de los padres. class nombre_clase_hija(clase_padre1,clase_padre2,…,clase_padreN): ‘Documentación de subclase’ def __init__(self,arg1,arg2,…,argn): print ‘constructor de la subclase’ . . . def metodo_subclase_N(self,arg1,arg2,…,argn): print argn, argn-1,…,arg2,arg1 Programación Orientada a Objetos 80

 Ejemplo:

class Bomba(): ‘Ejemplo: Clase que define características de bombas’ def __init__(self,Q,H,Gs): self.caudal=Q #[m^3/s] self.cabezal=H #[m] self.peso_especifico=Gs #[kg/(m^2.s^2)] def potencia_teorica(self): self.potencia=self.caudal*self.cabezal*self.peso_especifico #[Hp] return self.potencia

class Centrifuga(Bomba): ‘Ejemplo: SubClase que define características de bombas centrifugas’ def velocidad(self,omg): self.velocidad_giro=omg #[rpm] Programación Orientada a Objetos 81

 Observe que si en la subclase defino el constructor __init__ entonces estaría sobrescribiendo el constructor de la clase padre. Esto implica que la nueva sub-Clase no heredará el constructor del padre pero si los métodos.

class reciprocante(Bomba): ‘Ejemplo: SubClase que define características de bombas reciprocantes’ def __init__(self,H,Q,Gs,tipo): self.caudal=Q #[m^3/s] self.cabezal=H #[m] self.peso_especifico=Gs #[kg/(m^2.s^2)] self.tipo_maquina=tipo #indica que tipo de maquina def especificaciones(self,m): self.mensaje=m print ‘Bomba reciprocante del tipo’+str(self.tipo_maquina) print self.mensaje Programación Orientada a Objetos 82

 Encapsulación: class vector(): “””Clase que genera vectores de unos y ceros””” Para encapsular solo es def __init__(self,n): necesario colocar doble guion self.elementos=n bajo antes del nombre del método a definir (__) y no def zeros(self): colocar los dos últimos guiones self.__lista=[] bajos al finalizar la palabra. self.__contador=0 Con esto ocultamos de while self.__contador < self.elementos: otros usuarios los atributos que self.__lista.append(0) deseemos. self.__contador+=1 V=vector(7) return self.__lista print V.ones() print V.zeros() def ones(self): print V.elementos self.__lista=[] print V.__lista self.__contador=0 while self.__contador < self.elementos: [1,1,1,1,1,1,1] [0,0,0,0,0,0,0] self.__lista.append(1) 7 self.__contador+=1 error return self.__lista Programación Orientada a Objetos 83

Observación de interés:

 Puesto que Python esta constituido por objetos, las funciones también son objetos… en este caso clases y poseen atributos tales como __name__ o __doc__ los cuales sirven para acceder al nombre de una función y a su documentación (respectivamente).

def producto(a,b): “””Funcion encargada de multiplicar dos números reales””” Resultado=a*b return Resultado

nombre=producto.__name__ producto: Función encargada de descripcion=producto.__doc__ multiplicar dos números reales print nombre + ’: ’ + descripcion Importar Librerías 84

Para importar una Liberia en Python 2.X es necesario: 1. Conocer si la librería es compatible con la versión de Python que se tiene instalada. 2. Ultilizar el comando import para añadir la librería y activarla en el código. 3. Para utilizar las funciones que posea la librería es necesario:

1. Escribir nombre_librería.función(arg1, arg2,…,argN) donde el símbolo “.” indica que la función pertenece a la librería indicada

2. Revisar la sintaxis de la función en cuestión, entradas y salidas utilizando el comando help nombre_librería.función() Import random r=random.randrange(5) print r 3

Esta librería incluida también en CodeSkulpture permite usar funciones para generación de datos aleatorios. Por ejemplo la función randrange() genera números aleatorios desde 0 al numero colocado entre paréntesis. También tiene la posibilidad de configurarse en un cierto rango de números Importar Librerías 85

Para importar una Liberia en Python 2.X es necesario:

4. Usted puede, al importar una librería, colocarle un nombre local para facilitar su uso. Esta acción se ejecuta a través de la preposición as. Por ejemplo:

Import Librería as nombre_extension var=nombre_extension.funcion(arg) print var

reutilizando el ejemplo anterior:

Import random as rnd r=rnd.randrange(5) 2 print r Importar Librerías 86

Para importar una Liberia en Python 2.X es necesario: 5. Si usted desea importar un solo elemento de una librería a su código, debe hacerlo con las palabras from, import y el nombre de la función que desea importar. Observemos:

from Librería import función var=funcion(arg) print var

from random import randrange r=randrange(5) 4 print r

Note que al utilizar el from-import-* no es necesario indicarle a Python la librería a la que pertenece determinada función pues se esta importando todos los nombres pertenecientes a la libreria. ES IMPORTANTE USAR CON CUIDADO ESTE COMANDO pues el consumo de memoria puediese convertise en un factor importante de problemas. Importar Librerías 87

Para importar una Liberia en Python 2.X es necesario: 6. Si usted desea importar todos los elementos de una librería a su código, debe hacerlo con las palabras from, import y un asterisco que va seguido de la palabra importar. Observemos:

from Librería import * var=funcion(arg) print var

from random import * r=randrange(5) 4 print r

Note que al utilizar el from-import-* no es necesario indicarle a Python la librería a la que pertenece determinada función pues se esta importando todos los nombres pertenecientes a la librería. ES IMPORTANTE USAR CON CUIDADO ESTE COMANDO pues el consumo de memoria puediese convertise en un factor importante de problemas. Importar Librerías 88

Probemos importando de forma sencilla la librería “math” disponible en cualquier versión de Python. Esta es la librería matemática por defecto. Contiene funciones trigonométricas, constantes fundamentales, entre otros.

Import math as mt

help math #en python 3.X se escribe como una funcion: help(math)

El comando help ejecuta el acceso a la documentación de ayuda de un modulo, función, atributos, entre otros objetos. El comando help no esta disponible para codeskulpture. En este caso es necesario acceder a la documentación en el botón derecho superior de la pantalla de resultados. Importar Librerías 89

Función Descripción sin(x) Seno de x cos(x) Coseno de x tan(x) Tangente de x asin(x) Arco seno de x acos(x) Arco coseno de x atan(x) Arco tangente de x sinh(x) Seno hiperbólico de x cosh(x) Coseno hiperbólico de x tanh(x) Tangente hiperbólica de x ceil(x) Retorna el menor entero mas próximo a x factorial(x) Retorna el factorial de x (X!) log(x,[,base]) Logaritmo de x en la base especificada Importar Librerías 90

Función Descripción sqrt(x) Raiz cuadrada de x degrees(x) convierte radianes a grados exp(x) Exponencial de x gcd(x,y) Máximo común divisor entre “x” y “y” Isclose(a,b,rel_tol1e-09,abstol=0.0) Determina si dos números punto flotante están cercanos en valor. Retorna valores lógicos Isfinite(x) Retorna true si x es un numero finito Isinf(x) Retorna true si x es infinito. Isnan(x) Retorna true si x es not a number (NaN)

Nota: Estas son solo algunas de las funciones cargadas en la librería math. Si desea tener mas información ejecute el comando help math en python 2.X o help(math) en python 3.X 91

Python 3.6.1 SINTAXIS Y CONCEPTOS Descarga e instalación 92

En el caso de Python sólo es necesario entrar a la pagina www.python.org, descargar la versión deseada, abrir el archivo “.exe” y dar siguiente al instalador. Descarga e instalación 93

En caso de tener Windows se puede acceder desde el símbolo de sistema, para luego desde allí ejecutar python. Descarga e instalación 94

Escribimos Python en el prompt y presionamos “enter”

Debe aparecernos la versión que instalamos. Si se posee alguna distribución que aporte la versión de Python, también aparecerá. Desde este momento se activara el modo interactivo de Python y podremos empezar a ejecutar comandos Descarga e instalación 95

En el caso de Anaconda sólo es necesario entrar a la pagina www.continuum.io-downloads Descarga e instalación 96

Bajar a mitad de pagina, descargar Anaconda de acuerdo al sistema operativo y a la versión de Python (previamente instalada). Ejecutar el archivo “.exe” y seguir las instrucciones en pantalla. Descarga e instalación 97

Existen varias formas de escribir, modificar y correr un código en Python, en nuestro caso, escribiremos y probaremos nuestros códigos en Spyder (3) la cual es la interfaz de usuario de Anaconda que es obtenida 2 al descargar el paquete anteriormente referido. Allí encontraremos integrados 4 todos las librerías, el terminal interactivo de IPYTHON, entre otras.

También, podemos buscar toda la documentación disponible de los 3 módulos, elementos, sintaxis y demás en el Anaconda Navigator (4). Con esta documentación hallaremos una guía perfecta para escribir nuestros códigos. 1 Descarga e instalación 98

Entorno Spyder:

Editor de Explorador de códigos. archivos y Aquí se variables. Se escriben y pueden visualizar los datos modifican manejados en la los códigos ejecución del con gran código facilidad y con la ayuda Terminal interactiva interactivo de en tiempo Python o Ipython. real que Aquí se visualizan ofrece la la ejecución de interfaz. los comandos Descarga e instalación 99

Entorno Ipython:

Terminal interactivo Ipython, con una interfaz similar a ejecutar Python desde el símbolo de sistema. Aquí se pueden ejecutar todos los comandos y códigos guardados sin necesidad de ejecutar la interfaz de Spyder.

Es de rápida apertura, y con menor consumo de memoria RAM. 100

Anaconda Ipython - Spyder

¡MANOS A LA OBRA! Ejecución en Ipython 101

¿Cómo ejecutar mis códigos en Ipython?

1. Crear y escribir el código en un archivo generado en un block de notas como sublimetext (recomendado) y lo guardo con extensión “.py” (nombre_archivo.py) en la dirección deseada.

2. Ir al prompt de Ipython y escribo la dirección donde se encuentra el archivo creado después del comando exclusivo de Ipython “cd”: cd c:\Documentos\Nueva_carpeta

3. Luego de haber definido la dirección de trabajo, se podrán ejecutar todos los archivos “.py” que allí se encuentren. En este caso se desea ejecutar el ya creado. Escribiendo el comando exclusivo de Ipython “run” en el prompt seguido del nombre del archivo con su extensión .py podremos ejecutar el archivo: run nombre_archivo.py

4. Si no se desea definir una dirección de trabajo especifica porque se quieran ejecutar códigos con diferentes direcciones entonces debe escribirse en el prompt la función exclusiva de Ipython runfile(‘directorio+archivo’,wdir=‘directorio actual’):

runfile('D:/Documentos/Nueva_carpeta/nombre_archivo.py‘, wdir='D:/DOCUMENTOS/Nueva_carpeta') Ejecución en Ipython 102

¿Cómo ejecutar mis códigos en Ipython? Luego de descargar, instalar y ejecutar sublimetext es útil configurar la sintaxis de programación del nuevo archivo para que este block de notas especializado en programación nos identifique, idente y oriente en la sintaxis de nuestro programa 2

1 Ejecución en Ipython 103

¿Cómo ejecutar mis códigos en Ipython? Por ejemplo este código para generar matrices como clases: Ejecución en Ipython 104

¿Cómo ejecutar mis códigos en Ipython?

Guardar el archivo con el nombre deseado: codigo_matriz_transpuesta

Copiar la dirección del archivo

Verificar que la extensión sea .py, .pyc o alguna de las antes especificadas. Ejecución en Ipython 105

¿Cómo ejecutar mis códigos en Ipython?

Dirección por defecto Ejecución en Ipython 106

¿Cómo ejecutar mis códigos en Ipython?

Observe como la dirección de trabajo ha cambiado

Ejecuto el código con el comando run Ejecución en Ipython 107

¿Cómo ejecutar mis códigos en Ipython?

El código se ha ejecutado sin errores ni inconvenientes Ejecución en Ipython 108

¿Cómo ejecutar mis códigos en Ipython?

Según el código mostrado podemos escribir una matrices de esta forma. Recordar que A es una clase y posee varios métodos y atributos

Escribamos la Matriz: 9 0 Obs: Más adelante veremos formas practicas para escribir matrices −9 4.8 Ejecución en Python 109

Si por el contrario se desea ejecutar en python desde símbolo de sistema (sirve también para Ipython) tenemos los siguientes métodos pertenecientes al modulo “os” que sirven para el manejo de archivos. Si importamos el modulo desde el prompt de la siguiente forma: import os Método Descripción Sintaxis getcwd() Se obtiene el directorio os.getcwd() actual de trabajo chdir(“direccion”) Cambia el directorio actual os.chdir("D:/Documentos/Ejemplo“) mkdir(“nueva_direccion”) Genera un Nuevo directorio os.mkdir(“D:/Documentos/Ejemplo2”)

rmdir(“direccion_elim”) Elimina un directorio os.rmdir(“D:/Documentos/Ejemplo2”) remove(“nombre_archivo”) Elimina el archivo del os.remove(“archivo.py”) directorio actual

Nota: si se desea ejecutar un codigo solo es necesario estar en el directorio deseado y escribir el nombre en el prompt del archivo con la extension .py Funciones útiles 110

Ayudas: A menudo resulta útil ver como funciona y para que sirve una función. La ayuda proporcionada por Python y las librerías adicionales puede resolver muchos problemas. La forma de acceder a ella es a través de las siguientes funciones y comandos: Ayudas e información: info(func) o help(func) o func? (en Ipython): Se obtiene ayuda con la información, sintaxis y usos de Una forma útil la función (func) y rápida de documentarse source(func) or func?? (en Ipython): Imprime la fuente de una función (si esta no es nativa de Python). Útil para saber a que modulo pertenece la función (func) en cuestion. Funciones útiles 111

Generadores: Si recordamos, range(a,b) fue el primer generador de números que conocimos. Nosotros podemos crear nuestros propios generadores en Python 3.X utilizando la palabra reservada yield. Esta palabra actúa como un “return” sin “break”. Veamos un ejemplo:

def generador(multiplo,*args): “””funcion ejemplo encargada de multiplicar una serie de numeros””” for valor in args: yield valor*multiplo

10 20 30 Nota: para identificar la for valor in 40 diferencia con el return se le 50 sugiere al estudiante sustituir generador(10,(1,2,3,5,6,7,8,9)): 60 print(valor) 70 en este mismo ejemplo la 80 palabra “yield” por “return” 90 Funciones útiles 112

 Algunas funciones y atributos útiles para el manejo de objetos de secuencia como listas, strings y tuplas…

Función Descripción Ejemplo Arroja el tamaño de la cadena, len(‘Hello World’) len(ObjetoSecuencia) lista o tupla 11 Arroja cuantas veces se repite c=‘Hello World' Cadena.count(valor,inicio,final) un caracter en una cadena print(c.count(‘o’))

2 Resultados Convierte a mayúsculas todos c=‘Hello World' Cadena.lower() los caracteres de un string print(c.lower()) hello world

Convierte a minúsculas todos c='hello world' en color Cadena.upper() los caracteres de un string print(c.upper()) HELLO WORLD

c=‘Hello World' verde Reemplaza una parte de la Cadena.replace(valor,nuevo,repeticiones) print(c.replace('o',‘u',1)) cadena por otra Hellu World Cadena.split(separador,maxsplit) Separa una cadena en el c='hello world' carácter indicado eliminándolo print(c.split(“o”,2)) en las cadenas resultantes. [‘Hell’,’ W’,‘rld’] Funciones útiles 113

 Algunas funciones y atributos útiles para el manejo de objetos de secuencia como listas, strings y tuplas… Función Descripción Ejemplo Cadena.find(valor,inicio,fin) Arroja el indice donde se c=“Hello World” encuentra la primera ocurrencia print(c.find(W)) Cadena.rfind(valor,inicio,fin) del caracter en la cadena (r= de 6 atras a adelante)

Devuelve un string formado por la c=[“H”,”e”,”l”,”l”,”o”] Resultados unión de las componentes de una s=“-” Cadena.join(secuencia) tupla o secuencia y separados print(s.join(c)) por un carácter. H-e-l-l-o Copia el valor de una variable a = [5, 3, 1, -1, -3, 5] [similar al caso b=list(a)(ver b=a.copy() en color Lista.copy() Python 2.X)] print b [5, 3, 1, -1, -3, 5]

Modifica una cadena a un C=Cómo estas verde formato especifico c=‘¿{}?’.format(C) ‘Formato’.format(Cadena) print c ¿Cómo estas? Funciones útiles 114

Funciones para el manejo de entrada por teclado:

 raw_input(“entrada”): es una función que lee una cadena de caracteres y entrega una cadena de caracteres.  input(“entrada”): es una función equivalente a raw_input, excepto que se supone que la entrada es una expresión válida en Python y devuelve el resultado evaluado en su caso.

lo que coloque dentro del argumento de este par de funciones cuando establezca su código, será el mensaje que aparecerá en la pantalla interactiva seguido de un prompt donde el usuario escribirá las instrucciones o mensajes que se requieran. Numpy: Matrix o Array 115

NumPy:  Resulta muy útil la librería NumPy para la generación y manejo de matrices. Es una librería que posee gran similitud a MATLAB. Para importarla tendremos que colocar como ya vimos en Python 2.X: import numpy luego de hacer la importación es necesario que cada vez que se haga uso de una función se le indique a Python que dicha función pertenece a la librería numpy de la siguiente manera: numpy.zeros((3,4)) donde zeros((n,m)) es una función que genera un arreglo (array) de ceros de la forma nxm siendo n el numero de filas y m el numero de columnas. Note que su argumento es una tupla. Si queremos un arreglo cuadrado (nxn) se puede escribir: numpy.zeros(5), generando una matriz 5x5 de ceros Numpy: Matrix o Array 116

Características de NumPy:

 En NumPy el tipo básico de dato es el array o arreglo multidimensional, es decir, esta desarrollado sobre objetos definidos como array

 Los arrays son formados por la definición de una clase

 Se pueden crear datos del tipo matrix, el cual es una subclase de la clase array y posee características especiales para el algebra lineal.

 Los datos del tipo array y matrix usan el mismo sistema de índices que hasta ahora hemos visto ([0] para el primer elemento, [-1] para el ultimo elemento.

 NumPy es un código hecho en Python. Es libre. Por lo que es permitido crear y añadir funciones para la librería si así se desea. Numpy: Matrix o Array 117

 ¿Qué debo usar? ¿”matrix” o “array”? La clase “array” tiene un propósito mas general. Pensados para muchos tipos de computación numérica, mientras que “matrix” esta pensado para facilitar el algebra lineal. Mientras los arrays obtienen su clara distinción por tener operaciones entre elementos, la clase matrix usa las operaciones (directamente) del algebra lineal. Se recomienda… usar arrays porque…

1. “Array” es el tipo estándar de vector/matriz/tensor para NumPy. Esto implica que la mayoría de las funciones definidas en NumPy arrojan este tipo de datos.

2. Se puede tener vectores filas o vectores columnas si se desea

3. La única desventaja que tiene frente a “matrix” es que se tiene que usar la función dot() en vez de * para multiplicar dos tensores(hacer producto punto, multiplicación de matrices, etc) Numpy: Matrix o Array 118

DIFERENCIAS Array Matrix ‘*’ Significa multiplicación de elementos y ‘*’ significa multiplicación de matrices y dot() es la función usada para la multiply() es la función usada para la multiplicación de matrices multiplicación de elementos Las formas de los vectores 1xN, Nx1 y N son Los arrays rank-2 son siempre convertidos a todas cosas diferentes. Operaciones como 1xN o Nx1 matrices (vectores filas o A[:,1] regresa un arreglo de categoria-1 [Rank- columnas). A[:,1] regresa una matriz de 1] de forma N, y no de categoria-2 [Rank-2] de categoria-2 [rank-2] de forma Nx1 forma Nx1 Tiene unos atributos .H, .I y .A los cuales Tiene un atributo .T el cual devuelve la devuelven un matriz conjugada transpuesta, transpuesta del arreglo la inversa y el asarray() de la matriz, respectivamente. El constructor es mediante la función array() El constructor es mediante la función cuyo argumento son las secuencias originarias matrix() que recibe una cadena de de python, por ejemplo las listas: caracteres (string) en su argumento: array([[1,2,3],[4,5,6]]) matrix(“[1 2 3;4 5 6]”) Numpy: Matrix o Array 119

asarray(): regresa siempre un objeto del tipo array

asmatrix() o mat(): regresa siempre un objeto del tipo matrix Numpy: Funciones 120

Algunas de las funciones mas comunes se presentan a continuación. Debido a la similitud entre la librería NumPy y Matlab, se hará la comparación entre ambos: Matlab Array Matrix Descripción Obtiene la dimensión del ndims(a) ndim(a) o a.ndim tensor a (categoría [rank]) Obtiene el número de numel(a) size(a) o a.size elementos de un arreglo Obtiene el tamaño de la size(a) shape(a) o a.shape matriz a.’ a.transpose() o a.T Transpuesta de a a.conj().transpose() a’ a.H Transpuesta conjugada de o a.conj().T a a * b dot(a,b) a * b Multiplicación de matrices Multiplicación por a .* b a * b multiply(a,b) elementos a ./ b a/b División por elementos Numpy: Funciones 121

Matlab Array Matrix Descripción a.^3 a**3 power(a,3) Potencia por elemento Comparación por a>0.5 a>0.5 elementos de la matriz Encuentra los índices find(a>0.5) nonzero(a>0.5) donde a sea mayor a 0.5 Asignación de variable por y=x y=x.copy() referencia Asignación de variable por y=x(2,:) y = x[1,:].copy() referencia mat(arange(1.,11.)) 1:10 arange(1.,11.) o Crea un vector r_[1.:11.] o r_[1:10:10j] o r_[1.:11.,'r'] ascendente Crea una matriz 3x4 de zeros(3,4) zeros((3,4)) mat(zeros((3,4))) rank-2 llena de ceros en punto flotante Crea una matriz 3x4x5 de zeros(3,4,5) zeros((3,4,5)) mat(zeros((3,4,5))) rank-3 llena de ceros en punto flotante Crea una matriz 3x4 de ones(3,4) ones((3,4)) mat(ones(3,4)) rank-2 llena de unos en punto flotante Numpy: Funciones 122

Matlab Array Matrix Descripción Crea la matriz identidad eye(3) eye(3) mat(eye(3)) 3x3 de rank-2 Vector que contiene los diag(a) diag(a) mat(diag(a)) elementos de la diagonal de la matriz a

mat(random.rand(3,4)) Crea una matriz 3x4 rand(3,4) random.rand(3,4) aleatoria Crea un arreglo de 4 linspace(1,3,4) linspace(1,3,4) mat(linspace(1,3,4)) elementos igualmente espaciados entre 1 y 3. mgrid[0:9.,0:6.] o Crea dos arreglos: una de [x,y]=meshgrid(0:8,0:5) mat(...) valores de x y otra con meshgrid(r_[0:9.],r_[0:6.] valores de y concatenate((a,b),1) o hstack((a,b)) o Concatena las columnas concatenate((a,b),1) [a b] column_stack((a,b)) o de a y b c_[a,b] concatenate((a,b)) o vstack((a,b)) o concatenate((a,b)) Concatena las filas de a y [a; b] b r_[a,b] Numpy: Funciones 123

Matlab Array Matrix Descripción Máximo elemento de a [opcional: máximo elemento de [opcional: a.max(0) a.max(1)] max(max(a)) a.max() cada columna y el máximo elemento de cada fila] Comparación lógica a & b o a|b logical_and(a,b) o logical_or(a,b) elemento a elemento entre a y b. La inversa de la matriz inv(a) linalg.inv(a) cuadrada a La pseudo-inversa de la pinv(a) linalg.pinv(a) matriz a linalg.solve(a,b) si a es cuadrada Solución al Sistema del tipo a\b ax=b linalg.lstsq(a,b) cualquier otro caso Genera los autovalores y [V,D]=eig(a) D,V = linalg.eig(a) autovectores de la matriz a Transformada de Fourier de fft(a) fft(a) mat(fft(a)) a Transformada inversa de ifft(a) ifft(a) mat(ifft(a)) Fourier de a Ordena de menor a mayor sort(a) sort(a) o a.sort() mat(…) la matriz Numpy: Funciones 124

Frecuentemente es útil pre-inicializar las matrices para ir modificando sus componentes. De esta forma no evitamos objetos de dimensión variable que ralentizan el proceso de cálculo.

B=numpy.array([[a,b,c],[d,e,f]]) B=numpy.zeros((a,b)) B=numpy.empty_like(A) •Donde A es un array o matrix ya •Donde a,b,c,d,e,f son números que existente definen cada una de las componentes. •Donde a y b son enteros mayores a cero •B será un array o matrix de acuerdo al los cuales definen el tamaño de la matriz tipo de A. •Array es una función de numoy que deseada genera un arreglo con las componentes •B tendrá las dimensiones del arreglo A deseadas •B será un array de componentes cero. El tipo de dato de B es: “numpy.ndarray” •B será de componentes nulas •Puede tener tantas componentes en su argumento como se deseen. Numpy: Funciones 125

Array de unos de dimensión 5x8

Array de ceros de dimensión 5x8 Matplotlib: Módulo Gráfico 126

 Matplotlib es una librería grafica que al igual que NumPy es adquirida al descargar anaconda. También puede hallarse la librería en la red sin necesidad de descargar alguna distribución. Es un código hecho en Python con licencia para el desarrollo libre.

 Posee muchas similitudes con MATLAB.

 Amplia documentación en la red

 Puede ser importada bajo el siguiente comando: import matplotlib.pyplot o import matplotlib.pyplot as plt

matplotlib.pyplot.funcion() plt.funcion() Matplotlib: Módulo Gráfico 127

Function Description acorr Plot the autocorrelation of x. angle_spectrum Plot the angle spectrum. annotate Annotate the point xy with text s. arrow Add an arrow to the axes. autoscale Autoscale the axis view to the data (toggle). axes Add an axes to the figure. axhline Add a horizontal line across the axis.

axhspan Add a horizontal span (rectangle) across the axis.

axis Convenience method to get or set axis properties. axvline Add a vertical line across the axes. axvspan Add a vertical span (rectangle) across the axes. bar Make a bar plot. barbs Plot a 2-D field of barbs.

matplotlib.pyplot.plotting() barh Make a horizontal bar plot. box Turn the axes box on or off. Matplotlib: Módulo Gráfico 128

Function Description boxplot Make a box and whisker plot.

broken_barh Plot horizontal bars.

cla Clear the current axes. clabel Label a contour plot.

clf Clear the current figure.

clim Set the color limits of the current image.

close Close a figure window.

cohere Plot the coherence between x and y.

colorbar Add a colorbar to a plot.

contour Plot contours.

contourf Plot contours.

csd Plot the cross-spectral density. delaxes Remove an axes from the current figure.

draw Redraw the current figure. matplotlib.pyplot.plotting() errorbar Plot an errorbar graph. Matplotlib: Módulo Gráfico 129

Function Description eventplot Plot identical parallel lines at specific positions.

figimage Adds a non-resampled image to the figure.

figlegend Place a legend in the figure. fignum_exists

figtext Add text to figure.

figure Creates a new figure.

fill Plot filled polygons.

fill_between Make filled polygons between two curves.

fill_betweenx Make filled polygons between two horizontal curves.

findobj Find artist objects.

Get the current Axes instance on the current figure matching the given keyword args, gca or create one. gcf Get a reference to the current figure. gci Get the current colorable artist.

get_figlabels Return a list of existing figure labels. matplotlib.pyplot.plotting() get_fignums Return a list of existing figure numbers. Matplotlib: Módulo Gráfico 130

Function Description grid Turn the axes grids on or off.

hexbin Make a hexagonal binning plot.

hist Plot a histogram. hist2d Make a 2D histogram plot.

hlines Plot horizontal lines at each y from xmin to xmax.

hold

imread Read an image from a file into an array.

imsave Save an array as in image file.

imshow Display an image on the axes.

install_repl_displayhoo Install a repl display hook so that any stale figure are automatically redrawn when k control is returned to the repl.

ioff Turn interactive mode off.

ion Turn interactive mode on. ishold

matplotlib.pyplot.plotting() isinteractive Return status of interactive mode. legend Places a legend on the axes. Matplotlib: Módulo Gráfico 131

Function Description locator_params Control behavior of tick locators.

loglog Make a plot with log scaling on both the x and y axis.

magnitude_spectrum Plot the magnitude spectrum. margins Set or retrieve autoscaling margins.

matshow Display an array as a matrix in a new figure window.

minorticks_off Remove minor ticks from the current plot.

minorticks_on Display minor ticks on the current plot.

over

pause Pause for interval seconds.

pcolor Create a pseudocolor plot of a 2-D array.

pcolormesh Plot a quadrilateral mesh.

phase_spectrum Plot the phase spectrum. pie Plot a pie chart.

plot Plot lines and/or markers to the Axes. matplotlib.pyplot.plotting() plot_date A plot with data that contains dates. Matplotlib: Módulo Gráfico 132

Function Description plotfile Plot the data in in a file.

polar Make a polar plot.

psd Plot the power spectral density. quiver Plot a 2-D field of arrows.

quiverkey Add a key to a quiver plot.

rc Set the current rc params.

rc_context Return a context manager for managing rc settings.

rcdefaults Restore the default rc params.

rgrids Get or set the radial gridlines on a polar plot.

savefig Save the current figure.

sca Set the current Axes instance to ax.

Make a scatter plot of x vs y Marker size is scaled by s and marker color is mapped scatter to c Parameters ———- x, y : array_like, shape (n, ) Input data s : scalar or array_like, shape (n, ), optional size in points^2.

sci Set the current image. matplotlib.pyplot.plotting() semilogx Make a plot with log scaling on the x axis. semilogy Make a plot with log scaling on the y axis. Matplotlib: Módulo Gráfico 133

Function Description set_cmap Set the default colormap.

setp Set a property on an artist object.

show Display a figure. specgram Plot a spectrogram.

spy Plot the sparsity pattern on a 2-D array.

stackplot Draws a stacked area plot.

stem Create a stem plot.

step Make a step plot.

streamplot Draws streamlines of a vector flow.

subplot Return a subplot axes positioned by the given grid definition.

subplot2grid Create a subplot in a grid.

subplot_tool Launch a subplot tool window for a figure. Create a figure and a set of subplots This utility wrapper makes it convenient to create subplots common layouts of subplots, including the enclosing figure object, in a single call.

matplotlib.pyplot.plotting() subplots_adjust Tune the subplot layout. suptitle Add a centered title to the figure. Matplotlib: Módulo Gráfico 134

Function Description switch_backend Switch the default backend.

table Add a table to the current axes.

text Add text to the axes. thetagrids Get or set the theta locations of the gridlines in a polar plot.

tick_params Change the appearance of ticks and tick labels.

ticklabel_format Change the ScalarFormatter used by default for linear axes.

tight_layout Automatically adjust subplot parameters to give specified padding.

title Set a title of the current axes.

tricontour Draw contours on an unstructured triangular grid.

tricontourf Draw contours on an unstructured triangular grid.

tripcolor Create a pseudocolor plot of an unstructured triangular grid.

triplot Draw a unstructured triangular grid as lines and/or markers. twinx Make a second axes that shares the x-axis.

twiny Make a second axes that shares the y-axis. matplotlib.pyplot.plotting() uninstall_repl_displayh Uninstalls the matplotlib display hook. ook Matplotlib: Módulo Gráfico 135

Function Description violinplot Make a violin plot.

vlines Plot vertical lines.

xcorr Plot the cross correlation between x and y.

xkcd Turns on xkcd sketch-style drawing mode.

xlabel Set the x axis label of the current axis.

xlim Get or set the x limits of the current axes.

xscale Set the scaling of the x-axis.

xticks Get or set the x-limits of the current tick locations and labels.

ylabel Set the y axis label of the current axis.

ylim Get or set the y-limits of the current axes.

yscale Set the scaling of the y-axis.

matplotlib.pyplot.plotting() yticks Get or set the y-limits of the current tick locations and labels. Aplicaciones 136 Ejemplo A

Una pelota es impactada con un bate por un jugador de beisbol. La pelota obtiene una velocidad inicial Vo (Vo>0) con ángulo θo (0°<θ<90°) con respecto a la horizontal. Se desea conocer el tiempo de vuelo, la distancia “R” y la altura máxima “h” alcanzada por la pelota. Además se pide que grafique la trayectoria de la pelota.

Figura A.1. Cinemática del Figura A.2. Descomposición de la movimiento velocidad inicial

Obs: Desprecie el efecto del aire sobre la pelota. Considérelo una particular puntual. Aplicaciones 137 Ejemplo A

Inicialmente la descomposición de las velocidades en “x” y “y” son las mostradas en la figura A.2. Tenemos que las ecuaciones que describen la posición del proyectil luego de ser disparado son: Aplicaciones 138 Ejemplo A

Un posible código para la solución de este problema: Aplicaciones 139 Ejemplo A Existen muchas formas de graficar los resultados obtenidos. Aquí se presentan dos formas equivalentes. La primera: Aplicaciones 140 Ejemplo A Una segunda forma de graficar, equivalente, pero con una programación mas orientada a objetos: Aplicaciones 141 Ejemplo A El resultado es una animación que varía en el tiempo y que dependerá de los valores iniciales introducidos (en pantalla) por el usuario. Por ejemplo si configuramos 푉표 = 45푚푝ℎ y 휃표 = 20°

Video Variables Resultados Tiempo de vuelo 1.4032010558809227 segundos Altura máxima H 2.4136288829262145 metros Posición final R 26.525563419133032 metros Aplicaciones 142 Ejemplo B

Se requiere calcular la integral definida de un polinomio en un intervalo [a,b] dado. Aplicaciones 143 Ejemplo B Aplicaciones 144 Ejemplo C

Dada unas condiciones iniciales u(x,0)=uo(x), la ecuación diferencial en derivadas parciales mostrada, representa la propagación de una onda con velocidad c. La solución analítica para esta ecuación esta representada por u(x,t)=uo(x-ct). Sin embargo, se pide hallar la solución aproximada de esta ecuación usando el método de diferencias finitas aprendido en los cursos de métodos numéricos.

Si discretizamos con diferencias adelantadas en el termino temporal y diferencias atrasadas en el termino espacial, obtendremos: Aplicaciones 145 Ejemplo C Donde n y n+1 son pasos consecutivos en el tiempo, mientras que i representa la posición del nodo donde se está resolviendo la ecuación en el instante n. En consecuencia i-1 es el nodo adyacente anterior o “vecino anterior” del nodo i.

Δx 0 1 2 … … i-1 i i+1 … … … … Sx-1 Sx

Por tanto si está dada la condición inicial en todo el dominio entonces la única incógnita es u en n+1. Despejando de nuestra discretizacion:

Resolver para c=1: Aplicaciones 146 Ejemplo C Aplicaciones 147 Ejemplo C

Con este código obtenemos la animación del movimiento de la onda comprendida desde sus instante inicial t=0 seg hasta t=1 seg

Video Referencias 148

 Versión Actualizada al 27/01/2018 Referencias: • ://www.python.org • www.continuum.io • https://docs.continuum.io/anaconda/navigator: Anaconda Navigator - Learning • https://www.coursera.org: Coursera – Learn Python Part 1 – University Rice • https://www.coursera.org: Coursera – Learn Python Part 2 – University Rice • https://www.stackoverflow.com • http://www.w3ii.com/es/python/default.html • http://recursospython.com/guias-y-manuales Agradecido ante cualquier comentario y/o contribución: [email protected]