Sei sulla pagina 1di 10

CURSO PYTHON

Clase 19 GENERADORES 1
>Imprime números pares de uno en uno
def genera(limite):
num=1
while num<limite:
yield num*2
num=num+1
devuelve=genera(10)
print(next(devuelve))
print("aqui mas codigo")
print(next(devuelve))

Clase 20 GENERADORES 2

>Devuelve ciudades uno en uno hasta dos


def devulveciudades(*ciudades):
for elemento in ciudades:
yield elemento
ciudades_devueltas=devulveciudades("Madrid","Paris","Londres", "Valencia")
print (next(ciudades_devueltas))
print (next(ciudades_devueltas))

>Devuelve dos primeros subelementos del primer elemento


def devulveciudades(*ciudades):
for elemento in ciudades:
for subelemento in elemento:
yield subelemento
ciudades_devueltas=devulveciudades("Madrid","Paris","Londres", "Valencia")
print (next(ciudades_devueltas))
print (next(ciudades_devueltas))
M
a

>Devuelve dos primeros subelementos del primer elemento utilizando yield from
def devulveciudades(*ciudades):
for elemento in ciudades:
#for subelemento in elemento
yield from elemento
ciudades_devueltas=devulveciudades("Madrid","Paris","Londres", "Valencia")
print (next(ciudades_devueltas))
print (next(ciudades_devueltas))

Clase 21 EXCEPCIONES 1

>Son errores que ocurren durante la ejecución del programa.


>La instrucción causante del error debe ir
>ZeroDivisionError es un error cuando se divide entre cero.
Def divide(num1,num2):
try:
return num1/num2
except ZeroDivisionError:
print(“no se puede divider entre cero”)
return “Operación Erronea”

Clase 22 EXCEPCIONES 2
>Entreda de texto en vez de numero.
>escribiendo excepciones el programa se ejecuta sin mostrar error.

While True:
try:
op1=(int(input(“introduce número 1”)))
op2=(int(input(“introduce número 2”)))
break
except ValueError:
print(“valores incorrectos, inténtalo de nuevo”)

 El programa calcula varias excepciones.


 ValueError, que nos aparece cunado metemos texto en vez de numero
 ZeroDivisionError, cuando dividimos entre cero
def divide():
try:
op1=(float(input("introduce primer numero: ")))
op2=(float(input("introduce segundo numero: ")))
print("la division es :" + str(op1/op2))
except ValueError:
print("el valor introducido es erróneo")

except ZeroDivisionError:
print("no se puede dividir entre zero")
print("Calculo finalizado")

divide()
 Otra Manera pero poco recomendada ya que no se especifica el error
def divide():

try:
op1=(float(input("introduce primer numero: ")))
op2=(float(input("introduce segundo numero: ")))
print("la division es :" + str(op1/op2))

except:
print("Ha ocurrido un error")
print("Calculo finalizado")

divide()
 El ejmplo con finally:
 Lo que va en finally se ejecuta si o si.
def divide():
try:
op1=(float(input("introduce primer numero: ")))
op2=(float(input("introduce segundo numero: ")))
print("la division es :" + str(op1/op2))
except ValueError:
print("el valor introducido es erróneo")

except ZeroDivisionError:
print("no se puede dividir entre zero")

finally:
print("Calculo finalizado")

divide()
 Ejemplo sin except :
 El programa detecta el error pero ejecuta lo que va en finally.
def divide():
try:
op1=(float(input("introduce primer numero: ")))
op2=(float(input("introduce segundo numero: ")))
print("la division es :" + str(op1/op2))
finally:
print("Calculo finalizado")

divide()

Clase 23 EXCEPCIONES 3
Lanzar Excepciones de forma intencionada (con el código Raise)
Programa que lanza intencionadamente el error cuando ponemos un valor incorrecto
def evaluaEdad(edad):
if edad<0:
raise TypeError("No se permiten edades negativas")

if edad<20:
return "eres muy joven"
elif edad<40:
return "eres joven"
elif edad<65:
return "eres maduro"
elif edad<100:
return"cuidate"
print(evaluaEdad(-15))
Programa que calcula la raíz cuadrada de un número y te avisa si el número que introdujiste es
negativo.
import math
def calcularaiz(num1):
if num1<0:
raise ValueError ("El numero no puede ser negativo")
else:
return math.sqrt(num1)
op1=(int(input("introduce un numero: ")))
try:
print (calcularaiz(op1))
except ValueError as ErrordeNumeroNegativo:
print(ErrordeNumeroNegativo)
print("programa terminado")

Clase 24 POO I (Programación Orientada a Objetos)


Paradigmas de Programación:
 Programación Orientada a Procedimientos (antiguo)
 Programación Orientada a Objetos
Programación Orientada a Procedimientos (antiguo)
 Basic
 Fortrant
 Cobol

 Desventajas:

