Programando con Python

40
Programando con Programando con Por Por : Mario J.I.C. : Mario J.I.C. @mario21ic @mario21ic

description

Archivos de ejemplos de cada sesión http://www.4shared.com/zip/ZhFxx9_oce/python_curso.html

Transcript of Programando con Python

Page 1: Programando con Python

Programando conProgramando con

PorPor: Mario J.I.C.: Mario J.I.C. @mario21ic@mario21ic

Page 2: Programando con Python

¿Qué es Python?¿Qué es Python?

● Guido van Rossum

● Lenguaje interpretado

● Multiparadigma.- orientado a objetos, imperativo y funcional.

● Multiplataforma

● Tipado dinámico y fuerte

● Sintáxis limpia con indentación

● Pilas ya cargadas

● Opensource

Page 3: Programando con Python

FlujoFlujo

$ python codigo.py

codigo.pyc VM

Máquina

Page 4: Programando con Python

ImplementacionesImplementaciones

● Cpython.- compila a bytecode, para ser interpretado, para ser ejecutado en la virtual machine.

● Jython.- compila codigo python a Java bytecode, para ser ejecutado en JVM.

● IronPython.- Python para .Net

● Pypy.- Python sobre python.

Page 5: Programando con Python

Tipos básicosTipos básicos

● Numéricos:

● Cadenas:

● Booleanos:

– True

– False● None

Integer Float Complex

2 5.0 52.3j

Comilla simple Comilla doble Comilla triple

'Comilla simple' “Comilla doble” “““Triple multilinea”””

Unicode Raw Formateo

u'Unicode' r'C:\\home' “Formateo \nSegunda: %s \t tab entero %d\nlista: %s" % ('xD', 12, ['xd', 21])

Page 6: Programando con Python

Tipos básicos - operacionesTipos básicos - operaciones

● Cadena:

cadena = "Hola mundo"

print "cadena:",cadena

print "lower:",cadena.lower()

print "upper:",cadena.upper()

print "find mundo:",cadena.find('mundo')

print "find e:",cadena.find('e')

print "index mundo:",cadena.index('mundo')

#print "index e:",cadena.index('e')

for c in cadena:

print c

● String:

str(10.0)● Float:

flotante = 12.0

flotante.is_integer()

● *Casting:

– Float:

flotante = float('12.2')– Integer:

entero1 = int('12')

entero2 = int(flotante)

● *Otros:

– Tamaño: len(cadena)

– Tipo: type(variable)

Page 7: Programando con Python

Operadores aritméticosOperadores aritméticos

Suma Resta Negación

2 + 2 2 - 1 -3

Multiplicación Exponente División

2 * 3 3 ** 2 6 / 2

Divisón entera Módulo

3.5 // 2 7 % 2

Page 8: Programando con Python

Operadores de AsignaciónOperadores de Asignación

● = asigna valor

a = 12

● +=

a += 5

● -=

a -= 15

● *=

a *= 3

● /=

a /= 2

● **=

a **= 3

● //=

a //= 10

Page 9: Programando con Python

Operadores lógicosOperadores lógicos

● And

● Or

● Not

True True = True

True False = False

False True = False

False False = False

True True = True

True False = True

False True = True

False False = False

True = False

True = True

Page 10: Programando con Python

Operadores de ComparaciónOperadores de Comparación

● >

0 > -1

● <

1 < 2

● >=

2 >= 2

● <=

1 <= 2

● ==

'xD' == 'xD'

● !=

3 != '3'

Page 11: Programando con Python

CondicionalesCondicionales

● if

if True:

...● else

if len(variable) > 0:

...

else:

...

● elif

if condicion1:

elif condicion2:

else:

● switch case

NO HAY

Page 12: Programando con Python

Operador TernarioOperador Ternario

● Php:

$var1 = 'valor1';

$var2 = ($var1 == 'valor') ? 'valor2' : 'valor3';

echo $var2;

● Python:

var1 = 'valor1'

var2 = 'valor2' if var1 == 'valor1' else 'valor3'

print “var2:”,var2

Page 13: Programando con Python

Operadores corto circuitoOperadores corto circuito

● Javascript:

persona = true;

if (persona) {

var nombre = “Juan Perez”;

}

var nombre = persona && “Juan Perez”;

//nombre = false;

if (nombre) {

var encargado = nombre;

} else {

var encargado = "Algún nombre";

}

var encargado = nombre || "Algun nombre";

● Python:

persona = True

if persona:

nombre = 'Juan Perez'

