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