From 47de91835732b352caa8d43356dc79ee9083cd12 Mon Sep 17 00:00:00 2001 From: Elias Date: Mon, 3 Oct 2022 12:51:56 -0300 Subject: [PATCH] Elias Gonzalez 50811 Comision 4 --- .github/workflows/static-check.yml | 16 ------------ exercises/exercise1.py | 12 +++++++++ exercises/exercise2.py | 22 ++++++++++++++++ exercises/exercise3.py | 16 ++++++++++++ exercises/exercise4.py | 28 +++++++++++++++++++++ exercises/exercise5.py | 39 ++++++++++++++++++++++++++--- exercises/tempCodeRunnerFile.py | 40 ++++++++++++++++++++++++++++++ 7 files changed, 154 insertions(+), 19 deletions(-) delete mode 100644 .github/workflows/static-check.yml create mode 100644 exercises/tempCodeRunnerFile.py diff --git a/.github/workflows/static-check.yml b/.github/workflows/static-check.yml deleted file mode 100644 index b610285..0000000 --- a/.github/workflows/static-check.yml +++ /dev/null @@ -1,16 +0,0 @@ -name: style-check - -on: - push: - branches: master - -jobs: - pre-commit: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-python@v2 - - - uses: pre-commit/action@v2.0.3 - with: - token: ${{ secrets.GITHUB_TOKEN }} diff --git a/exercises/exercise1.py b/exercises/exercise1.py index 4d88ccc..34a09a4 100644 --- a/exercises/exercise1.py +++ b/exercises/exercise1.py @@ -1,5 +1,6 @@ """Variables de Instancia y Métodos de instancia.""" +from dataclasses import dataclass from math import pi @@ -20,6 +21,17 @@ class Circle: # NO MODIFICAR - INICIO + + def __init__(self, radio): + self.radio=radio + + def perimetro(self): + return round((pi*self.radio)*2,2) + + def area(self): + return round(pi*self.radio**2,2) + + # Test básico circle = Circle(1) assert circle.radio == 1 diff --git a/exercises/exercise2.py b/exercises/exercise2.py index 2b02c90..ac214af 100644 --- a/exercises/exercise2.py +++ b/exercises/exercise2.py @@ -1,6 +1,9 @@ """Variables de Clase y Métodos de Clase.""" +from typing import Optional + + class Article: """Todos los artículos tienen un nombre y un costo, opcionalmente algunos tienen un porcentaje de descuento. @@ -23,7 +26,26 @@ class Article: # NO MODIFICAR - INICIO + __iva: float = 0.21 + + def __init__(self, nombre, costo, descuento) -> None: + self.costo=costo + self.nombre=nombre + self.descuento=descuento + + def calcular_precio(self) -> float: + return round((self.costo + self.__iva * self.costo) * (self.costo - self.costo * self.descuento), 2) + + @classmethod + def actualizar_iva(cls, iva) -> float: + cls.__iva = iva + # Test parámetro obligatorio +articulo= Article("auto", 1, 0.21) +print(articulo.calcular_precio()) +print(articulo.actualizar_iva()) +print(articulo.actualizar_iva(0.25)) + try: article = Article() assert False, "No se puede instanciar sin nombre ni costo" diff --git a/exercises/exercise3.py b/exercises/exercise3.py index 331440a..7a893a3 100644 --- a/exercises/exercise3.py +++ b/exercises/exercise3.py @@ -14,6 +14,22 @@ class Article: - No utilizar Dataclasses - Utilizar Type Hints en todos los métodos y variables """ + _iva=0.21 + + def __init__(self, nombre, costo, descuento=0) -> None: + self.nombre=nombre + self.costo=costo + self.descuento=descuento + + @property + def precio(self) -> float: + precio = round(self.costo + self.costo * self._iva, 2) + precioFinal = round(precio - precio * self.descuento, 2) + return precioFinal + + @classmethod + def actualizar_iva(cls, iva) -> float: + cls._iva=iva # NO MODIFICAR - INICIO diff --git a/exercises/exercise4.py b/exercises/exercise4.py index b424db7..ce1d580 100644 --- a/exercises/exercise4.py +++ b/exercises/exercise4.py @@ -4,6 +4,8 @@ from typing import List + + """Una carrera tiene varias materias, la "longitud" de una carrera hace referencia a cuantas materias tiene. @@ -23,6 +25,32 @@ - Utilizar Type Hints en todos los métodos y variables """ +@dataclass +class Materia(): + nombre: str + +@dataclass +class Carrera(): + materias: List + + #def __str__(self) -> str: + # return str([str(i) for i in self.materias]) + + def __len__(self) -> int: + return len(self.materias) + + + + + + +matematica = Materia("Matemática") + +estadistica = Materia(nombre="Estadística") + +obj = Carrera([matematica, estadistica]) +print(obj) + # NO MODIFICAR - INICIO # Test parámetro obligatorio diff --git a/exercises/exercise5.py b/exercises/exercise5.py index 92d717c..cb23022 100644 --- a/exercises/exercise5.py +++ b/exercises/exercise5.py @@ -38,10 +38,43 @@ from typing import List -def calcular_sueldos(contribuyentes: List[Contribuyente]): - """Data una lista de contribuyentes, devuelve una lista de los sueldos de - cada uno.""" +class Contribuyente(ABC): + @abstractmethod + def calcular_sueldo(self): + pass + + # """Dada una lista de contribuyentes, devuelve una lista de los sueldos de + # cada uno.""" +@dataclass +class Monotributista(Contribuyente): + + sueldo: float + + def calcular_sueldo(self) -> float: + if self.sueldo < 30833: + return self.sueldo - 2646.22 + elif self.sueldo < 45833: + return self.sueldo - 2958.95 + elif self.sueldo < 64166: + return self.sueldo - 3382.62 + elif self.sueldo > 64166: + return self.sueldo - 3988.85 + +@dataclass +class Empleado(Contribuyente): + + sueldo: float + + def calcular_sueldo(self) -> float: + return self.sueldo - self.sueldo * 0.17 + + +def calcular_sueldos(contribuyentes: List[Contribuyente]) -> List: + listaSueldos=[] + for elemento in contribuyentes: + listaSueldos.append(elemento.calcular_sueldo()) + return listaSueldos # NO MODIFICAR - INICIO assert type(Contribuyente) == abc.ABCMeta, "Contribuyente debe ser abstracta" diff --git a/exercises/tempCodeRunnerFile.py b/exercises/tempCodeRunnerFile.py new file mode 100644 index 0000000..5ddae8a --- /dev/null +++ b/exercises/tempCodeRunnerFile.py @@ -0,0 +1,40 @@ +import abc +from abc import ABC, abstractmethod +from dataclasses import dataclass +from typing import List + +@dataclass +class Contribuyente(ABC): + + sueldo: float + contribuyentes: List=None + + def calcular_sueldos(contribuyentes: List=[]): + return contribuyentes.calcular_sueldo() + + # """Dada una lista de contribuyentes, devuelve una lista de los sueldos de + # cada uno.""" +@dataclass +class Monotributista(Contribuyente): + + def calcular_sueldo(self) -> float: + if self.sueldo < 30833: + return self.sueldo - 2646.22 + elif self.sueldo < 45833: + return self.sueldo - 2958.95 + elif self.sueldo < 64166: + return self.sueldo - 3382.62 + elif self.sueldo > 64166: + return self.sueldo - 3988.85 + +@dataclass +class Empleado(Contribuyente): + + def calcular_sueldo(self) -> float: + return self.sueldo - self.sueldo * 0.17 + + +juan = Monotributista(80000) +maria = Empleado(80_000) +print(maria.calcular_sueldo()) +print(juan.calcular_sueldo()) \ No newline at end of file