Top Banner
Programaci´ on de alto nivel con python Dr. Luis Gerardo de la Fraga E-mail: [email protected] http://cs.cinvestav.mx/ ~ fraga Departamento de Computaci´on Cinvestav 27 de septiembre, 2016 Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programaci´ on de alto nivel con python 1/63
66

Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Oct 18, 2018

Download

Documents

buidien
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Programacion de alto nivel con python

Dr. Luis Gerardo de la Fraga

E-mail: [email protected]://cs.cinvestav.mx/~fraga

Departamento de ComputacionCinvestav

27 de septiembre, 2016

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 1/63

Page 2: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Contenido

1. ¿Por que python?

2. Una breve introduccion a Unix

3. Programando en python

4. Resolviendo problemas con python

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 2/63

Page 3: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

¿Porque aprender python?

I Es un lenguaje de alto nivel

I Es facil construir programas rapidamente

I Es uno de los lenguajes mas usandos

I Es el lenguaje sugerido para programar en RaspBerryPi

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 3/63

Page 4: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Lenguajes de alto nivel

I C es un lenguaje de nivel medio

I Los leguajes de alto nivel son interpretados

I No se definen tipos de datos

I Tienen una maquina de tiempo de ejecucion (para uso dememoria con un recolector de basura)

I Se puede empotrar funciones en C dentro de Python si senecesita eficiencia.

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 4/63

Page 5: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Prototipado rapido

I Son ideales para realizar programas que procesan texto ygeneran texto

I Para generacion dinamica de paginas WEB

I Si se tiene una idea, puede obtenerse un programa funcionalen minutos u horas

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 5/63

Page 6: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Indice de Popularidad de los Lenguajes de ProgramacionPYPL PopularitY of Programming Language indexhttp://pypl.github.io/PYPL.html

Posicion Cambio Lenguaje Porcion Tendencia

1 Java 23.9 % -0.5 %

2 ↑ Python 12.8 % +2.1 %

3 ↓ PHP 10.5 % -0.8 %

4 C# 8.8 % -0.5 %

5 ↑↑ Javascript 7.7 % +0.6 %

6 ↓ C++ 7.2 % -0.4 %

7 ↓ C 7.1 % -0.1 %

8 C-Objectivo 4.7 % -0.6 %

9 ↑ R 3.1 % +0.5 %

10 ↑ Swift 3.0 % +0.4 %

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 6/63

Page 7: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

PYPL PopularitY of Programming Language index https://sites.google.com/

site/pydatalog/pypl/PyPL-PopularitY-of-Programming-Language

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 7/63

Page 8: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

PYPL PopularitY of Programming Language index

http://pypl.github.io/PYPL.html

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 8/63

Page 9: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

http://www.raspberrypi.org/

Se puede comprar en www.newark.com.mx

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 9/63

Page 10: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Python no lo recomendado para computo intensivo

I Comparacion de un programa intensivo en punto flotante entres versiones, python, perl y C.

$ time python chuaBinX.py 0.1 1000 12 > secPy

real 3m1.915s

user 3m1.869s

sys 0m0.048s

$ time perl chuaBinX.pl 0.1 1000 12 > secPl

real 3m31.458s

user 3m31.408s

sys 0m0.050s

$ time ./chuaBinX 0.1 1000 12 > secC

real 0m0.982s

user 0m0.968s

sys 0m0.003s

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 10/63

Page 11: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Si se ejecutase 1000 veces el trabajo anterior:

Python Perl C

Tiempos de ejecucion 3’2" 3’31" 1"

Veces mas 182 211 1

Si fuesen 10^6 bits ^ ^

10^6/10^3 = 10^3 | | 1000" = 16’40"

| un poco mas de 58 horas y media

50 horas y media

Moraleja: No usar lenguajes interpretados en computo intensivo

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 11/63

Page 12: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Lenguaje Mapa caotico Tiempo (seg)

C Corrimiento de Bernoulli 0.24

Mapa casa de campana 0.40

Mapa Zigzag 0.48

Python Corrimiento de Bernoulli 7.68

Mapa casa de campana 9.81

