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 [Link](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
[Link]
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.
[Link]=”rojo”
También para acceder al comportamiento (métodos) de un objeto desde el objeto.
[Link]()
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: ", [Link])
print("el coche tiene: ", [Link])
[Link]()
print([Link]())
Clase 27 POO IV(Programación Orientada a Objetos)
Utilizando un Constructor: def __init__(self):
class coche():
def __init__(self):
[Link]=250
[Link]=120
[Link]=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 ", [Link], "ruedas. Un ancho de: ", [Link], "y un
largo de ", [Link])
micoche=coche()
print([Link](True))
[Link]()
print("acontinuacion creamos el segundo objeto: ")
micoche2=coche()
print([Link](False))
[Link]()
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")
[Link]="ok"
[Link]="ok"
[Link]="cerradas"
if ([Link]=="ok" and [Link]=="ok" and [Link]=="cerradas"):
return True
else:
return False
micoche=coche()
print([Link](True))
[Link]()
print("acontinuacion creamos el segundo objeto: ")
micoche2=coche()
print([Link](False))
[Link]()
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):
[Link]=marca
[Link]=modelo
[Link]=False
[Link]=False
[Link]=False
def arrancar(self):
[Link]=True
def acelerar(self):
[Link]=True
def frenar(self):
[Link]=True
def estado(self):
print("marca: ", [Link], "\nModelo: ", [Link],"\nEn marcha: ",
[Link],"\nAcelerando: ",
[Link],"\nFrenando: ", [Link])
class moto(vehiculos):
pass
mimoto=moto("honda","CBR")
[Link]()
Clase 30 POO VII Herencia Múltiple
class vehiculos():
def __init__(self, marca, modelo):
[Link]=marca
[Link]=modelo
[Link]=False
[Link]=False
[Link]=False
def arrancar(self):
[Link]=True
def acelerar(self):
[Link]=True
def frenar(self):
[Link]=True
def estado(self):
print("marca: ", [Link], "\nModelo: ", [Link],"\nEn marcha: ",
[Link],"\nAcelerando: ",
[Link],"\nFrenando: ", [Link])
class furgoneta(vehiculos):
def carga(self,cargar):
[Link]=cargar
if([Link]):
return "la furgoneta es cargada"
else:
return "la furgoneta no esta cargada"
class moto(vehiculos):
hcaballito=""
def caballito(self):
[Link]="Voy haciendo el caballito"
def estado(self):
print("marca: ", [Link], "\nModelo: ", [Link],"\nEn marcha: ",
[Link],"\nAcelerando: ",
[Link],"\nFrenando: ", [Link],"\n", [Link])
class Velectricos():
def __init__(self):
[Link]=100
def cargarEnergia(self):
[Link]=True
mimoto=moto("honda","CBR")
[Link]()
[Link]()
mifurgoneta=furgoneta("Renault","kangoo")
[Link]()
[Link]()
print([Link](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):
[Link] = nombre
[Link] = edad
[Link] = lugar
def descripcion(self):
print("nombre: ", [Link],"edad: ",[Link],"lugar: ", [Link])
class empleado(persona):
def __init__(self, salario, antiguedad, nombre_empleado, edad_empleado,
lugar_empleado):
super().__init__(nombre_empleado,edad_empleado,lugar_empleado)
[Link] =salario
[Link] =antiguedad
def descripcion(self):
super().descripcion()
print("salario: ",[Link],"antiguedad:", [Link])
Manuel=empleado(1500, 15, "Manuel",55,"colombia")
[Link]()
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):
[Link]()
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:
[Link]
- 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 ([Link]()==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 [Link] 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 [Link] 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