nombre = persona and 'Juan Perez'

#nombre = False

if nombre:

encargado = nombre

else:

encargado = 'Algun nombre'

encargado = nombre or 'Algun nombre'

Page 14: Programando con Python

IterativosIterativos

● while

while x <= 10:

print x

● for-in

for x in range(10):

print x

● break

for x in range(10):

if x == 2:

break

● continue

for x in “abac”:

if x != “a”:

continuenuevo += x

Page 15: Programando con Python

Tipos estructuradosTipos estructurados

● Listas

lista = [1, '2', ['tres', 4], '5', '6']

for x in lista:

print x

● Tuplas

tupla = (1, '2', ('tres', 4), '5', '6')

for x in tupla:

print x

● Diccionarios

diccionario = {'clave1': 'valor1', 'clave2': 2, 'subdicc': {'x': 'd'}}

for x,y in diccionario.items():

print “%s - %s” % (x, y)

Page 16: Programando con Python

Tipo estructurados: operacionesTipo estructurados: operaciones

● Listas:

lista[0] = 0

print "lista[0] = 0:",lista

lista.append('siete')

print "lista.append('siete'):",lista

lista.pop()

print "lista.pop():",lista

lista[2][0] = 3

print "lista[3][0] = 3:",lista

print "lista[1]:",lista[1]

print "lista[-2]:",lista[-2]

print "lista[2:]:",lista[2:]

print "lista[-2:1]:",lista[-2:1]

print "lista[:2]",lista[:2]

print "lista[:-2]",lista[:-2]

print "lista[1:4]",lista[1:4]

● Diccionario:

diccionario['clave1'] = 'nuevo_valor1'

diccionario['subdicc']['x'] = 'new_value_sub_dicc'

if 'clave1' in diccionario:

print 'si existe'

Page 17: Programando con Python

Listas por comprensiónListas por comprensión

lista_nueva = []

for x in range(10):

if x%2 == 0:

lista_nueva.append(x*2)

lista_nueva = [x*2 for x in range(10) if x%2 == 0]

"lista_nueva:",lista_nueva

● Nota: No recomendable cuando la expresión es complicada.

Page 18: Programando con Python

EjerciciosEjercicios

● Evaluar las siguientes expresiones, en el orden adecuado:

– a = 'b'

– b = a + 'b'

– 2 * (a + 'c' + b)● Dada una cadena ingresada, imprimirla en el orden invertido.

● Devuelve el tamaño de la primera palabra de una oración.

● Imprimir solo los números pares menores que 10 y mayor que 0.

● Dado una cadena ingresada entre mayúsculas y minúsculas, contar el numero de veces que aparece la vocal “a”.

● Sumar todos los impares que se encuentren entre 0 y 10 (incluyendolo).

● Simular un switch case.

Page 19: Programando con Python

Listas: operacionesListas: operaciones

● Eliminar

del lista[index]

● Fusionar

lista = lista + ['x','d'] + ['x','y']

● Copiar

a = [3,4,5,6]

b = a

a is b => True

b = a[:]

a is b => False

b = list(a)

a is b => False

● Comparación

[1, 2, 3] == [1, 2]

False

[1, 2, 3] == [1, 2, 3]

True

[1, 2, 3] == [1, 2, 4]

False

[1, 2, 3] < [1, 3, 2]

True

[10, 20, 30] > [1, 2, 3]

True

[1, 2, 3] < [1, 2]

False

Page 20: Programando con Python

Tipos especialesTipos especiales

● Ordenados

from collections import OrderedDict

markers = OrderedDict()

markers['ms123'] = 23.9

markers['mk31'] = 12.8

markers['ms92'] = 32.1

● Arrays

import array

miarray = array.array("i", [1,2,3])

miarray.append(4)

● Deque

from collections import deque

mideque = deque(“abc”)

mideque.appendleft('x')

mideque.popleft()

mideque.extendleft(['x', 'y'])

● Counter

from collections import Counter

cnt = Counter()

for word in ['red', 'blue', 'red', 'green', 'blue', 'blue']:

cnt[word] += 1

Page 21: Programando con Python

SetsSets

● Definiendo:

mi_set = set()

mi_set.add('juan')

mi_set.add('viki')

mi_set.add('nati')

otro = set(['juan', 'karina', 'diana'])

● Operaciones:

mi_set.intersection(otro)

mi_set.union(otro)

mi_set.difference(otro)

Mas operaciones: http://esintuitivo.blogspot.com/2008/06/conjuntos-en-python.html