Mapa Zigzag 10.84

Matlab Corrimiento de Bernoulli 37.73

Mapa casa de campana 38.7

Mapa Zigzag 38.55

Tiempos medidos por Esteban Torres en su trabajo de licenciatura

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 12/63

Page 13: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Una muy breve introduccion a Unix

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 13/63

Page 14: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Algunos comandos basicos de Unix

1. ls – lista el contenido del directorio

2. ls -l – listado largo del contenido del directorio

3. mkdir nombre – crea el directorio nombre

4. rmdir nombre – borra el directorio nombre

5. cd nombre – se cambia al directorio nombre

6. touch documento – crea un archivo vacıo llamadodocumento

7. mv documento doc1.txt – cambia de nombre el archivodocumento a doc1.txt

8. file doc1.txt – identifica el archivo doc1.txt

9. rm doc1.txt – borra el archivo doc1.txt

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 14/63

Page 15: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Hay que ser ordenados para trabajar

Hay que crear siempre un espacio de trabajo, por ejemplo:

cd

mkdir CursoPython

cd CursoPython

ls -l

nano hola.py

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 15/63

Page 16: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Mi primer programa en python

print "Hola mundo!"

El programa se ejecuta en la lınea de comandos como:$ python hola.py

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 16/63

Page 17: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Programando en python

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 17/63

Page 18: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Variables en python

x = 123 # un entero

x = 123L # un entero largo

x = 3.14 # un real en doble precision

x = "hola" # una cadena

x = [0,1,2] # una lista

x = (0,1,2) # una tupla

x = open(’hello.py’, ’r’) # un archivo

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 18/63

Page 19: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Sentencia “if”x = 4

if x < 5 :

print "x es menor que cinco"

else :

print "x es mayor o igual que cinco"

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 19/63

Page 20: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Sentencia “if”x = 4

if x == 0 :

print "x es igual a cero"

elif x < 5 :

print "x es menor que cinco"

else :

print "x es mayor que cinco"

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 20/63

Page 21: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

# Una lınea de comentarios comienza con un ’#’

a = 90

print a

"""

Varias lıneas

de comentarios

Fraga 24/03/2014

"""

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 21/63

Page 22: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

CiclosI Se puede usar la sentencia ’for’,

I o tambien la sentencia ’while’

I La sentencia ’for’ se usa para iterar en listas

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 22/63

Page 23: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

# Un ejemplo de uso del ’while’

#

i=0

while i<10 :

print i

i = i + 1

# coding: utf-8

#

# El mismo programa anterior pero con

# una modificacion en el ’print’:

#

i=0

while i<10 :

print i,

i = i + 1

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 23/63

Page 24: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

# Un ejemplo del uso del ’for’

#

lista = [2,3,5,9]

for i in lista :

print i

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 24/63

Page 25: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

El comando ’pydoc’

I La ayuda sobre cualquier sentencia se puede obtenercon el comando ’pydoc’.

I Dar, por ejemplo, ’pydoc if’ en la lınea de comandos.

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 25/63

Page 26: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Se pueden definir funciones (1/2):

def suma(a, b) :

return( a+b )

r = suma( 5, 6)

print "5 + 6 =", r

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 26/63

Page 27: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Se pueden definir funciones (2/2):

def f(x) :

return( x*x )

i=0

while i<20 :

y = f(i)

print i, y

i = i+1

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 27/63

Page 28: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Las funciones matematicas se encuentran en el modulo math:import math

angulo = math.pi/2

print math.degrees(angulo), math.sin(angulo), \

math.cos(angulo)

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 28/63

Page 29: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

El modulo numpy nos permite definir matrices:

# coding: utf-8

import numpy

A = numpy.zeros((3,2))

# ndim es el numero de dimensiones

# size es el numero total de elementos

# shape mxn

print A.ndim, A.size, A.shape

i=0

while i<3 :

j=0

while j<2 :

print A[i,j],

j = j+1

print

i = i+1

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 29/63

Page 30: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

I Debe definirse desde el principio del tamano de la matriz, o

I usar sus metodos asociados ’resize’, ’reshape’, por ejemplo.

