U N I V E R S I D A D D E E L S A L V A D O R A N A L I S I S N U M É R I C O – A N N 1 1 5
FA C U LTA D D E I N G E N I E R Í A Y A R Q U I T E C T U R A B r . A l l a n M o n t e n e g r o / B r . J a v i e r G a r c í a
E S C U E L A D E I N G E N I E R Í A E L É C T R I C A M s c . e I n g . W i l b e r C a l d e r ó n
Guía de laboratorio # 03:
Introducción a Python y creación de
funciones en Python.
En matemáticas uno no entiende las cosas, se acostumbra a ellas.
John Von Neumann
Msc. e Ing. Wilber Calderón Escuela de Ingeniería Eléctrica 1/11
Fina Avenida “Mártires Estudiantes del 30 de julio” Ciudad Universitaria, San Salvador, El Salvador, C.A. Apto. Postal 740
U N I V E R S I D A D D E E L S A L V A D O R A N A L I S I S N U M É R I C O – A N N 1 1 5
FA C U LTA D D E I N G E N I E R Í A Y A R Q U I T E C T U R A B r . A l l a n M o n t e n e g r o / B r . J a v i e r G a r c í a
E S C U E L A D E I N G E N I E R Í A E L É C T R I C A M s c . e I n g . W i l b e r C a l d e r ó n
Objetivo general:
Hacer una primera inducción al lenguaje de programación Python.
Asimilar la sintaxis de funciones escritas en Python.
Objetivos específicos:
Aprender sobre los tipos de datos, operadores y bucles de Python.
Escribir funciones en Python.
Msc. e Ing. Wilber Calderón Escuela de Ingeniería Eléctrica 2/11
Fina Avenida “Mártires Estudiantes del 30 de julio” Ciudad Universitaria, San Salvador, El Salvador, C.A. Apto. Postal 740
U N I V E R S I D A D D E E L S A L V A D O R A N A L I S I S N U M É R I C O – A N N 1 1 5
FA C U LTA D D E I N G E N I E R Í A Y A R Q U I T E C T U R A B r . A l l a n M o n t e n e g r o / B r . J a v i e r G a r c í a
E S C U E L A D E I N G E N I E R Í A E L É C T R I C A M s c . e I n g . W i l b e r C a l d e r ó n
Introducción
Python is an interpreted, object-oriented, high-level programming language with dynamic semantics. Its
high-level built in data structures, combined with dynamic typing and dynamic binding, make it very
attractive for Rapid Application Development, as well as for use as a scripting or glue language to connect
existing components together. Python's simple, easy to learn syntax emphasizes readability and therefore
reduces the cost of program maintenance. Python supports modules and packages, which encourages
program modularity and code reuse. The Python interpreter and the extensive standard library are
available in source or binary form without charge for all major platforms, and can be freely distributed.
Tipos de datos en Python
Msc. e Ing. Wilber Calderón Escuela de Ingeniería Eléctrica 3/11
Fina Avenida “Mártires Estudiantes del 30 de julio” Ciudad Universitaria, San Salvador, El Salvador, C.A. Apto. Postal 740
U N I V E R S I D A D D E E L S A L V A D O R A N A L I S I S N U M É R I C O – A N N 1 1 5
FA C U LTA D D E I N G E N I E R Í A Y A R Q U I T E C T U R A B r . A l l a n M o n t e n e g r o / B r . J a v i e r G a r c í a
E S C U E L A D E I N G E N I E R Í A E L É C T R I C A M s c . e I n g . W i l b e r C a l d e r ó n
Tipo Clase Notas Ejemplo
str Cadena Inmutable 'Cadena'
unicode Cadena Versión Unicode de str u'Cadena'
list Mutable, puede contener [4.0, 'Cadena', True]
Secuencia
objetos de diversos tipos
tuple Inmutable, puede contener (4.0, 'Cadena', True)
Secuencia
objetos de diversos tipos
Mutable, sin orden, no set([4.0, 'Cadena',
set Conjunto
contiene duplicados True])
Inmutable, sin orden, no frozenset([4.0, 'Cadena',
frozenset Conjunto
contiene duplicados True])
{'key1': 1.0, 'key2':
dict Mapping Grupo de pares clave:valor False}
int Número Precisión fija, convertido en 42
entero long en caso de overflow.
long Número 42L ó 456966786151987643L
Precisión arbitraria
entero
float Número Coma flotante de doble 3.1415927
decimal precisión
complex Número (4.5 + 3j)
Parte real y parte imaginaria j.
complejo
bool Valor booleano verdadero o True o False
Booleano
falso
Entre las cosas mas importantes que debemos de recordar están:
→ Para escribir números octales se antepone un 0. Para números hexadecimales, se antepone un 0x y para
binarios un 0b:
In [2]: 0xf
Out[2]: 15
In [5]: 010
Out[5]: 8
In [68]: 0b1111
Out[68]: 15
→ La indexacion en Python inicia desde el numero 0, de izquierda a derecha, y con el -1 de derecha a
izquierda:
In [9]: lista = ["Primero", "Segundo", "Tercero", "Cuarto", "Quinto", "Sexto"]
Msc. e Ing. Wilber Calderón Escuela de Ingeniería Eléctrica 4/11
Fina Avenida “Mártires Estudiantes del 30 de julio” Ciudad Universitaria, San Salvador, El Salvador, C.A. Apto. Postal 740
U N I V E R S I D A D D E E L S A L V A D O R A N A L I S I S N U M É R I C O – A N N 1 1 5
FA C U LTA D D E I N G E N I E R Í A Y A R Q U I T E C T U R A B r . A l l a n M o n t e n e g r o / B r . J a v i e r G a r c í a
E S C U E L A D E I N G E N I E R Í A E L É C T R I C A M s c . e I n g . W i l b e r C a l d e r ó n
In [10]: lista[0]
Out[10]: 'Primero'
In [11]: lista[5]
Out[11]: 'Sexto'
In [12]: lista[-1]
Out[12]: 'Sexto'
In [13]: lista[-2]
Out[13]: 'Quinto'
In [14]: lista[-5]
Out[14]: 'Segundo'
In [15]: lista[-6]
Out[15]: 'Primero'
→ También podemos llamar sublistas:
In [22]: texto = "Analisis Numerico"
In [23]: texto[3:]
Out[23]: 'lisis Numerico'
In [24]: texto[4:6]
Out[24]: 'is'
In [25]: texto[:-1]
Out[25]: 'Analisis Numeric'
In [26]: texto[:0]
Out[26]: ''
In [27]: texto[0:]
Out[27]: 'Analisis Numerico'
La siguiente imagen sirve de ayuda para entender los indices en Python.
→ Podemos usar la función type() para averiguar el tipo de dato de algún objeto:
In [41]: complejo = 3 + 5j
Msc. e Ing. Wilber Calderón Escuela de Ingeniería Eléctrica 5/11
Fina Avenida “Mártires Estudiantes del 30 de julio” Ciudad Universitaria, San Salvador, El Salvador, C.A. Apto. Postal 740
U N I V E R S I D A D D E E L S A L V A D O R A N A L I S I S N U M É R I C O – A N N 1 1 5
FA C U LTA D D E I N G E N I E R Í A Y A R Q U I T E C T U R A B r . A l l a n M o n t e n e g r o / B r . J a v i e r G a r c í a
E S C U E L A D E I N G E N I E R Í A E L É C T R I C A M s c . e I n g . W i l b e r C a l d e r ó n
In [42]: type(complejo)
Out[42]: complex
→ Para los comentarios de una linea, usar # (semejante al // de C++). Para los comentarios de varias
lineas, usar '''…''' (semejante al /*...*/ de C):
In [45]: ''' Esto es un comentario
....: de varias lineas '''
Out[45]: ' Esto es un comentario\nde varias lineas '''
In [46]: # Esto es un comentario de una linea
Operadores en Python
A continuación se presenta una lista de los diferentes operadores que tiene Python:
→ Operadores lógicos:
In [48]: True and False
Out[48]: False
In [49]: True or False
Out[49]: True
In [50]: not False
Out[50]: True
→ Operadores de comparación:
In [51]: 5 == 4
Out[51]: False
In [52]: 5 != 4
Out[52]: True
In [53]: 5 < 4
Out[53]: False
In [54]: 5 <= 4
Out[54]: False
In [56]: 5 > 4
Out[56]: True
In [57]: 5 >= 4
Out[57]: True
→ Operadores aritméticos:
In [58]: 5 + 6.7 # Suma
Out[58]: 11.7
Msc. e Ing. Wilber Calderón Escuela de Ingeniería Eléctrica 6/11
Fina Avenida “Mártires Estudiantes del 30 de julio” Ciudad Universitaria, San Salvador, El Salvador, C.A. Apto. Postal 740
U N I V E R S I D A D D E E L S A L V A D O R A N A L I S I S N U M É R I C O – A N N 1 1 5
FA C U LTA D D E I N G E N I E R Í A Y A R Q U I T E C T U R A B r . A l l a n M o n t e n e g r o / B r . J a v i e r G a r c í a
E S C U E L A D E I N G E N I E R Í A E L É C T R I C A M s c . e I n g . W i l b e r C a l d e r ó n
In [59]: 5 - 6.7 # Resta
Out[59]: -1.7000000000000002
In [60]: 5*6.7 # Multiplicacion
Out[60]: 33.5
In [61]: 5/6.7 # Division
Out[61]: 0.7462686567164178
In [62]: 10/3 # Division entera
Out[62]: 3
In [63]: 10%3 # Modulo
Out[63]: 1
In [64]: 2**4 # Potenciacion
Out[64]: 16
→ Operadores bit a bit:
In [71]: 8 & 7 # 1000b & 0100b
Out[71]: 0
In [72]: 8 | 7 # 1000b | 0100b
Out[72]: 15
In [73]: 8 ^ 15 # 1000b ^ 1111b
Out[73]: 7
In [75]: ~0 # ~1111b
Out[75]: -1
In [76]: 1 << 2 # 0001b << 2
Out[76]: 4
In [77]: 4 >> 2 # 0100b >> 2
Out[77]: 1
Lazos y condicionales en Python
→ Lazo while:
In [97]: i = 0
Msc. e Ing. Wilber Calderón Escuela de Ingeniería Eléctrica 7/11
Fina Avenida “Mártires Estudiantes del 30 de julio” Ciudad Universitaria, San Salvador, El Salvador, C.A. Apto. Postal 740
U N I V E R S I D A D D E E L S A L V A D O R A N A L I S I S N U M É R I C O – A N N 1 1 5
FA C U LTA D D E I N G E N I E R Í A Y A R Q U I T E C T U R A B r . A l l a n M o n t e n e g r o / B r . J a v i e r G a r c í a
E S C U E L A D E I N G E N I E R Í A E L É C T R I C A M s c . e I n g . W i l b e r C a l d e r ó n
In [98]: while i < 10:
....: print i
....: i += 1
....:
0
1
2
3
4
5
6
7
8
9
→ Lazo for:
In [80]: for i in range(-5, 5, 2):
....: print(i)
....:
-5
-3
-1
1
3
In [84]: for n in cadena[2:13]:
....: print(n)
....:
l
o
d
o
b
l
e
c
o
→ Sentencia if:
In [103]: numero = 3
In [104]: if numero == 1:
.....: print "El numero es 1"
Msc. e Ing. Wilber Calderón Escuela de Ingeniería Eléctrica 8/11
Fina Avenida “Mártires Estudiantes del 30 de julio” Ciudad Universitaria, San Salvador, El Salvador, C.A. Apto. Postal 740
U N I V E R S I D A D D E E L S A L V A D O R A N A L I S I S N U M É R I C O – A N N 1 1 5
FA C U LTA D D E I N G E N I E R Í A Y A R Q U I T E C T U R A B r . A l l a n M o n t e n e g r o / B r . J a v i e r G a r c í a
E S C U E L A D E I N G E N I E R Í A E L É C T R I C A M s c . e I n g . W i l b e r C a l d e r ó n
.....: elif numero == 2:
.....: print "El numero es 2"
.....: else:
.....: print "El numero es 3"
.....:
El numero es 3
Creación de funciones en Python
Para crear nuestras funciones en Python usaremos la siguiente sintaxis:
def <nombre de la función>(<argumento 1>, <argumento 2>, …):
<Cuerpo de la función>
return <variable a retornar (en caso se retorne algún dato)>
Las funciones las debemos escribir en un archivo de texto con la terminación .py para indicar que es un
archivo de Python. No es necesario que el archivo tenga el mismo nombre de la función (como en
Octave), por lo que en un mismo archivo podemos tener definidas varias funciones (como en C), de esta
manera estaríamos creando un modulo (semejante a las librerías en C). La forma para llamar al modulo
sera:
from <nombre del archivo donde esta nuestra función> import*
La linea anterior importara todos los métodos y variables que se encuentren en el modulo invocado.
Ejemplos de la guía 1:
# Promedio de una lista de numeros
def promedio(x):
return sum(x)/len(x)
# Rango de una lista de numeros
def rango(x):
return max(x) - min(x)
Ejemplos de la guía 2:
# Serie de Fibonacci de manera recursiva
def fibonacci(indice):
if indice < 3:
return indice - 1
else:
return fibonacci(indice - 1) + fibonacci(indice - 2)
# Metodo de la biseccion en forma recursiva
def biseccion_recursiva(lim_inf, lim_sup, f):
if evalxy(f, lim_inf)*evalxy(f, lim_sup) < 0:
raiz = (lim_inf + lim_sup)/2
if 0.000000001 < abs(evalxy(f, raiz)):
if evalxy(f, lim_inf)*evalxy(f, raiz) < 0:
Msc. e Ing. Wilber Calderón Escuela de Ingeniería Eléctrica 9/11
Fina Avenida “Mártires Estudiantes del 30 de julio” Ciudad Universitaria, San Salvador, El Salvador, C.A. Apto. Postal 740
U N I V E R S I D A D D E E L S A L V A D O R A N A L I S I S N U M É R I C O – A N N 1 1 5
FA C U LTA D D E I N G E N I E R Í A Y A R Q U I T E C T U R A B r . A l l a n M o n t e n e g r o / B r . J a v i e r G a r c í a
E S C U E L A D E I N G E N I E R Í A E L É C T R I C A M s c . e I n g . W i l b e r C a l d e r ó n
return biseccion_recursiva(lim_inf, raiz, f)
else:
return biseccion_recursiva(raiz, lim_sup,f)
else:
return raiz
else:
return "ERROR FATAL"
def evalxy(f, x, y = 0) :
"""
Funcion utilizada para evaluar una expresion matematica
escrita en sintaxis de python. La expresion matematica
puede estar en funcion de la variable x o y (por defecto
y = 0, por lo que se puede omitir si la expresion solo
depende de x).
Ejemplo:
>>> evalxy("3+x*2-x**2", 2.1)
>>> 2.79
>>> evalxy("2*cos(x)-sin(y)", 0, 1.570796)
>>> 1.0000000000000533
"""
return eval(f);
# Maximo comun divisor de manera recursiva
def MCD_recursivo(int_1, int_2, divisor = 0):
if divisor == 0:
divisor = min(int_1, int_2)
if 0 < int_1 and 0 < int_2:
if int_1%divisor != 0 or int_2%divisor != 0:
return MCD_recursivo(int_1, int_2, divisor - 1)
else:
return divisor;
else:
return "ERROR FATAL"
Asignación para hacer en el laboratorio
Con ayuda del instructor, escriba una función recursiva que resuelva la siguiente serie:
Realice una función recursiva que calcule el mínimo común múltiplo de dos números enteros.
Msc. e Ing. Wilber Calderón Escuela de Ingeniería Eléctrica 10/11
Fina Avenida “Mártires Estudiantes del 30 de julio” Ciudad Universitaria, San Salvador, El Salvador, C.A. Apto. Postal 740
U N I V E R S I D A D D E E L S A L V A D O R A N A L I S I S N U M É R I C O – A N N 1 1 5
FA C U LTA D D E I N G E N I E R Í A Y A R Q U I T E C T U R A B r . A l l a n M o n t e n e g r o / B r . J a v i e r G a r c í a
E S C U E L A D E I N G E N I E R Í A E L É C T R I C A M s c . e I n g . W i l b e r C a l d e r ó n
Realice una función (no recursiva) que calcule el factorial de un numero
Con ayuda del instructor, escriba una función con las sentencias necesarias para encontrar la moda
y la desviación media de los siguientes datos: 4, 6, 8, 15, 3, 8, 9, 23, 5, 7, 18, 12, 13, 20, 25, 12, 6,
18, 5, 21, 6, 13, 19. La desviación media se define como:
Referencias
https://www.python.org/doc/essays/blurb/
http://www.pythondiario.com/2014/12/tipos-de-datos-en-python.html
https://es.wikipedia.org/wiki/Python
Msc. e Ing. Wilber Calderón Escuela de Ingeniería Eléctrica 11/11
Fina Avenida “Mártires Estudiantes del 30 de julio” Ciudad Universitaria, San Salvador, El Salvador, C.A. Apto. Postal 740