Skip to content

Commit a489940

Browse files
authored
Merge pull request mouredev#7800 from idiegorojas/main
#9 - Python
2 parents c63510d + 5d4f7d0 commit a489940

File tree

2 files changed

+245
-0
lines changed

2 files changed

+245
-0
lines changed
Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
# 09 - Herencias
2+
3+
# Clase padre
4+
class Animal:
5+
6+
def __init__(self, nombre, edad):
7+
self.nombre = nombre
8+
self.edad = edad
9+
10+
def sonido(self):
11+
print('Algun sonido')
12+
13+
def presentarse(self):
14+
print(f'Hola, soy {self.nombre}, y tengo {self.edad} años.')
15+
16+
# Clase Hija
17+
class Perro(Animal):
18+
19+
def __init__(self, nombre, edad, raza):
20+
# Llamamos al constructor de la clase padre
21+
super().__init__(nombre, edad)
22+
self.raza = raza
23+
24+
# Sobrescribimos el metodo sonido
25+
def sonido(self):
26+
print('¡Guau, guau!')
27+
28+
# Agregamos un metodo especifico del Perrro
29+
def perseguir_cola(self):
30+
print(f'{self.nombre} esta persiguiendo su cola')
31+
32+
class Gato(Animal):
33+
34+
def __init__(self, nombre, edad, color):
35+
# Llamamos al constructor de la clase padre
36+
super().__init__(nombre, edad)
37+
self.color = color
38+
39+
# Sobrescribimos el metodo sonido
40+
def sonido(self):
41+
print('Miau')
42+
43+
# Agregamos un metodo especifico del Gato
44+
def dormir(self):
45+
print(f'{self.nombre} esta durmiendo.')
46+
47+
48+
mi_perro = Perro('Max', 3, 'Pug')
49+
mi_perro.presentarse()
50+
mi_perro.sonido()
51+
mi_perro.perseguir_cola()
52+
53+
mi_gato = Gato('Luna', 2, 'Negro')
54+
mi_gato.presentarse()
55+
mi_gato.sonido()
56+
mi_gato.dormir()
57+
58+
59+
# Extra
60+
61+
class Empleado:
62+
63+
def __init__(self, id, nombre, cargo):
64+
self.id = id
65+
self.nombre = nombre
66+
self.cargo = cargo
67+
self.empleados = []
68+
69+
def presentarse(self):
70+
print(f'Hola, mi nombre es {self.nombre} y mi cargo es {self.cargo}')
71+
72+
def agregar_empleado(self, empleados):
73+
self.empleados.append(empleados)
74+
75+
def listar_empleados(self):
76+
if len(self.empleados) >= 1:
77+
print(f'{self.nombre} tiene a cargo {len(self.empleados)} empleados.')
78+
else:
79+
print(f'{self.nombre} no tiene empleados a cargo.')
80+
81+
82+
class Gerente(Empleado):
83+
84+
def __init__(self, id, nombre, cargo):
85+
super().__init__(id, nombre, cargo)
86+
87+
def planifica(self):
88+
print(f'Como {self.cargo}, estoy planificando los objetivos del proximo año')
89+
90+
91+
class GerenteProyecto(Empleado):
92+
93+
def __init__(self, id, nombre, cargo):
94+
super().__init__(id, nombre, cargo)
95+
96+
def ejecuta(self):
97+
print(f'Como {self.cargo}, estoy ejecutando los objetivos de este año')
98+
99+
100+
class Programador(Empleado):
101+
102+
def __init__(self, id, nombre, cargo):
103+
super().__init__(id, nombre, cargo)
104+
105+
def desarrolla(self):
106+
print(f'Como {self.cargo}, estoy desarrollando un programa para alcanzar los objetivos.')
107+
108+
109+
gerente_1 = Gerente(1, 'Jorge', 'Gerente')
110+
gerente_1.presentarse()
111+
gerente_1.planifica()
112+
113+
gerente_proyecto_1 = GerenteProyecto(2, 'Felipe', 'Gerente de Proyectos')
114+
gerente_proyecto_1.presentarse()
115+
gerente_proyecto_1.ejecuta()
116+
117+
programador_1 = Programador(3, 'Raul', 'Programador')
118+
programador_1.presentarse()
119+
programador_1.desarrolla()
120+
121+
gerente_1.agregar_empleado(gerente_proyecto_1)
122+
gerente_proyecto_1.agregar_empleado(programador_1)
123+
124+
gerente_1.listar_empleados()
125+
gerente_proyecto_1.listar_empleados()
126+
programador_1.listar_empleados()
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
# Excepciones
2+
3+
# Tipos de excepciones
4+
5+
# ZeroDivisionError: Ocurre cuando se intenta dividir entre cero.
6+
# TypeError: Ocurre cuando se realiza una operación con tipos de datos incompatibles.
7+
# ValueError: Ocurre cuando una función recibe un argumento con el tipo correcto pero un valor inapropiado.
8+
# FileNotFoundError: Ocurre cuando se intenta abrir un archivo que no existe.
9+
# IndexError: Ocurre cuando se intenta acceder a un índice fuera de rango en una lista.
10+
# KeyError: Ocurre cuando se intenta acceder a una clave que no existe en un diccionario.
11+
12+
# Estructura basica
13+
try:
14+
# Dividir por cero genera la excepcion 'ZeroDivisionError'
15+
resultado = 10 / 0
16+
except ZeroDivisionError:
17+
# Codigo que se ejecuta si se da la excepcion 'ZeroDivisionError'
18+
print('Error: No se puede dividir entre cero.')
19+
else:
20+
# Codigo que se ejecuta si no hay ninguna excepcion
21+
print('La divison se realizo correctamente.')
22+
finally:
23+
# Codigo que siempre se ejecuta, haya o no excepciones
24+
print('Este bloque siempre se ejecuta.')
25+
26+
print('---------------------')
27+
28+
# Multiples excepciones
29+
try:
30+
resultado = 10 / 0
31+
except (ZeroDivisionError, TypeError, ValueError) as e:
32+
print(f'Error: {e}')
33+
34+
35+
print('---------------------')
36+
37+
38+
# Excepciones personalizadas
39+
class MiErrorPersonalizado(Exception):
40+
pass
41+
42+
43+
try:
44+
raise MiErrorPersonalizado('Este es un error personalizado.')
45+
except MiErrorPersonalizado as e:
46+
print(e)
47+
48+
print('---------------------')
49+
50+
51+
# Ejemplo:
52+
def dividir(a, b):
53+
try:
54+
resultado = a / b
55+
except ZeroDivisionError:
56+
print('Error: No se puede dividir entre cero.')
57+
except TypeError:
58+
print('Error: Los tipos de datos no son validos')
59+
else:
60+
print(f'El resultado de dividir {a} y {b} es: {resultado}')
61+
finally:
62+
print('Fin del bloque.')
63+
64+
dividir(3, 4)
65+
dividir(3, 0)
66+
dividir(3, 'a')
67+
68+
print('---------------------')
69+
70+
# Extra
71+
72+
class ValorInvalidoError(Exception):
73+
def __init__(self, mensaje="El valor proporcionado no es válido"):
74+
self.mensaje = mensaje
75+
super().__init__(self.mensaje)
76+
77+
def procesar_parametros(numero, texto):
78+
if not isinstance(numero, int):
79+
raise TypeError("El primer parámetro debe ser un número entero")
80+
81+
if not isinstance(texto, str):
82+
raise TypeError("El segundo parámetro debe ser una cadena de texto")
83+
84+
if numero < 0:
85+
raise ValorInvalidoError("El número debe ser positivo")
86+
87+
if not texto.strip():
88+
raise ValueError("El texto no puede estar vacío")
89+
90+
return f"Número: {numero}, Texto: {texto}"
91+
92+
93+
def probar_funcion():
94+
casos_prueba = [
95+
(10, "Hola"), # Caso válido
96+
(-5, "Mundo"), # Número negativo
97+
(15, ""), # Texto vacío
98+
("no_numero", "Test"), # Tipo incorrecto
99+
]
100+
101+
for numero, texto in casos_prueba:
102+
try:
103+
resultado = procesar_parametros(numero, texto)
104+
print(f"¡Éxito! {resultado}")
105+
except ValorInvalidoError as e:
106+
print(f"Error personalizado: {e}")
107+
except TypeError as e:
108+
print(f"Error de tipo: {e}")
109+
except ValueError as e:
110+
print(f"Error de valor: {e}")
111+
except Exception as e:
112+
print(f"Error inesperado: {e}")
113+
finally:
114+
print("La ejecución de este caso ha finalizado")
115+
print("-" * 50)
116+
117+
118+
if __name__ == "__main__":
119+
probar_funcion()

0 commit comments

Comments
 (0)