import numpy as np

a = np.ones((3,3))

print a

a.resize( (3,4 ) )

print a

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 30/63

Page 31: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Guardando datos en un archivo:

def f(x) :

return( x*x )

arch = open( "salida.txt", ’w’ )

i=0

while i<20 :

y = f(i)

arch.write( "{} {}\n".format(i, y) )

i = i+1

arch.close()

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 31/63

Page 32: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Argumentos en la lınea de comandos:

# coding: utf-8

import sys

n = len(sys.argv)

print n

if n != 3 :

print "Args: numero1 numero2"

sys.exit(1)

print sys.argv[1], sys.argv[2]

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 32/63

Page 33: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Excepciones:# coding: utf-8

import sys

n = len(sys.argv)

if n != 2 :

print "Args: nombre_archivo"

sys.exit(1)

nombre = sys.argv[1]

try:

arch = open( nombre, ’r’ )

except IOError:

print "No pude abrir el archivo", nombre

sys.exit(2)

for linea in arch :

print linea

arch.close()

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 33/63

Page 34: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Para separar los tokens de una cadena:# coding: utf-8

a = "Esta es una prueba de una lınea de texto"

b = a.split()

for palabra in b:

print palabra

c = b[3]

print "Otro: ", c

n = len(b)

i=0

while i<n :

print b[i]

i = i+1

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 34/63

Page 35: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Para leer un archivo de texto con comentarios:# coding: utf-8

#

# El modulo de expresiones regulares en python:

import re

# Este es un comentario, en una lınea

a = "# El comienzo de una lınea!"

if re.match( "^\s*#", a ) != None :

print a

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 35/63

Page 36: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Separacion del codigo en varios archivos:

Archivo ’operaciones.py’

def suma( a, b ) :

return( a+b )

def resta( a, b ) :

return( a-b )

def multiplicacion( a, b ) :

return( a*b )

# coding: utf-8

import operaciones

import sys

n = len( sys.argv )

if n != 3 :

print "Args: numero1 numero2"

sys.exit(1)

try:

n1 = float( sys.argv[1] )

except ValueError:

print "El primer argumento no es un numero"

sys.exit(2)

try:

n2 = float( sys.argv[2] )

except ValueError:

print "El segundo argumento no es un numero"

sys.exit(3)

r1 = operaciones.suma( n1, n2 )

r2 = operaciones.resta( n1, n2 )

r3 = operaciones.multiplicacion( n1, n2 )

print r1, r2, r3Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 36/63

Page 37: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

De: https://docs.python.org/2/tutorial/classes.html#odds-and-ends

I Cuando se necesita una estructura (“struct´´) como en C,para agrupar y proteger las variables en todo un programa, sepuede utilizar en python la definicion de una clase vacıa.

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 37/63

Page 38: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

class Cuadrado:

pass

def procesa( pd, vx, vy ) :

pd.x = vx

pd.y = vy

def imprime( pd ) :

print pd.x, pd.y

Datos = Cuadrado()

imprime( Datos )

Datos.x = 40

Datos.y = 20

imprime( Datos )

procesa( Datos, 1, 2 )

imprime( Datos )

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 38/63

Page 39: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Objetos# coding: utf-8

class Empleado :

pass

listaTodos = []

Juan = Empleado()

Juan.nombre = "Juan Perez"

Juan.salario = 1000

listaTodos.append(Juan)

Maria = Empleado()

Maria.nombre = "Marıa Hernandez"

Maria.salario = 1100

listaTodos.append(Maria)

for obj in listaTodos :

print type(obj), obj.nombre, obj.salario

print "Ok!"

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 39/63

Page 40: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Diferencia entre variables de la clase y del objetoclass Cuadrado:

p=0

def __init__( self ) :

self.p = [0.0, 0.0]

def imprime( self ) :

print Cuadrado.p, self.p

c1 = Cuadrado()

c2 = Cuadrado()

c1.p[0] = 12

c2.p[1] = 24

c1.imprime( )

c2.imprime( )

Cuadrado.p = 221

c1.imprime( )

c2.imprime( )

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 40/63

