Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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 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
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”)
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")
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
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
if (self.__en_marcha):
chequeo=self.__chequeo()
if(self.__en_marcha and chequeo):
return "coche esta marcha"
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()
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")
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 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)
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