o Código grande
o Difícil de descifrar
o Poco reutilizable
o Fallo en alguna línea el programa falla
o Aparece código espagueti (go to , go sub)
o Difícil de depurar

Programación Orientada a Objetos


Traslada los objetos de la vida real al código
Los objetos de la vida real tienen: estado, comportamiento, propiedades.
 C++
 Java
 Visual.Net

 Ventajas:
o Modularización
o Muy reutilizable, herencia
o Si existe fallo, el programa continúa
o Encapsulamiento
 Vocabulario
o Clase
o Objeto
o Modularización
o Encapsulamiento
o Herencia
o Polimorfismo

Clase 25 POO II (Programación Orientada a Objetos)


Terminología
 Clase: Conjunto de características de un modelo.
 Instancia, Ejemplar, Objeto: Ejemplar perteneciente a una clase, comparten las
características de la clase.
 Modularización: El programa se divide en varios módulos, pueden utilizar estos
módulos en otros programas.
 Encapsulación: el contenido de un programa o clase etc. están protegidos del exterior.
 Métodos de Acceso: permiten la conexión entre módulos.
 Nomenclatura del punto: para acceder a las propiedades de un objeto.
Micoche.color=”rojo”
También para acceder al comportamiento (métodos) de un objeto desde el objeto.
Micoche.arrancar()
Clase 26 POO III (Programación Orientada a Objetos)
Clases en Python:
Programa que define una clase con sus propiedades y métodos además creamos una instancia
de la clase.
class coche():
largo=250
ancho=120
ruedas=4
en_marcha=False
def arrancar(self):
self.en_marcha=True
def estado(self):
if(self.en_marcha):
return "coche esta marcha"
else:
return "coche apagado"
micoche=coche() #instancia de una clase
print("el largo del coche es: ", micoche.largo)
print("el coche tiene: ", micoche.ruedas)
micoche.arrancar()
print(micoche.estado())

Clase 27 POO IV(Programación Orientada a Objetos)