Page 41: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Otro ejemplo con objetosclass punto2D :

def __init__( self, x, y ) :

self.x = x

self.y = y

def __add__( self, other ) :

return( punto2D( self.x + other.x, self.y + other.y) )

def myprint( self ) :

print self.x, self.y

p1 = punto2D( 1.0, 0.0 )

print type(p1)

p1.myprint( )

p2 = punto2D( 5.0, 4.0 )

p2.myprint( )

p3 = p1 + p2

print type(p3)

p3.myprint( )

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 41/63

Page 42: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

De: https://docs.python.org/2/tutorial/classes.html#random-remarks

I Atributos de datos sobreescriben los atributos de metodos conel mismo nombre, para evitar conflictos accidentales en losnombres, que pueden causar bugs difıciles de encontrar enprogramas grandes, se debe usar alguna convencion en losnombres.

I Un posible convencion podrıa ser nombrar los metodos con laprimera letra en mayuscula, y los datos con un prefijo (tal vez’ ’, el guion bajo).

I Otra convencion podrıa ser usar verbos para los metodos ynombres para datos.

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 42/63

Page 43: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Resolviendo problemas con la computadora

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 43/63

Page 44: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Fases del desarrollo de software:

0. Entender el problema.

1. Analisis del problema y especificaciones.

2. Diseno del sistema.

3. Codificacion e integracion.

4. Verificacion y validacion.

5. Mantenimiento del sistema.

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 44/63

Page 45: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Algoritmo

Es un procedimiento que se ejecuta en una computadora, y esteprocedimiento esta compuesto por instrucciones que realizan:

1. Las entradas y salidas del algoritmo.

2. No debe ser ambiguas, de manera que es claro lo que cadainstruccion representa cuando se ejecuta.

3. Deben ser simples para que puedan ser llevados a cabo poruna computadora.

4. Deben de ser finitas, esto es, el algoritmo debe terminardespues de un numero finito de operaciones.

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 45/63

Page 46: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Pseudocodigo

Es la representacion de un algoritmo usando palabras comunes yalgebra.

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 46/63

Page 47: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Los algoritmos se disenan usando tres estructuras de controlbasicas:

1. Secuencia: Los pasos son realizados de una maneraestrictamente secuencial, cada paso siendo ejecutadoexactamente una vez.

2. Seleccion: Una de varias acciones alternativas es seleccionaday ejecutada.

3. Uno o mas pasos se realizan repetidamente.

Estas tres mecanismos de control son muy simples individualmentepero, de hecho, la construccion de cualquier algoritmo con estasestructuras fue demostrado por Bohn y Jacopini en 1966 1.

1C. Bohn and G. Jacopini, “Flow Diagrams, Turing Machines, andLanguages with Only Two Formation Rules”, Communications of the ACM,Vol. 9, No. 5, Mayo 1966, pp. 336-371.

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 47/63

Page 48: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Problemas

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 48/63

Page 49: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Problema 1: Resolver una ecuacion lineal (1/2)

1. ¿Que es una ecuacion lineal?

2. ¿Que significa resolver una ecuacion?

3. Si ya entendemos los dos puntos anteriores podemosestablecer el pseudocodigo para resolver el problema.

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 49/63

Page 50: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Problema 1: Resolver una ecuacion lineal (1/2)

1. ¿Que es una ecuacion lineal?

2. ¿Que significa resolver una ecuacion?

3. Si ya entendemos los dos puntos anteriores podemosestablecer el pseudocodigo para resolver el problema.

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 49/63

Page 51: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Problema 1: Resolver una ecuacion lineal (1/2)

1. ¿Que es una ecuacion lineal?

2. ¿Que significa resolver una ecuacion?

3. Si ya entendemos los dos puntos anteriores podemosestablecer el pseudocodigo para resolver el problema.

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 49/63

Page 52: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Problema 1: Resolver una ecuacion lineal (2/2)

1. La entrada de los valores para las incognitas sera en la lıneade comandos

2. La ecuacion de la lınea: y = mx + b

3. La resolvemos mx + b = 0, x = −bm

