diff --git a/exercises/exercise1.py b/exercises/exercise1.py index 4d88ccc..bdb054f 100644 --- a/exercises/exercise1.py +++ b/exercises/exercise1.py @@ -4,7 +4,7 @@ class Circle: - """Todo cículo tiene un radio y se desea conocer tanto el área como el + """Todo círculo 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 @@ -18,6 +18,16 @@ class Circle: - Utilizar Type Hints en todos los métodos y variables """ + def __init__(self, radio): + self.radio = radio + + def perimetro(self): + return round(2*self.radio*pi,2) + + def area(self): + return round(pi*self.radio**2,2) + + # NO MODIFICAR - INICIO # Test básico diff --git a/exercises/exercise2.py b/exercises/exercise2.py index 2b02c90..e65dc97 100644 --- a/exercises/exercise2.py +++ b/exercises/exercise2.py @@ -21,6 +21,31 @@ class Article: - Utilizar Type Hints en todos los métodos y variables """ + __iva=0.21 # Variable de clase + + def __init__(self,nombre,costo,descuento=0): + self.nombre=nombre + self.costo=costo #Variables de instancia + self.descuento=descuento + + + def calcular_precio (self): + precio = round(self.costo + (self.costo * self.__iva),2) + precio_final = round(precio - (self.descuento * precio), 2) #metodo de instancia + return precio_final + + + @classmethod + def actualizar_iva(cls,iva): #Metodo de clase + cls.__iva=iva + + + + + + + + # NO MODIFICAR - INICIO # Test parámetro obligatorio diff --git a/exercises/exercise3.py b/exercises/exercise3.py index 331440a..d405629 100644 --- a/exercises/exercise3.py +++ b/exercises/exercise3.py @@ -15,6 +15,24 @@ class Article: - Utilizar Type Hints en todos los métodos y variables """ + __iva=0.21 # Variable de clase + + def __init__(self,nombre,costo,descuento=0): + self.nombre=nombre + self.costo=costo #Variables de instancia + self.descuento=descuento + + @property + def precio (self): + precio = round(self.costo + (self.costo * self.__iva),2) + precio_final = round(precio - (self.descuento * precio), 2) #metodo de instancia + return precio_final + + + @classmethod + def actualizar_iva(cls,iva): #Metodo de clase + cls.__iva=iva + # NO MODIFICAR - INICIO # Test parámetro obligatorio diff --git a/exercises/exercise4.py b/exercises/exercise4.py index b424db7..62c149a 100644 --- a/exercises/exercise4.py +++ b/exercises/exercise4.py @@ -1,5 +1,6 @@ """DataClasses y Sobrecarga de operadores.""" +from ast import Str from dataclasses import dataclass from typing import List @@ -23,6 +24,20 @@ - Utilizar Type Hints en todos los métodos y variables """ +@dataclass +class Materia: + nombre: str + +@dataclass +class Carrera: + longitud: list + + def __str__ (self): + return f"Carrera(materias={self.longitud})" + + def __len__ (self): + return len(self.longitud) + # NO MODIFICAR - INICIO # Test parámetro obligatorio diff --git a/exercises/exercise5.py b/exercises/exercise5.py index 92d717c..d6b62ee 100644 --- a/exercises/exercise5.py +++ b/exercises/exercise5.py @@ -37,11 +37,41 @@ from dataclasses import dataclass from typing import List +@dataclass +class Contribuyente (ABC): + + @abstractmethod + def calcular_sueldo(self): + pass + +@dataclass +class Empleado(Contribuyente): + sueldo: float + def calcular_sueldo(self): + return self.sueldo - (self.sueldo * 0.17) + +@dataclass +class Monotributista(Contribuyente): + sueldo: float + def calcular_sueldo(self) -> float: + if self.sueldo < (370000/12): + return self.sueldo - 2646.22 + elif self.sueldo < (550000/12): + return self.sueldo - 2958.95 + elif self.sueldo < (770000/12): + return self.sueldo - 3382.62 + elif self.sueldo > (770000/12): + return self.sueldo - 3988.85 + 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 assert type(Contribuyente) == abc.ABCMeta, "Contribuyente debe ser abstracta" diff --git a/tempCodeRunnerFile.python b/tempCodeRunnerFile.python new file mode 100644 index 0000000..91cd0ad --- /dev/null +++ b/tempCodeRunnerFile.python @@ -0,0 +1,54 @@ +"""Variables de Instancia y Métodos de instancia.""" + +from math import pi + + +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 = radio + + + def perimetro(self): + return round(2*self.radio*pi,2) + + def area(self): + return round(pi*self.radio**2,2) + + +# NO MODIFICAR - INICIO +# Test básico +circle = Circle(1) +assert circle.radio == 1 +assert circle.area() == 3.14 +assert circle.perimetro() == 6.28 + +# Test palabra clave +circle = Circle(radio=1) +assert circle.radio == 1 +assert circle.area() == 3.14 +assert circle.perimetro() == 6.28 + +# Test parámetro obligatorio +try: + circle = Circle() + assert False, "No se puede instanciar sin radio" +except TypeError: + assert True + +# Test invocación encadenada +assert Circle(1).area() == 3.14 +assert Circle(1).perimetro() == 6.28 +# NO MODIFICAR - FIN \ No newline at end of file