Download Métodos Numéricos con Python y los Super Amigos

Document related concepts
no text concepts found
Transcript
Introducción
Operadores
Variables y formatos
Métodos Numéricos con Python
y los Super Amigos
Departamento de Matemáticas
Facultad de Ciencias Exactas y Naturales
Universidad de Antioquia
«
Copyleft
2010. Reproducción permitida bajo los
términos de la licencia de documentación libre GNU.
Scripts y funciones
Introducción
Operadores
Contenido
1
Introducción
2
Operadores
3
Variables y formatos
4
Scripts y funciones
Variables y formatos
Scripts y funciones
Introducción
Operadores
Variables y formatos
Scripts y funciones
Aspectos generales
http://www.python.org/
Lenguaje de programación de alto nivel, interpretado
Creado por Guido van Rossum a principios de los años 90
Multiplataforma (UNIX, Solaris, Linux, DOS, Windows, OS/2, Mac OS, etc.)
Software libre: Python Software Foundation License (PSFL)
Tipado dinámico
Fuertemente tipado
Orientado a objetos
Introducción
Operadores
Variables y formatos
Scripts y funciones
Los Super Amigos (software adicional para Python)
NumPy: paquete fundamental para computación cientı́fica
SciPy: librerı́a para computación cientı́fica (extiende a NumPy)
matplotlib: librerı́a para gráficos 2D (soporta gráficos 3D también)
Mayavi: librerı́a para gráficos y visualización de datos 3D
iPython: consola interactiva para python
Introducción
Operadores
Variables y formatos
Lenguajes de programación más “populares”
Imagen tomada de http://www.tiobe.com/
Scripts y funciones
Introducción
Operadores
Variables y formatos
Scripts y funciones
Instalación de la Liga de la Justicia
GNU/Linux (distribuciones basadas en debian):
sudo apt-get install ipython python-scipy python-matplotlib mayavi2 \
python-sympy cython python-networkx python-pexpect python-nose \
python-setuptools python-sphinx python-pygments \
python-twisted python-foolscap
sudo apt-get build-dep python python-scipy python-matplotlib mayavi2 \
cython
Windows y Mac OSX:
Enthought Python Distribution
http://www.enthought.com/products/epd.php
(distribución gratuita para fines académicos)
Introducción
Operadores
Variables y formatos
Scripts y funciones
Iniciando sesión en GNU/Linux
Sesión de Python
$ python
Python 2.5.2 (r252:60911, Jan 20 2010, 23:33:04)
[GCC 4.3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
Sesión de iPython
$ ipython
Python 2.5.2 (r252:60911, Jan 20 2010, 23:33:04)
Type "copyright", "credits" or "license" for more information.
IPython 0.8.4 -- An enhanced Interactive Python.
?
-> Introduction and overview of IPython’s features.
%quickref -> Quick reference.
help
-> Python’s own help system.
object?
-> Details about ’object’. ?object also works, ?? prints more.
In [1]:
Introducción
Operadores
Variables y formatos
Iniciando sesión de iPython en Windows
Scripts y funciones
Introducción
Operadores
Variables y formatos
Scripts y funciones
Operadores aritméticos
Operador
Operación
Ejemplo
Resultado
Operador
Jerarquı́a
**
*
/
//
+
%
Potencia
Multiplicación
División
División entera
Suma
Resta
Módulo (residuo)
2∗∗3
7∗3
10.5/2
10.5//2
3+4
6−8
15 %6
8
21
5.25
5.0
7
−2
3
()
**
*, /, //, %
+, -
(mayor)
In [1]: 3+4
Out[1]: 7
In [5]: 5.0/(10*2+5)
Out[5]: 0.20000000000000001
In [2]: 3/4
Out[2]: 0
In [6]: 2**3**2
Out[6]: 512
In [3]: 3.0/4.0
Out[3]: 0.75
In [7]: (2**3)**2
Out[7]: 64
In [4]: 5.0/10*2+5
Out[4]: 6
In [8]: 17 % 3 % 2
Out[8]: 0
(menor)
Introducción
Operadores
Variables y formatos
Scripts y funciones
Operadores relacionales (de comparación)
Tipos de datos lógicos:
False (0)
True (1)
Operador
Operación
Ejemplo
Resultado
==
!=
<
>
<=
>=
Igual a
Diferente de
Menor que
Mayor que
Menor o igual que
Mayor o igual que
4 == 5
2!=3
10 < 4
5>-4
7<=7
3.5 >= 10
False
True
False
True
True
False
In [9]: 1+2>7-3
Out[9]: False
In [13]: 3>4<5
Out[13]: False
In [10]: 1<2<3
Out[10]: True
In [14]: 1.0/3<0.33333
Out[14]: False
In [11]: 1>2==2<3
Out[11]: False
In [15]: 5.0/3>=11/7.0
Out[15]: True
In [12]: 1>(2==2)<3
Out[12]: True
In [16]: 2**(2/3)<3**(3/4)
Out[16]: True
Introducción
Operadores
Variables y formatos
Scripts y funciones
Operadores lógicos (booleanos)
Operador
Operación
Ejemplo
Resultado
and
or
not
conjunción
disyunción
negación
False and True
False or True
not True
False
True
False
A
B
A and B
A or B
not A
Operador
Jerarquı́a
True
True
False
False
True
False
True
False
True
False
False
False
True
True
True
False
False
False
True
True
()
**
*, /, //, %
==, !=, <, >, <=, >=
not
and
or
(mayor)
(menor)
In [17]: False and True or True
Out[17]: True
In [20]: 5*4 > 4 and 0 < 3
Out[20]: True
In [18]: 0 and 1 or 1
Out[18]: 1
In [21]: True or (2 == 1+2) == True
Out[21]: True
In [19]: 0 and (1 or 1)
Out[19]: 0
In [22]: 2**(3 and 0/5)>45 % 6
Out[22]: False
Introducción
Operadores
Variables y formatos
Scripts y funciones
Tipos de datos
Tipo
Descripción
bits
Rango
Ejemplo
bool
booleano
8
sin rango
True o False
int
entero
16
327
long int
entero largo
32
float
real (punto flotante)
32
complex
complejo
32
str
string (cadena)
32
h
i
−215 , 215 − 1
h
i
0, 232 − 1
h
i
−231 , 231 − 1
h
i
0, 232 − 1
h
i
−231 , 231 − 1
tuple
tupla
32
list
lista
64
dict
diccionario
80
h
h
−38
3.4 × 10
24334253234L
3.1416
3.0 + 4.0j
’hola’
38
, 3.4 × 10
i
1.7 × 10−308 , 1.7 × 10308
(1, ’aja’, 2.0)
i
h
i
3.4 × 10−4932 , 3.4 × 104932
[1, ’aja’, 2.0]
’a’:7.0, 23: True
Introducción
Operadores
Variables y formatos
Scripts y funciones
Identificadores y palabras reservadas
Palabras reservadas
and
elif
global
or
yield
del
from
not
while
def
for
lambda
try
continue
finally
is
return
class
exec
in
raise
break
except
import
print
assert
else
if
pass
del
Identificadores
Nombres que hacen referencia a los objetos que componen un programa:
constantes, variables, funciones, etc.
Reglas para construir identificadores:
El primer carácter debe ser una letra o el carácter de subrayado
El primer carácter puede ir seguido de un número variable de dı́gitos
numéricos, letras o carácteres de subrayado
No pueden utilizarse espacios en blanco, ni sı́mbolos de puntuación
Python distingue mayúsculas y minúsculas
No pueden utilizarse palabras reservadas del lenguaje
Introducción
Operadores
Variables y formatos
Scripts y funciones
Variables
In [23]: base = 2
In [30]: a=2*a
In [24]: print base
2
In [31]: area == 2*a
Out[31]: True
In [25]: print "base"
Out[25]: base
In [32]: x = "uno"; y = "dos"
In [26]: base = base + 1
In [33]: x
Out[33]: ’uno’
In [27]: base
Out[27]: 3
In [34]: print x
uno
In [28]: alt = 4
In [35]: x+y
Out[35]: ’unodos’
In [29]: area = base*alt; a=3
In [36]: print x+y
unodos
Introducción
Operadores
Variables y formatos
Scripts y funciones
Listas y tuplas
In [37]: milista=[a, "hola", 3.0, True]
In [38]: milista
Out[38]: [3, ’hola’, 3.0, True]
In [44]: milista
Out[44]: [2.0, ’hola’, 3.0, True]
In [45]: milista[-1]
Out[45]: True
In [39]: milista[0]
Out[39]: 3
In [46]: milista.append("otro")
In [40]: milista[1]
Out[40]: ’hola’
In [47]: milista
Out[47]: [2.0,’hola’, 3.0, True,’otro’]
In [41]: milista[2]
Out[41]: 3.0
In [48]: milista[:2]
Out[48]: [2.0, ’hola’]
In [42]: milista[1:3]
Out[42]: [’hola’, 3.0]
In [49]: milista[1:]
Out[49]: [’hola’, 3.0, True, ’otro’]
In [43]: milista[0] = 2.0
In [50]: lista2[]
Introducción
Operadores
Variables y formatos
Scripts y funciones
Listas y tuplas
In [51]: milista=[a, "hola", 3.0, True]
In [58]: lt
Out[58]: (1, 2, True, ’python’)
In [52]: lista2
Out[52]: []
In [59]: lt[0]=3
In [53]: lista2.insert(1,"a")
In [54]: lista2
Out[54]: [’a’]
----------------------------------------------------TypeError
Traceback (most recent call last)
TypeError: ’tuple’ object does not support item
assignment
In [60]: 3 in lt
Out[60]: False
In [55]: lista2.insert(2,"b")
In [61]: range(8)
Out[61]: [0, 1, 2, 3, 4, 5, 6, 7]
In [56]: lista2
Out[56]: [’a’, ’b’]
In [62]: range(3,7)
Out[62]: [3, 4, 5, 6]
In [57]: lt = (1, 2, True, "python")
In [63]: range(4,10,2)
Out[63]: [4, 6, 8]
Introducción
Operadores
Variables y formatos
Scripts y funciones
Conversiones de tipo, funciones básicas
Operación
Descripción
Función
Descripción
int(x)
long(x)
float(x)
complex(x)
complex(x,y)
Convierte x a entero
Convierte x a entero largo
Convierte x a punto flotante
Convierte x al complejo x+0j
Convierte al complejo x+yj
abs(x)
max(sucesion)
min(sucesion)
round(x,n)
cmp(x,y)
Valor absoluto de x
Mayor elemento de sucesion
Menor elemento de sucesion
Redondea al decimal n
Retorna -1, 0, 1 si x<y, x==y, x>y
In [64]: x = -5
In [65]: y = 4
In [70]: print float(z)
6.0
In [71]: complex(x)
Out[60]: (-5+0j)
In [66]: p = 3.1416
In [72]: complex(x,y)
Out[72]: (-5+4j)
In [67]: z = ’6.3’
In [68]: print int(p)
3
In [69]: abs(x)
5
In [73]: print round(p,2)
3.14
In [74]: cmp(x,y)
Out[74]: -1
Introducción
Operadores
Variables y formatos
Scripts y funciones
Instrucciones de entrada/salida
Entrada de datos:
raw input("entrada"): lee una lı́nea de entrada que es convertida a string
eval(string): convierte string en un valor numérico
In [75]: a = raw input("Ingrese a: ")
Ingrese a: 2
In [80]: print b, type(b)
Out[80]: 2 <type ’int’>
In [76]: print a
Out[76]: 2
In [81]:s=eval(raw input("Ingrese s: "))
Ingrese a: 2*3
In [77]: a
Out[77]: ’2’
In [82]: print s, type(s)
Out[82]: 6 <type ’int’>
In [78]: type(a)
Out[78]: <type ’str’>
In [83]:m=eval(raw input("Ingrese m: "))
Ingrese a: hola
----------------------------------------------------TypeError
In [79]: b = eval(a)
Traceback (most recent call last)
TypeError: name ’hola’ is not defined
Introducción
Operadores
Variables y formatos
Scripts y funciones
Instrucciones de entrada/salida
Salida de datos:
Entero
Punto flotante
Notación exponencial
print objeto1, objeto2, ...
d
f
e
print " %formato1 %formato2 · · · " % tupla
In [84]: u = 6543
In [88]: print "v = %7.2f" % v
v = 1234.57
In [85]: v = 1234.56789
In [88]: print "v = %9.2f" % v
v =
1234.57
In [86]: print u, v
6543 1234.56789
In [88]: print "v = %7.8f" % v
v = 1234.56789000
In [87]: print "u = %6d" % u
u =
6543
In [81]: print "v = %.2e" % v
v = 1.23e+03
In [88]: print "u = %06d" % u
u = 006543
In [81]: print "u= %6d y v= %8.4e" % (u,v)
u= 6543 y v=1.2346e+03
Introducción
Operadores
Variables y formatos
Scripts y funciones
Programas
Scripts:
Archivos de texto plano sin formato
Tiene extensión .py
Contienen una sucesión de comandos de Python
No tienen parámetros (“argumentos”) de entrada ni de salida
Las variables definidas en los scripts son globales
Funciones:
Secuencia de sentencias que ejecuta una operación deseada y tiene un
nombre
Las funciones tienen sintaxis especial
Tienen parámetros (“argumentos”) de entrada y de salida
Las variables definidas en funciones son locales
Introducción
Operadores
Variables y formatos
Editores en Linux
Gedit: http://projects.gnome.org/gedit/
Scripts y funciones
Introducción
Operadores
Variables y formatos
Editores en Linux
Pymacs (Emacs + Python): http://pymacs.progiciels-bpi.ca/
Scripts y funciones
Introducción
Operadores
Editores en Linux
Geany: http://www.geany.org/
Variables y formatos
Scripts y funciones
Introducción
Operadores
Variables y formatos
Editores en Linux
SPE (Stani’s Python Editor): http://pythonide.blogspot.com/
Scripts y funciones
Introducción
Operadores
Variables y formatos
Editores en Linux
Erik: http://eric-ide.python-projects.org/
Scripts y funciones
Introducción
Operadores
Variables y formatos
Editores en Windows
Gedit: http://projects.gnome.org/gedit/
Scripts y funciones
Introducción
Operadores
Editores en Windows
IDLE
Variables y formatos
Scripts y funciones
Introducción
Operadores
HolaMundo1.py
Variables y formatos
Scripts y funciones
HolaMundo2.py
# Progarma hola mundo, version "emo"
#! /usr/bin/env python
print "¡Hola, maldito mundo!"
print "¡Hola, maldito mundo!"
invitado@matematicas06:∼/scripts$ ls -l
total 12
-rw-r--r-- 1 invitado invitado 68 2010-02-03 14:02 HolaMundo1.py
-rw-r--r-- 1 invitado invitado 54 2010-02-03 14:03 HolaMundo2.py
invitado@matematicas06:∼/scripts$ chmod a+x HolaMundo2.py
invitado@matematicas06:∼/scripts$ ls -l
total 12
-rw-r--r-- 1 invitado invitado 68 2010-02-03 14:02 HolaMundo1.py
-rwxr-xr-x 1 invitado invitado 54 2010-02-03 14:03 HolaMundo2.py
invitado@matematicas06:∼/scripts$ python HolaMundo1.py
Hola, maldito mundo!
invitado@matematicas06:∼/scripts$ ./HolaMundo2.py
Hola, maldito mundo!
Introducción
Operadores
Variables y formatos
Scripts y funciones
HolaMundo3.py
#! /usr/bin/env python
# Programa hola mundo version matematica
import sys, math
# carga sistema y modulo matematico
r = float(sys.argv[1])
# extrae argumento de la linea de comandos
s = math.cos(r)
print "Hola, maldito Mundo! cos("+ str(r) + ")="+ str(s)
invitado@matematicas06:∼/scripts$ ls -l
total 12
-rw-r--r-- 1 invitado invitado 68 2010-02-03 14:02 HolaMundo1.py
-rw-r--r-- 1 invitado invitado 54 2010-02-03 14:03 HolaMundo2.py
-rw-r--r-- 1 invitado invitado 267 2010-02-03 14:06 HolaMundo3.py
invitado@matematicas06:∼/scripts$ chmod a+x HolaMundo3.py
invitado@matematicas06:∼/scripts$ ls -l HolaMundo3.py
-rwxr-xr-x 1 aleph aleph 267 2010-02-03 14:06 HolaMundo3.py
invitado@matematicas06:∼/scripts$ ./HolaMundo3.py 0
Hola, maldito Mundo! cos(0.0)=1.0
Introducción
Operadores
Variables y formatos
Scripts y funciones
Ejemplos de scripts
Ejemplo 4.1 (Promedio de dos números)
Escriba un programa (script) en Python que reciba como entradas dos números A
y B y calcule su promedio.
Solución
promedio.py
# Calcula el promedio de dos numeros
# Lee los valores de A y B
A = eval(raw input("Ingrese A: "))
B = eval(raw input("Ingrese B: "))
# Calcula el promedio
PROM = (A+B)/2.0;
# Imprime el promedio
print "El promedio de %f y %f es %f" % (A, B, PROM)
Introducción
Operadores
Variables y formatos
Scripts y funciones
Ejemplos de scripts
Ejemplo 4.2 (Área y perı́metro de un rectángulo)
Escriba un programa (script) en Python tal que dado como datos la base y la
altura de un rectángulo, calcule su perı́metro y área.
Solución
rectangulo.py
# Calcula el area y perimetro de un rectangulo
% Lee los valores de la base y la altura
BASE = eval(raw input("Ingrese la base: "))
ALTURA = eval(raw input("Ingrese la altura: "))
AREA = BASE*ALTURA;
PERIMETRO = 2.0*(BASE+ALTURA);
print "El área es %f y el perı́metro es %f" % AREA, PERIMETRO);
Introducción
Operadores
Variables y formatos
Scripts y funciones
Funciones
Sintaxis de una función
def NOMBRE( LISTA DE PARAMETROS ):
SENTENCIAS
In [94]: def suma(x,y):
...:
print x+y
...:
...:
In [95]: suma(2,3)
5
In [96]: a = -4
In [97]: b = 5
In [99]: suma(abs(-2),-3)
-1
In [100]: def deja espacio():
...:
print
# linea vacia
...:
...:
In [101]: 8*3; deja espacio(); 2*3
Out[101]: 24
Out[101]: 6
In [102]: deja espacio(3)
In [98]: suma(a,b)
1
----------------------------------------------------TypeError
Traceback (most recent call last)
TypeError: deja espacio() takes no arguments (1 given)
Introducción
Operadores
Variables y formatos
Scripts y funciones
Funciones definidas en scripts
Ejemplo 4.3 (Promedio de dos números)
Escriba una función en Python que reciba como entradas dos números A y B y
calcule su promedio.
Solución
promedio.py
# Funcion que calcula el promedio de dos numeros
def prom(A,B):
C = (A+B)/2.0
print "El promedio de %f y %f es %f" % (A, B, C)
In [103]: from promedio import *
In [104]: prom(2,3)
El promedio de 2.000000 y 3.000000 es 2.500000
Introducción
Operadores
Variables y formatos
Scripts y funciones
Ejemplos de scripts
Ejemplo 4.4 (Área y perı́metro de un rectángulo)
Escriba un script en Python que contenga funciones que calculen el
perı́metro y el área de un rectángulo, dados su base y altura.
Solución
rectangulo.py
def area(base,altura):
ar = base*altura
print "El area es %f" % ar
In [107]: ar
----------------------------------------------------Traceback (most recent call last)
NameError
NameError: name ’ar’ is not defined
In [108]: perimetro(2,3)
def perimetro(base,altura):
per = 2.0*(base+altura)
print "El perimetro es %f" % per
----------------------------------------------------NameError
Traceback (most recent call last)
NameError: name ’perimetro’ is not defined
In [103]:from rectangulofun import area
In [103]:from rectangulofun import
perimetro
In [104]: area(2,3)
El area es 6.000000
In [104]: perimetro(2,3)
El perimetro es 10.000000
Introducción
Operadores
Variables y formatos
Scripts y funciones
Referencias
J. Elkner, A. Downey, C. Meyers
How to Think Like a Computer Scientist: Learning with Python
http://openbookproject.net//thinkCSpy/index.html
R. Gonzáles
Python para todos
http://mundogeek.net/tutorial-python/
J. Kiusalaas
Numerical Methods in Engineering with Python
Cambridge University Press, 2005