4. Imprimimos el valor de x para el cual y sera igual a cero.

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 50/63

Page 53: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

La solucion:

# coding: utf-8

import sys

# Los valores de m y b por la lınea de comandos

if len( sys.argv ) != 3 :

print "Args: m b"

sys.exit(1)

m = float(sys.argv[1])

b = float(sys.argv[2])

x = -b/m

print x

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 51/63

Page 54: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Problema 2: Solucion a una ecuacion cuadratica

1. La ecuacion cuadratica ax2 + bx + c = 0,

2. tiene las soluciones x = −b±√b2−4ac

2a

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 52/63

Page 55: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Problema 2: Solucion a una ecuacion cuadratica

1. La ecuacion cuadratica ax2 + bx + c = 0,

2. tiene las soluciones x = −b±√b2−4ac

2a

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 52/63

Page 56: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Problema 3: Guardar datos en un archivo

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 53/63

Page 57: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Problema 4: Leer datos de un archivoI Se tiene un archivo con datos

I Se tiene que crear un programa que maneje esos datos comouna hoja de calculo

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 54/63

Page 58: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Problema 5: El problema de n damas en el tablero de ajedrez

8QZ0Z0Z0L7Z0Z0Z0Z060Z0Z0Z0Z5Z0ZQZ0Z040Z0Z0Z0Z3Z0Z0Z0Z020Z0Z0Z0Z1L0Z0Z0Z0

a b c d e f g h

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 55/63

Page 59: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

I Vamos a crear una solucion al problema analizando todas lasposibilidades

I Esta solucion se conoce como “de fuerza bruta”

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 56/63

Page 60: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Una posicion a evaluar:

8QLQLQLQL7Z0Z0Z0Z060Z0Z0Z0Z5Z0Z0Z0Z040Z0Z0Z0Z3Z0Z0Z0Z020Z0Z0Z0Z1Z0Z0Z0Z0

a b c d e f g h

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 57/63

Page 61: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

1. Para todas las posiciones posibles:

1.1 Si la posicion no presenta un jaque entre damas, se imprime laposicion

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 58/63

Page 62: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

1. posicion=0 # para contar el numero de posiciones validas

2. Para todas las posiciones posibles:2.1 Si la posicion no presenta un jaque entre damas,

2.1.1 posicion = posicion + 12.1.2 se imprime la posicion, que es la numero ’posicion’

3. El numero de posiciones es ’posicion’

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 59/63

Page 63: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Problema 6: Generacion de numeros aleatorios (1/2)

0

0.002

0.004

0.006

0.008

0.01

0.012

0.014

0.016

0.018

0.02

40 60 80 100 120 140 160

Grafica de la funcion f (x) = 1σ√

2πexp

(− (x−µ)2

2σ2

),

para µ = 100 y σ = 20

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 60/63

Page 64: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Problema 6: Generacion de numeros aleatorios (2/2)# coding: utf-8

import random

import sys

if len(sys.argv) != 2 :

print "Args: numero"

sys.exit(1)

veces = int(float(sys.argv[1]))

media = 100

sigma = 20

indice0 = media-3*sigma

indice1 = media+3*sigma

print "# ", indice0, indice1

amplitud = indice1-indice0 + 1

varreglo = [0]*amplitud

i=0

while i<veces :

n = random.gauss(media, sigma)

v = int(n+0.5) - indice0

if v>=0 and v<amplitud :

varreglo[v] += 1

i += 1

i=0

while i<amplitud :

v = i + indice0

norma = float(varreglo[i])/veces

# print v, varreglo[i]

print v, norma

i += 1

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 61/63

Page 65: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

0

0.005

0.01

0.015

0.02

0.025

40 60 80 100 120 140 160

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 62/63

Page 66: Programación de alto nivel con python - delta.cs.cinvestav.mxdelta.cs.cinvestav.mx/~fraga/Charlas/python.pdf · I Comparacion de un programa intensivo en punto otante en tres versiones,

Problema 7: Animacion de graficas usando gnuplot

Dr. Luis Gerardo de la Fraga CCE 2016, Cinvestav Programacion de alto nivel con python 63/63