Programando con Python
-
Upload
mario-j-inga-cahuana -
Category
Engineering
-
view
542 -
download
3
description
Transcript of Programando con Python
Programando conProgramando con
PorPor: Mario J.I.C.: Mario J.I.C. @mario21ic@mario21ic
¿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
FlujoFlujo
$ python codigo.py
codigo.pyc VM
Máquina
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.
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])
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)
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
Operadores de AsignaciónOperadores de Asignación
● = asigna valor
a = 12
● +=
a += 5
● -=
a -= 15
● *=
a *= 3
● /=
a /= 2
● **=
a **= 3
● //=
a //= 10
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
Operadores de ComparaciónOperadores de Comparación
● >
0 > -1
● <
1 < 2
● >=
2 >= 2
● <=
1 <= 2
● ==
'xD' == 'xD'
● !=
3 != '3'
CondicionalesCondicionales
● if
if True:
...● else
if len(variable) > 0:
...
else:
...
● elif
if condicion1:
…
elif condicion2:
…
else:
…
● switch case
NO HAY
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
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'
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
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)
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'
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.
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.
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
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
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
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')
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')
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()
ArquitecturaArquitectura
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
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()
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()
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()
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
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)
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
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()
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
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'
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.
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
Excepciones: LevantamientoExcepciones: Levantamiento
try:
raise IndexError
except IndexError:
print 'got exception'
Excepciones: PersonalizacionExcepciones: Personalizacion
class AlreadyGotOne(Exception):
pass
def grail():
raise AlreadyGotOne()
try:
grail()
except AlreadyGotOne:
print 'got exception customized'
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.