Utilizando un Constructor: def __init__(self):
class coche():
def __init__(self):
self.largo=250
self.ancho=120
self.ruedas=4
self.en_marcha=False
def arrancar(self,arrancamos):
self.en_marcha=arrancamos
if(self.en_marcha):
return "coche esta marcha"
else:
return "coche apagado"
def estado(self):
print("El coche tiene ", self.ruedas, "ruedas. Un ancho de: ", self.ancho, "y un
largo de ", self.largo)
micoche=coche()
print(micoche.arrancar(True))
micoche.estado()
print("acontinuacion creamos el segundo objeto: ")
micoche2=coche()
print(micoche2.arrancar(False))
micoche2.estado()
Encapsulando una propiedad de un clase: self.__ruedas

Clase 28 POO V (Programación Orientada a Objetos) Encapsulación de


Métodos
Ejemplo:
class coche():
def __init__(self):
self.__largo=250
self.__ancho=120
self.__ruedas=4
self.__en_marcha=False
def arrancar(self,arrancamos):
self.__en_marcha=arrancamos

if (self.__en_marcha):
chequeo=self.__chequeo()
if(self.__en_marcha and chequeo):
return "coche esta marcha"

elif(self.__en_marcha and chequeo==False):


return "Algo a ido mal, no podemos arrancar"
else:
return "coche apagado"
def estado(self):
print("El coche tiene ", self.__ruedas, "ruedas. Un ancho de: ", self.__ancho, "y
un largo de ", self.__largo)
def __chequeo(self):
print("realizando chequeo interno")
self.gasolina="ok"
self.aceite="ok"
self.puertas="cerradas"
if (self.gasolina=="ok" and self.aceite=="ok" and self.puertas=="cerradas"):
return True
else:
return False
micoche=coche()
print(micoche.arrancar(True))
micoche.estado()
print("acontinuacion creamos el segundo objeto: ")
micoche2=coche()
print(micoche2.arrancar(False))
micoche2.estado()
Clase 29 POO VI Herencia
Sirve para reutilizar el código en caso de crear objetos similares.
Crear una superclase con propiedades o métodos comunes a objetos similares.

Ejemplo donde la clase moto hereda las propiedades y métodos de la superclase vehículos:

class vehiculos():
def __init__(self, marca, modelo):
self.marca=marca
self.modelo=modelo
self.enmarcha=False
self.acelera=False
self.frena=False
def arrancar(self):
self.enmarcha=True
def acelerar(self):
self.acelera=True
def frenar(self):
self.frena=True
def estado(self):
print("marca: ", self.marca, "\nModelo: ", self.modelo,"\nEn marcha: ",
self.enmarcha,"\nAcelerando: ",
self.acelera,"\nFrenando: ", self.frena)
class moto(vehiculos):
pass
mimoto=moto("honda","CBR")
mimoto.estado()

Clase 30 POO VII Herencia Múltiple


class vehiculos():
def __init__(self, marca, modelo):
self.marca=marca
self.modelo=modelo
self.enmarcha=False
self.acelera=False
self.frena=False
def arrancar(self):
self.enmarcha=True
def acelerar(self):
self.acelera=True
def frenar(self):
self.frena=True
def estado(self):
print("marca: ", self.marca, "\nModelo: ", self.modelo,"\nEn marcha: ",
self.enmarcha,"\nAcelerando: ",
self.acelera,"\nFrenando: ", self.frena)

class furgoneta(vehiculos):
def carga(self,cargar):
self.cargado=cargar
if(self.cargado):
return "la furgoneta es cargada"
else:
return "la furgoneta no esta cargada"

class moto(vehiculos):
hcaballito=""
def caballito(self):
self.hcaballito="Voy haciendo el caballito"
def estado(self):
print("marca: ", self.marca, "\nModelo: ", self.modelo,"\nEn marcha: ",
self.enmarcha,"\nAcelerando: ",
self.acelera,"\nFrenando: ", self.frena,"\n", self.hcaballito)
class Velectricos():
def __init__(self):
self.autonomia=100
def cargarEnergia(self):
self.cargado=True
mimoto=moto("honda","CBR")
mimoto.caballito()
mimoto.estado()
mifurgoneta=furgoneta("Renault","kangoo")
mifurgoneta.arrancar()
mifurgoneta.estado()
print(mifurgoneta.carga(True))
class BicicletaElectrica(vehiculos,Velectricos):
pass
mibici=BicicletaElectrica("orbea","df123")

Clase 31 POO VIII Herencia III (super,isinstance)

class persona():
def __init__(self, nombre, edad, lugar):
self.nombre = nombre
self.edad = edad
self.lugar = lugar
def descripcion(self):
print("nombre: ", self.nombre,"edad: ",self.edad,"lugar: ", self.lugar)

class empleado(persona):
def __init__(self, salario, antiguedad, nombre_empleado, edad_empleado,
lugar_empleado):
super().__init__(nombre_empleado,edad_empleado,lugar_empleado)
self.salario =salario
self.antiguedad =antiguedad
def descripcion(self):
super().descripcion()
print("salario: ",self.salario,"antiguedad:", self.antiguedad)
Manuel=empleado(1500, 15, "Manuel",55,"colombia")
Manuel.descripcion()
print(isinstance(Manuel,empleado))
Clase 32 POO IX Polimorfismo
Un objeto puede cambiar de forma.
Python es de tipado dinámico.
class coche():
def desplazamiento(self):
print("Me desplazo con cuatro ruedas")
class moto():
def desplazamiento(self):
print("Me desplazo con dos ruedas")
class camion():
def desplazamiento(self):
print("Me desplazo con seis ruedas")
def desplazamientovehiculo(vehiculo):
vehiculo.desplazamiento()
mivehiculo=coche()
desplazamientovehiculo(mivehiculo)

Clase 33 Métodos de Cadenas (String)


 Upper()
 Lower()
 Capitalize()
 Count()
 Find()
 Isdigit()
 Isalum()
 Isalpha()
 Split()
 Strip()
 Replace()
 Rfind()
Página de documentación de Python:
Sourceforge.net
- Ejemplo donde se utiliza isdigit (que devuelve True si una variable es numérica
y False si no lo es)
edad=input("introduce la edad: ")
while (edad.isdigit()==False):
print("introduce un valor numerico")
edad=input("introduce la edad :")
if (int(edad)<18):
print("no puede pasar")
else:
print("puede pasar")

Clase 34 Módulos
Archivo con extensión .py .pyc(Python compilado), que posee su propio espacio de nombre y
que puede contener variables, funciones, clases o incluso otros módulos.
Sirven para organizar y reutilizar el código (modularización, reutilización).
Se crea con extensión .py.
Abrimos un nuevo archivo, lo nombramos funciones.py y desarrollamos este código.
def sumar(op1,op2):
print("el resultado de la suma es: ", op1+op2)
def restar(op1,op2):
print("el resultado de la resta es: ", op1-op2)
def multiplicar(op1,op2):
print("el resultado de la multipplicación es: ", op1*op2)

Abrimos otro archivo, lo nombramos uso.py y desarrollamos este código.


from funciones import *
sumar(7,5)
restar(7,5)
multiplicar(7,5)
Nos devuelve los resultados correctamente.

Los archivos tienen que estar en el mismo directorio o podemos usar “paquetes”.
Clase 35 Paquetes
Son directorios donde se almacenan módulos relacionados entre sí.
Se crea una carpeta con un archivo __init__.py

Potrebbero piacerti anche