Page 22: Programando con Python

FuncionesFunciones

● Simple:

def funcion_simple():

return “xD”

print funcion_simple()

● Parametros:

def funcion_parametros(cadena):

if cadena is not None:

print cadena

print funcion_parametros(“funcion parametros”)

● Parametros valores defecto:

def funcion_param_default(cadena1, cadena2='cad2', cadena3='cad3'):

return cadena1 + “ ” + cadena2 + “ “ + cadena3

print funcion_param_default('micad1', cadena3='micad3')

Page 23: Programando con Python

FuncionesFunciones

● Multi params:

def funcion_multi_param(cadena1, cadena2='cad2', cadena3='cad3', *args):

print "args:",args

return cadena1+" "+cadena2+" "+cadena3

print funcion_multi_param('xD', 'micad2', 'micad3', 'micad4', 'micad5')● Multi key params:

def funcion_multi_key_param(cadena1, cadena2='cad2', cadena3='cad3', **kwargs):

print "kwargs:",kwargs

return cadena1+" "+cadena2+" "+cadena3

print funcion_multi_key_param('xD', 'micad2', 'micad3', cad4='micad4', cad5='micad5')

Page 24: Programando con Python

Módulos & PackagesMódulos & Packages

● Módulos:

from mimodulo import mifuncion

print mifuncion()

● Packages: se crea un archivo __init__.py dentro de una carpeta

from mipackage.mimodulo import mifuncion

print mifuncion()

Page 25: Programando con Python

ArquitecturaArquitectura

Page 26: Programando con Python

EjerciciosEjercicios

● De una lista, eliminar los items ingresados por 3 inputs e imprimirlo.

● Acorde a una lista, simular un paginador, 12 items y mostrar 5 por página, cuyo page será ingresado por input, imprimir los items.

● Dado 2 conjuntos, imprimir las 3 operaciones básicas (interseccion, diferencia, unión).

● Escriba una función que devuelva el valor de una raíz cúbica de un valor ingresado.

● Diseñe una función que calcule la multiplicación de todos los números que componen una lista.

● Definir una función que dada una cadena x, devuelva otra cuyo contenido sea el resultado de concatenar 6 veces por si misma.

● Realizar una función que dada una lista de números, devuelva otra lista que sólo incluya sus números impares.

● Cree una estructura de package como si fuese java “src.main.python.com.scytl.platform” e importar un módulo

Page 27: Programando con Python

POO: Clase y HerenciaPOO: Clase y Herencia

class Humano(object):

def saludar(self, para):

return "Hola " + para

class Persona(Humano):

def __pensar(self):

return “pensando”

def presentarse(self):

return "Me llamo "+self.nombre

juan_perez = Persona()

juan_perez.nombre = "Juan Perez"

print juan_perez.saludar("Pepito")

print juan_perez.presentarse()

juan_perez.__pensar()

Page 28: Programando con Python

POO: ConstructoresPOO: Constructores

class Humano(object):

def saludar(self, para):

return "Hola " + para

class Persona(Humano):

def __init__(self, nombre):

self.nombre = nombre

def presentarse(self):

return "Me llamo "+self.nombre

juan_perez = Persona("Juan Perez")

print juan_perez.saludar("Pepito")

print juan_perez.presentarse()

Page 29: Programando con Python

POO: Sobre escritura de métodosPOO: Sobre escritura de métodos

class Persona(Humano):

def presentarse(self):

return "Me llamo "+self.nombre

def saludar(self, para):

#print "saludar hijo"

#return super(Persona, self).saludar(para)

return "Saludo para: " + para

juan_perez = Persona()

juan_perez.nombre = "Juan Perez"

print juan_perez.saludar("Pepito")

print juan_perez.presentarse()

Page 30: Programando con Python

POO: Clases abstractasPOO: Clases abstractas

from abc import ABCMeta, abstractmethod

class Abstracto(object):

__metaclass__ = ABCMeta

@abstractmethod

def metodo(self):

pass

class Heredado(Abstracto):

def metodo(self):

print "heredado"

>> x = Abstracto()

TypeError: Can't instantiate abstract class Abstracto with abstract methods metodo

>> x = Heredado()

>> x.metodo()

heredado

Page 31: Programando con Python

PolimorfismoPolimorfismo

class Pajaro():

def desplazar(self):

print("Volar")

class Vibora():

def desplazar(self):

print("Arrastrarse")

def mover(animal):

animal.desplazar()

p = Pajaro()

v = Vibora()

