From 1fc7cd2cd09586fad9cc86e145df17f83aa5bcb5 Mon Sep 17 00:00:00 2001 From: ervin <102836332+ErvinToepke@users.noreply.github.com> Date: Fri, 7 Oct 2022 01:37:25 -0300 Subject: [PATCH] terminado --- exercises/exercise1.py | 25 ++++++++++++------------ exercises/exercise2.py | 44 +++++++++++++++++++++++++----------------- exercises/exercise3.py | 35 ++++++++++++++++++++++++++++++--- exercises/exercise4.py | 31 +++++++++++++---------------- exercises/exercise5.py | 33 +++++++++++++++++++++++++++++++ 5 files changed, 116 insertions(+), 52 deletions(-) diff --git a/exercises/exercise1.py b/exercises/exercise1.py index 4d88ccc..fa72f79 100644 --- a/exercises/exercise1.py +++ b/exercises/exercise1.py @@ -4,19 +4,18 @@ class Circle: - """Todo cículo tiene un radio y se desea conocer tanto el área como el - perímetro (longitud de circunferencia). - - Reportar los números redondeados a dos decimales - - Restricciones: - - Utilizar 1 variable de instancia - - Utilizar 2 métodos de instancia - - No utilizar variable de clase - - No utilizar Dataclasses - - No utilizar Properties - - Utilizar Type Hints en todos los métodos y variables - """ + def __init__(self, radio): + self.radio: float = radio + + def area(self) -> float: + resultado = 3.14 * self.radio ** 2 + return resultado + + def perimetro(self) -> float: + resultado = 2 * 3.14 * self.radio + return resultado + + # NO MODIFICAR - INICIO diff --git a/exercises/exercise2.py b/exercises/exercise2.py index 2b02c90..9ba953f 100644 --- a/exercises/exercise2.py +++ b/exercises/exercise2.py @@ -2,24 +2,32 @@ class Article: - """Todos los artículos tienen un nombre y un costo, opcionalmente algunos - tienen un porcentaje de descuento. - - El IVA es un impuesto que se aplica a todos los productos por igual, - actualmente es de 21% pero puede cambiar en el futuro. - - Para calcular el precio de un artículo, hay que sumar el IVA y luego restar - los descuentos si hubiera. Redondear a 2 decimales. - - Restricciones: - - Utilizar 3 variables de instancia - - Utilizar 1 método de instancia - - Utilizar 1 variable de clase - - Utilizar 1 método de clase - - No utilizar Dataclasses - - No utilizar Properties - - Utilizar Type Hints en todos los métodos y variables - """ + + + iva = 0.21 + + def __init__(self, nombre, costo, descuento = 0.00) -> None: + self.nombre: str = nombre + self.costo: float = costo + self.descuento: float = descuento + + def calcular_precio(self) -> float: + + subtotal = self.costo - self.costo * self.descuento + total_con_iva = subtotal * (1 + self.iva) + return round(total_con_iva, 2) + + @classmethod + def actualizar_iva(cls, iva): + cls.iva = iva + + + + + + + + # NO MODIFICAR - INICIO diff --git a/exercises/exercise3.py b/exercises/exercise3.py index 331440a..3a3ac44 100644 --- a/exercises/exercise3.py +++ b/exercises/exercise3.py @@ -1,10 +1,36 @@ """Properties""" +from re import A + + class Article: + + + iva = 0.21 + + + def __init__(self, nombre, costo, descuento = 0.00): + self.nombre: str = nombre + self.costo: float = costo + self.descuento: float = descuento + + + @property + def precio(self) -> float: + subtotal = self.costo - self.costo * self.descuento + total_con_iva = subtotal * (1 + self.iva) + return round(total_con_iva, 2) + + @classmethod + def actualizar_iva(cls, iva): + cls.iva = iva + + + + """Re-Escribir el ejercicio anterior utilizando una property en vez de un método de instancia. - Restricciones: - Utilizar 3 variables de instancia - Utilizar 1 property @@ -13,13 +39,16 @@ class Article: - No utilizar métodos de instancia - No utilizar Dataclasses - Utilizar Type Hints en todos los métodos y variables - """ + """ + + + # NO MODIFICAR - INICIO # Test parámetro obligatorio try: - article = Article() + article = Article() assert False, "No se puede instanciar sin nombre ni costo" except TypeError: assert True diff --git a/exercises/exercise4.py b/exercises/exercise4.py index b424db7..f091727 100644 --- a/exercises/exercise4.py +++ b/exercises/exercise4.py @@ -1,27 +1,22 @@ """DataClasses y Sobrecarga de operadores.""" from dataclasses import dataclass +import dataclasses from typing import List +@dataclass +class Materia: + nombre: str + +@dataclass +class Carrera: + materias: list[Materia] + + def __len__(self): + return len(self.materias) + + -"""Una carrera tiene varias materias, la "longitud" de una carrera hace -referencia a cuantas materias tiene. - -Cada materia tiene un nombre. - -Escribir una estructura de clases que refleje lo anterior. - -Restricciones: - - Utilizar Dataclasses - - Utilizar 2 clases - - Utilizar 1 variables de instancia en cada clase - - Utilizar 1 método mágico - - No utilizar variables de clase - - No utilizar métodos de clase - - No utilizar métodos de instancia - - No utilizar properties - - Utilizar Type Hints en todos los métodos y variables -""" # NO MODIFICAR - INICIO diff --git a/exercises/exercise5.py b/exercises/exercise5.py index 92d717c..f80c44e 100644 --- a/exercises/exercise5.py +++ b/exercises/exercise5.py @@ -37,10 +37,43 @@ from dataclasses import dataclass from typing import List +@dataclass +class Contribuyente(ABC): + + @abstractmethod + def calcular_sueldo() -> float: + pass + +@dataclass +class Monotributista(Contribuyente): + monto: float + + def calcular_sueldo(self) -> float: + if(self.monto < (370000/12)): + return self.monto - 2646.22 + elif(self.monto < (550000/12)): + return self.monto - 2958.95 + elif(self.monto < (770000/12)): + return self.monto - 3382.62 + elif(self.monto > (770000/12)): + return self.monto - 3988.85 + + +@dataclass +class Empleado(Contribuyente): + monto: float + + def calcular_sueldo(self)-> float: + return self.monto - (self.monto * 0.17) + def calcular_sueldos(contribuyentes: List[Contribuyente]): """Data una lista de contribuyentes, devuelve una lista de los sueldos de cada uno.""" + sueldos=[] + for i in contribuyentes: + sueldos.append(i.calcular_sueldo()) + return sueldos # NO MODIFICAR - INICIO