Você está na página 1de 57

Seminario Profesional:

Python
Objetivo
Conocer el lenguaje de programacin
PYTHON, sus reas de aplicacin, sintaxis y
los mdulos que le permiten interaccionar
con otros lenguajes y libreras.

El alumno aprender las instrucciones


bsicas para su operacin as como la
construccin de objetos y rutinas .

Al finalizar la unidad el alumno deber ser


capaz de desarrollar programas y proyectos
interactivos con este lenguaje.
2
Que es Python?

Python es un lenguaje scripting de muy alto nivel (VHLPL very high level
programming language), interpretado, interactivo con poderosas instrucciones y
orientado a objectos.
Python se interpreta
Python es interactivo
Python esta orientado a la programacin de Objectos
Python es muy sencillo de aprender (Beginner's Language)

Usado frecuentemente para generar contenido HTML en websites.


Excelente para la manipulacin de cadenas o strings en archivos de texto.
Cuenta con herramientas y tipos de datos muy tiles (lists, dictionaries).
Sintaxis muy limpia y multiples extensiones.

http://www.python.org/

3
Por que Python?
Es un ToolKit que maneja un lenguaje natural
Fcil de usar; interprete (no necesita compilacin)
Todo el procesamiento es simblico
Tipos de datos especiales para cadenas, listas,
diccionarios, etc.
Interfaces para Java o C++ con clases especial para ellas.
Procesamiento avanzado:
Estadstica, Inteligencia artificial, etc.
Python posee capacidades de procesamiento matemtico muy
extensas: e.g. operaciones entre arreglos y matrices, etc.
Muy til para procesamiento de datos probabilsticos y de
algoritmos de aprendizaje de mquina (machine learning).
Usos de Python

Prototyping
Glue language
Desarrollo pginas Web
Administracin de sistemas
Aplicaciones Desktop
Juegos
Tutoriales de Python

Dive into Python (Chapters 2 to 4)


http://diveintopython.org/

Python 101 Beginning Python


http://www.rexx.com/~dkuhlman/python_101/python_101.html

Tutorial Oficial de Python


http://www.python.org/doc/current/tut/tut.html

Python Quick Reference


http://rgruet.free.fr/PQR2.3.html
Instalacin de Python
En caso de no estar instalado:
$ python --version
Python 2.7.3
o
$ sudo apt-get install python2.7 python2.7-dev
Correr el intrprete:
$ python
Python 2.7.3 (default, Apr 20 2012, 22:44:07)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Verificar que los bindings requeridos estn instalados: e.g. NumPy.$ python
>>> import numpy
>>> from numpy import *
Traceback (most recent call last):
>>> type(array([1,2,4,5]))
File "<stdin>", line 1, in <module>
<type 'numpy.ndarray'>
ImportError: No module named numpy
En caso de no estarlo salir de Python e instalarlo con apt-get install.
>>> exit()
$ sudo apt-get install python-numpy python-scipy
Impresin a terminal en Python
1 >>> print "Hola, mundo!"
Hola mundo!

2 >>> nombre = "mundo!"


3 >>> print "Hola, %s!" %nombre
Hola, mundo!

4 >>> nombre = "mundo!"


5 >>> print "Hola,", nombre
Hola, mundo!

6 >>> nombre = "mundo!"


7 >>> print "Hola, "+nombre
Hola, mundo!
Impresin a terminal en Python
9 >>> a = 454
10 >>> b = 23
11 >>> sum = 18.235
12 >>> print "La suma de %d y %d es %f\n" % (a, b, sum)
La suma de 454 y 23 es 18.235000

13 >>> a = "tres"
14 >>> b = "8"
15 >>> sum = "11"
>>> print "La suma de " + a + " y " + b + " es " + sum
La suma de tres y 8 es 11
Impresin a terminal en Python
El operador % en conjunto con la instruccin print formatea la
cadena string para generar la salida de texto en la terminal.
>>> print %s xyz %d % (abc, 34)
abc xyz 34

print salta automticamente una nueva lnea al finalizar la


cadena.
Si se manda imprimir una serie de strings (separados por comas)
los concatenar dejando un espacio en blanco entre ellos.
>>> print abc
abc
>>> print abc, def
abc def
Acceso a una variable inexistente
Si se trata de tener acceso a una variable no
declarada previamente (al colocarla de lado
izquierdo de una declaracin o asignacin = ),
Python generar un error en la terminal.
>>> y
Traceback (most recent call last):
File "<pyshell#16>", line 1, in -toplevel-
y
NameError: name y' is not defined

>>> y = 3
>>> y
3
Regulaciones de nombres de variables
Los nombres de variables en Python distinguen entre
maysculas y minsculas. Pueden contener nmeros y
guiones bajos (pero no deben comenzar con un nmero).

e.g.: bob Bob _bob _2_bob_ bob_2 BoB

Existen algunas palabras reservadas:

and, assert, break, class, continue, def, del,


elif, else, except, exec, finally, for, from,
global, if, import, in, is, lambda, not, or,
pass, print, raise, return, try, while
Captura de entradas
Entrada de cadena string raw_input
>>> nombre = raw_input("Teclee su nombre: ")
Teclee su nombre: Juan
>>> print nombre
Juan
>>> type(nombre)
<type 'str'>

Entrada de valor input


>>> edad = input("Teclee su edad: ")
Teclee su edad: 26
>>> print edad
26
>>> type(edad)
<type 'int'>
Tipos types bsicos en Python
Numricos
Int e.g. 1, 1000 (default para nmeros)
z=5/2 # La respuesta es 2, integer division.
Long e.g. 5775457 Identificacin de tipo type()
>>> valor = 9.5
Float e.g. 2.5, 0.123, 2355556,667
>>> type(valor)
Complex e.g. 3 + 4j <type 'float'>

Cadenas Strings
Se usan comillas dobles o simples para especificarlos. abc abc
Emplear comillas triples para cadenas multi-linea o cadenas que contengan o (
e.g.: abc )

Booleanos
True / False
or / and
Interpretacin de Tipos types bsicos
Python determina en un programa o en la lnea de comando de manera
automtica. Dynamic Typing

Pero Python verifica que los Tipos types sean consistentes de acuerdo a la
declaracin de las variables, siendo obligatorio su cumplimiento. Strong Typing

E.g.: No se pueden combinar en una sla variable un entero y una cadena de


caracteres string. El entero debera convertirse a carcter antes de hacer
dicha asignacin:

>>> x = the answer is # Python decide que x se trata de un string.


>>> y = 23 # Python decide que y en un integer.
>>> print x + y # Python generar un error con esta operacin.
Tipos types en Python / Strings
Definicin de (' o o ''' o )
>>> 'cadena...'
'cadena...'
>>> 'cadena \'2\'...'
"cadena '2'..."
>>> "cadena '3'..."
"cadena '3'..."
>>> '''cadena '4'...complemento '''
'cadena \'4\'...complemento '
>>> Este string
... representa mas
... de una linea.
'Este string\nrepresenta mas\nde una linea.'
Tipos types en Python / Strings

Cadena vaca
>>> s1 = ''
Tamao len()
>>> s2 = 'UDESC'
>>> len(s2)
5
Concatenar +
>>> 'DCC/' + s2
'DCC/UDESC'
Replicar *
>>> 3*s2
'UDESCUDESCUDESC'
Tipos types en Python / Strings
Slicing - string[inicio:final:paso]
>>> palabra = 'UDESC' (+)
1 >>> palabra[2]
UDESC
'E' 0 1 2 3 4
2 >>> palabra[0:3]
(-)
'UDE'
3 >>> palabra[3:]
'SC'
4 >>> palabra[-1]
'C'
5 >>> palabra[-2:]
'SC'
6 >>> palabra[::2]
'UEC'
7 >>> palabra[::-1]
'CSEDU'
Tipos types en Python / Strings
Transformacion en string str(objeto)
>>> complejo = 2.5-1.0j
>>> type(complejo)
<type 'complex'>
>>> texto=str(complejo)
>>> type(texto)
<type 'str'> Cada Tipo puede tener diversas
>>> complejo funciones integradas
(2.5-1j) >>> Hola.upper()
'HOLA'
>>> texto
>>> Hola.lower()
'(2.5-1j)'
'hola'
Tipos types en Python / Listas
La definicin de una lista se hace mediante [ ]
1 >>> lista = [ ] # lista
2 >>> lista = [10, 20, 'aa', 'bb', 8.5] # definicin
3 >>> print lista
[10, 20, 'aa', 'bb', 8.5]
4 >>> lista[2:4] # slicing
['aa', 'bb']
5 >>> lista[:3] + [30, 40, 10*5] # concatenacin
[10, 20, 'aa', 30, 40, 50]
6 >>> 3*lista[-2:] + ['cc'] # copia y concatenacin
['bb', 8.5, 'bb', 8.5, 'bb', 8.5, 'cc']
7 >>> del lista[2] # borra un elemento de la lista
8 >>> del lista # borra toda la variable
Tipos types en Python / Listas
Alteracin, remocin e insercin
1 >>> lista = [10, 20, 'aa', 'bb', 8.5]
2 >>> lista[1] = lista[1] + 5 # modificacin individual
>>> lista
[10, 25, 'aa', 'bb', 8.5]
3 >>> lista[2:4] = [30, 40] # modificacin de varios elementos
>>> lista
[10, 25, 30, 40, 8.5]
4 >>> lista[0:2] = [ ] # remocin de varios elementos
>>> lista
[30, 40, 8.5]
5 >>> lista[1:1] = [100, 200] # insercin de elementos
>>> lista
[30, 100, 200, 40, 8.5]
6 >>> lista.append(2.5) # mtodo append( )
>>> lista
[30, 100, 200, 40, 8.5, 2.5]
Tipos types en Python / Tuples
La definicin de Tuples se realiza mediante la asignacin de elementos
separados por comas , / se pueden agrupar usando parntesis ( )

1 >>> t = 12345, 54321, 'hola!'


>>> t[0]
12345
2 >>> u = t, (1, 2, 3, 4, 5) # Los Tuples se pueden anidar (nested)
>>> u
((12345, 54321, 'hola!'), (1, 2, 3, 4, 5))
4 >>> t[0] = 88888 # Tuples son inmutables
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

5 >>> v = ([1, 2, 3], [3, 2, 1]) # Pero pueden contener objetos mutables
>>> v
([1, 2, 3], [3, 2, 1])
Tipos types en Python / Tuples

1 >>> mi_tupla = 12345, 54321, 'Hola!'


2 >>> mi_tupla
(12345, 54321, 'Hola!')
3 >>> mi_tupla[0]
12345
4 >>> x, y, z = mi_tupla
>>> x
12345
>>> y
54321
>>> z
'Hola!'
Tipos types en Python

Colecciones
Dictionary (or hash or map)
{123:mi casa, 234:casa de pepito}
Set
set('hola')

Otros types
unicode, buffer, xrange, frozenset, file
Tipos types en Python / Diccionarios

1 >>> extension_uaq= {"java" : 3232, "lmlo" : 7575, "pdvr" : 7777}


2 >>> extension_uaq
{'pdvr': 7777, 'java': 3232, 'lmlo': 7575}
3 >>> extension_uaq["lmlo"]
7575
4 >>> extension_uaq.keys()
['pdvr', 'java', 'lmlo']
5 >>> extension_uaq.has_key("pdvr")
True
Tipos types en Python / Conjuntos (set)

1 >>> cesta = ['pera', 'naranja',


... 'platano']
>>> frutas = set(cesta)
>>> frutas
set(['pera', 'naranja', 'platano'])
>>> 'naranja' in frutas
True
>>> 'melon' in frutas
False
>>> a = set('abracadabra')
>>> a
set(['a', 'r', 'b', 'c', 'd'])
Tipos types en Python / Nmeros
Enteros Reales Complejos
1 >>> 1234 1 >>> 1.234 1 >>> complex(2, 1J)
1234 1.234 (2, 1J)

2 >>> 99999999L 2 >>> 123.4e-2 2 >>> 1j * 1J


99999999L 123.4e-2 (-1+0j)

3 >>> (16-3*2)/2 3 >>> 7.0 / 2 3 >>> a = 3.0 + 4.0j


5 3.5 4 >>> a.real
3.0

4 >>> 7 / 2 4 >>> 2.0**3 5 >>> a.imag


3 8.0 4.0

5 >>> 7 % 2 5 >>> round(9.6) 6 >>> abs(a)


1 10 5.0
Asignaciones

Asignacin = Asignaciones mltiples


>>> valor = 9.5 >>> a, b, c = 10, 20, 30
>>> valor >>> a
9.5 10
>>> x = y = 100 >>> b
>>> x 20
100 >>> c
>>> y 30
100
Asignaciones y otros operadores

Asignacin variable = 10
y = abs( x )
z = complex( r, i )

Potencia ** 2**8 = 256


Floor division // 9//2 = 4

Operaciones comunes
+= -= *= /= %= **= //=
No soportadas ++ y - -
Asignaciones y comparaciones
Asignacin =
>>> valor = 9.5
>>> a, b, c = 10, 20, 30
>>> x = y = 100

Igualdad == y diferencia !=
>>> x = 5
1 >>> prueba = x == 5
>>> print prueba
True
2 >>> prueba = x != 5
>>> print prueba
False
Errores y excepciones
Errores
ZeroDivisionError
NameError
TypeError

Excepciones
def division_segura(a,b):
try:
return a / b
except ZeroDivisionError:
print "Error: division por cero!"
except:
print "Error inesperado..."
return None
Operadores de comparacin

Operadores relacionales
< > <= >= == !=

if valor < 0:
print ' el valor es negativo'
elif valor == 0:
print 'el valor es cero'
else:
print 'el valor es positivo'
Operadores de comparacin (cont.)

str1 = "Abc Def"


str2 = "Abc def"

if str1 == str2 :
print "El string es igual !!"
else :
print "El string es diferente!!"
Operadores de comparacin (cont.)
name1 = "Smith, John";
name2 = "Smith, Jane";

if name1 < name2 :


print "Name1 est primero en el orden"
elif name1 > name2 :
print "Name2 est primero en el orden"
else :
print "Los nombres name1 y name2 son los mismos"

if "Smith" in name1 :
print name1
Operadores lgicos
Operadores lgicos
or
and

Ejemplos
>>> x = 15
>>> prueba = x < 5 or (x > 10 and x <= 20)
>>> print prueba
True
>>> prueba = x < 5 or 10 < x <= 20
>>> print prueba
True
Operador None

Usar el operador None para las referencias a


null.

result = name1 is None


result2 = name1 == None

[Nota] Utilice siempre None, en Python NO existe


la instruccin Null !
Condicionales if

Instruccin if ... [elif_1] ... [elif_2] ... [elif_n] ... [else]

x = input('Teclee un nmero entero: ')


if x == 0:
print 'Cero' [NOTA]
elif x == 1: En Python los : indican
print 'Uno' que una nueva seccin de
cdigo va a ser definida y por
elif x < 0:
lo tanto DEBE estar
print 'Negativo' indentada.
else:
print 'Positivo'
Ciclos while
Suma = 0
i=1
while i <= 100:
Suma = Suma + i
i=i+1
print "El total del ciclo = ", Suma

while True:
pass # Busy-wait for keyboard interrupt (Ctrl+C)
Ciclos for
a = ['Mary', 'had', 'a', 'little', 'lamb']
for <loop-var> in <object> :
for i in range(len(a)):
<statement-block>
print i, a[i]
0 Mary
for i in xrange( 2, 20 ) :
1 had
print i
2a
3 little
for i in xrange( 20, 0, -2 ) :
4 lamb
print i

a = ['Mary', 'had', 'a', 'little', 'lamb']


for i in xrange( 20 ) :
for i in a :
print i
print a
Instrucciones else, break y continue
for n in range(2, 10): for n in range(2, 10):
for x in range(2, n): for x in range(2, n):
if n % x == 0: if n % x == 0:
print n, '=', x, '*', n/x print n, '=', x, '*', n/x

break break
else:
else:
print n, 'es numero primo'
print n, 'es numero primo'

for num in range(2, 10):


for num in range(2, 10):
if num % 2 == 0:
if num % 2 == 0:
print("Es un numero par", num)
print("Es un numero par", num) # continue
continue print("Es un numero", num)
print("Es un numero", num)
Funciones
def sumRange( primero, ultimo ) :
total = 0
i = primero
while i <= ultimo :
total = total + i
i=i+1
return total

def initlog(*args):
pass # Remember to implement this!
Funciones Valores por default
def sumRange2( primero, ultimo, step = 1 ) :
total = 0
i = primero
while i <= ultimo :
total = total + i
i = i + step
return total

theSum = sumRange2(ultimo= 100, step = 3, primero = 1)


theSum = sumRange2(1, 20, 2)
Funciones Valores por default

def figura(nombre, color_borde='negro', color_fondo='blanco', \


altura=10, longitud=10):
print 'Nombre de la figura:', nombre
print 'Colores: borde=%s, fondo=%s' %(color_borde, color_fondo)
print 'Dimensiones: alto=%d, largo=%d' %(altura, longitud)

>>> figura('elipse',altura=50)
Nombre de la figura: elipse
Colores: borde=negro, fondo=blanco
Dimensiones: alto=50, largo=10
Funciones, conjuntos de parmetros
def mi_rutina(a, *parametros, **palabras_clave):
for p in parametros:
print p , # Notar la coma al final de la instruccin
print a
codigos = palabras_clave.keys()
for c in codigos:
print c, ':', palabras_clave[c]

mi_rutina('abc',10,20,30,x='aaa',y='bbb',z='ccc')
10 20 30 abc
y : bbb
x : aaa
z : ccc

mi_rutina('abc', 10, 15, 18, 20, 30, x='aaa', y='bbb', z='ccc', w='fff')
Definicin de funciones con lambda
def incrementa(n):
return lambda x, n=n: x + n # lambda ayuda a crear funciones annimas
>>> f = incrementa(10) # lambda < arguments > : < expresions >
>>> f(0)
10
>>> f(1)
11

def funcion_compuesta(f1, f2):


return lambda x, f1=f1, f2=f2: f1(f2(x))
>>> from math import sin, cos
>>> sincos = funcion_compuesta(sin, cos) # se definen las funciones f1 y f2
>>> print sincos(3) # se evala el valor 'x'
-0.836021861538
>>> print sin(cos(3))
-0.83602186153
Herramientas de programacin funcional
filter 1 >>> def pares(x): return (x % 2) == 0
>>> filter(pares, range(10))
[0, 2, 4, 6, 8]
map
2 >>> def quadrado(x): return x*x
>>> map(quadrado, range(10))
reduce [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

3 >>> def mi_suma(x,y): return x+y


>>> reduce(mi_suma, range(10))
45
Clases (class)
Ejemplo:

class agenda:
def __init__(self, cont=None): # constructor
self.contenido = cont or [ ]
def adicionar(self, nombre): # funcin append
self.contenido.append(nombre)
>>> a = agenda()
>>> a.adicionar('Fulano')
>>> a.adicionar('Sutano')
>>> a.contenido
['Fulano', 'Sutano']
Clases (class): Sobrecarga de operadores
class racional:
def __init__(self, num, den): # constructor
self.num = num
self.den = den
def __str__(self): # funcion _str_
return str(self.num) + '/' + str(self.den)
def __mul__(r1, r2): # funcion _mul_
m = racional(r1.num * r2.num, r1.den * r2.den)
return m
>>> a = racional(1,3)
>>> b = racional(5,2)
>>> c = a * b
>>> print c.num, c.den, c
5 6 5/6
Clases (class): Herencia

Herencia
class NomebreClaseDerivada1(NombreClasseBase):

Herencia mltiple
class NombreClaseDerivada2(Base1, Base2, Base3)

http://docs.python.org/tutorial/classes.html
Lectura y escritura de archivos
>>> f = open( '/tmp/texto.txt', 'r' ) # 'r', 'w', 'a', 'b', 't', '+'
>>> f.readline() # Lee la primera lnea del archivo
'Esto es lo que est dentro del archivo.\n'
>>> f.readline() # Lee la siguiente lnea del archivo
'Esta es la segunda lnea del archivo.\n
>>> f.read(4) # Lee los siguientes 4 caracteres
'Esta'
>>> f.read( ) # Lee el resto del archivo
' es la tercera lnea del archivo.\n'
>>> f.close()

>>> g = open( '/tmp/nuevo_texto.txt', 'w' )


>>> g.write('Escribiendo este texto\n') # Remplaza el texto anterior con esta lnea
>>> g.flush()
>>> g.close()
Mdulos
Mdulos
Archivos texto con cdigo de Python
Archivo compilado en C/C++

1 >>> import math


>>> dir(math)
>>> a = math.cos(math.pi)
2 >>> from math import sin, cos, tan
>>> a = cos(math.pi)
3 >>> from math import *
>>> a = cos(pi)
4 >>> from random import randint
>>> randint(0,10)
6
Objetos y mtodos

Construccin
from datetime import date, time
today = date( 2006, 8, 25 )
No se requiere el operando new para definir
nuevas instacias.

Mtodos
which_day = today.weekday()
Built-in
Exibicin de atributos dir()
1 >>> dir()
['__builtins__', '__doc__', '__name__']
2 >>> dir(__builtins__) # muestra los mtodos built-ins

Ayuda help( )
>>> help(max)
Help on built-in function max in module __builtin__:
max(...)
max(iterable[, key=func]) -> value
max(a, b, c, ...[, key=func]) -> value
With a single iterable argument, return its largest item.
With two or more arguments, return the largest argument.
Ejemplo de archivo de Python (*.py)

#! /usr/bin/env python

x = 34 - 23 # Primer comentario.
y = Hola # Segundo comentario.
z = 3.45
if z == 3.45 or y == Hola:
x=x+1
y = y + Mundo! # Concatenacin del string

print x
print y
Comentarios en Python
Comience los comentarios con el smbolo de gato # , el resto de la
lnea ser ignorado por el interprete. Recuerde No usar acentos !!!!

Se puede incluir una nota aclaratoria documentation string en la


primera lnea despus de la definicin de cada nueva funcin o clase
que se implemente. Se usan triples comillas para el caso.

El ambiente de desarrollo, el depurador debugger , y otras


herramientas lo emplean. Por lo que es una buena prctica el incluirla
una por cada funcin.

def mi_funcion(x, y):


This is the docstring. This
function does blah blah blah.
# El codigo de la funcin debe comenzar aqu...
Espacios en blanco en Python
Los espacios en blanco son considerados e interpretados
por Python: en especial en la indentacin y colocacin de
nueva lneas.
Use una nueva lnea para finalizar una line de cdigo.
(No se usa punto y coma ; como en C/C++ o Java.)
Use la diagonal invertida \ cuando necesite continuar en la
siguiente lnea para terminar la instruccin)
No use corchetes { } para delimitar los bloques de cdigo en
Python... en su lugar Utilice una indentacin consistente. La
primer lnea con una nueva indentacin se le considera como
fuera de ese bloque.
Los dos puntos : frecuentemente son un indicador de que
un nuevo bloque de cdigo va a iniciar.
Notas: Python
La asignacin utiliza = , mientras que para la comparacin se usa == .
Para las operaciones matemticas se usan operadores comnmente empleados en
otros lenguajes (i.e.: + - * / % ).
Uso especial de + para la concatenacin de cadenas strings.
Uso especial de % para el formateo de la cadena.

Para las operaciones lgicas se usan palabras (and, or, not) no smbolos (&&, ||, !).

Slo existe la instruccin print (no existen fprint, fprintf, ... )

La primera asignacin de la variable la CREA.


Los tipos types de las variables no requieren ser declaradas con antelacin.
Python determina el tipo type de las variables internamente.

Los scripts en Python pueden hacerse ejecutables, como si se tratase de scripts del
shell al incluir en la primera lnea: #! /usr/bin/env python

Você também pode gostar