p.desplazar()

v.desplazar()

mover(p)

mover(v)

Page 32: Programando con Python

POO: Atributos especialesPOO: Atributos especiales

● __class__ la clase del objeto.

● __class__.__name__ nombre de la clase.

● __dict__ diccionario con los atributos de la clase

● __str__ invocado al momento de hacer print sobre si o str()

● __len__ se invoca al aplicar la funcion len()

● __repr__ se invoca con la funcion repr()

● __iter__ permite iterar sobre una secuencia, como cuando se usa for sencuencia

● __getitem__ para acceder a un objeto secuencialmente o usando un subíndice tipo objeto[n], requiere 2 parámetros.

● __setitem__ para asignarle el valor a una clave

● __delitem__ implementa el borrado de un objeto

Mas: https://docs.python.org/2/reference/datamodel.html

Page 33: Programando con Python

POO: Herencia multiplePOO: Herencia multiple

class C1(object):

def metodo1(self):

return "metodo 1"

def metodo3(self):

return "metodo 3"

class C2(object):

def metodo2(self):

return "metodo 2"

def metodo3(self):

return "metodo 3.1"

class C3(C1,C2):

pass

objeto = C3()

print objeto.metodo1()

print objeto.metodo2()

print objeto.metodo3()

Page 34: Programando con Python

Datos compartidosDatos compartidos

class SharedData(object):

spam = 42

x = SharedData()

y = SharedData()

>> print x.spam, y.spam

42, 42

>> x.spam +=1

>> print x.spam, y.spam

43, 42

>> SharedData.spam = 99

>> print x.spam, y.spam

43, 99

Page 35: Programando con Python

ExcepcionesExcepciones

def fetcher(obj, index):

return obj[index]

x = 'spam'

print fetcher(x, 3)

#print fetcher(x, 4)

try:

fetcher(x, 4)

except IndexError:

print 'got expception'

Page 36: Programando con Python

ExcepcionesExcepciones

● except: captura excepciones que no esten en otro except.

● except name: captura una excepcion específica.

● except name as value: captura una excepcion y la asigna a una variable.

● except (name1, name2): captura cualquiera de las expcepciones listadas.

● except (name1, name2) as value: captura cualquiera y la asigna a una variable.

● else: Se ejecuta si no se presenta ninguna excepcion

● finally: se ejecuta asi se presenten o no excepciones.

Page 37: Programando con Python

Excepciones comunesExcepciones comunes

Error Descripción

RuntimeError Error en el sistema

TypeError Error de tipo de dato

NameError Variable no existe

ValueError Error en casting

Page 38: Programando con Python

Excepciones: LevantamientoExcepciones: Levantamiento

try:

raise IndexError

except IndexError:

print 'got exception'

Page 39: Programando con Python

Excepciones: PersonalizacionExcepciones: Personalizacion

class AlreadyGotOne(Exception):

pass

def grail():

raise AlreadyGotOne()

try:

grail()

except AlreadyGotOne:

print 'got exception customized'

Page 40: Programando con Python

EjerciciosEjercicios

● Crea una clase, que implemente sus métodos pop, push y devuelva cuantos items quedan en la pila.

● Crear una clase con atributos: nombres, apellidos y dni; que al momento de hacer un print sobre una instancia imprima los atributos mencionados.

● Crea una clase abstracta llamada FiguraGeometrica con los atributos nombre, num_lados y los métodos devolver nombre() y calcular area() y extiendala mediante las clases Rectangulo,Circulo, Triangulo y reimplemente las funciones de la superclase en cada una de las subclases.

● Defina una clase EnsaladaFrutas con una atributo frutas que sea inicialmente ['melones', 'pinas', 'manzanas'] y un atributo raciones cuyo valor inicial sea 4. Escriba un metodo init que recibalos argumentos ingredientes (una lista de cadenas) y num raciones (un entero) y guarde losvalores obtenidos en los atributos y frutas y raciones (las que queden)

● En el ejercicio anterior escriba un metodo agregar() que obtenga una cadena de texto y laagregue al final de la lista frutas. Agregue adem´as un metodo servir() que reduzca en uno la cantidad de raciones e imprima "Disfrute", si ya no hay raciones debe imprimir "Disculpe"

● Escriba un programa que itere sobre una lista utilizando un rango superior a la cantidad deelementos de la lista. Cuando se produzca el error, este debe ser capturado por una excepcion e imprimir sus datos, agregue una sentencia finally que imprima la cantidad de elementos dela lista.