-
Notifications
You must be signed in to change notification settings - Fork 4.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #7486 from neslarra/patch-68
Reto# 50 - python
- Loading branch information
Showing
1 changed file
with
119 additions
and
0 deletions.
There are no files selected for viewing
119 changes: 119 additions & 0 deletions
119
Roadmap/50 - PLANIFICADOR DE OBJETIVOS DE AÑO NUEVO/python/neslarra.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,119 @@ | ||
r""" | ||
EJERCICIO: | ||
El nuevo año está a punto de comenzar... | ||
¡Voy a ayudarte a planificar tus propósitos de nuevo año! | ||
Programa un gestor de objetivos con las siguientes características: | ||
- Permite añadir objetivos (máximo 10) | ||
- Calcular el plan detallado | ||
- Guardar la planificación | ||
Cada entrada de un objetivo está formado por (con un ejemplo): | ||
- Meta: Leer libros | ||
- Cantidad: 12 | ||
- Unidades: libros | ||
- Plazo (en meses): 12 (máximo 12) | ||
El cálculo del plan detallado generará la siguiente salida: | ||
- Un apartado para cada mes | ||
- Un listado de objetivos calculados a cumplir en cada mes | ||
(ejemplo: si quiero leer 12 libros, dará como resultado | ||
uno al mes) | ||
- Cada objetivo debe poseer su nombre, la cantidad de | ||
unidades a completar en cada mes y su total. Por ejemplo: | ||
Enero: | ||
[ ] 1. Leer libros (1 libro/mes). Total: 12. | ||
[ ] 2. Estudiar Git (1 curso/mes). Total: 1. | ||
Febrero: | ||
[ ] 1. Leer libros (1 libro/mes). Total: 12. | ||
... | ||
Diciembre: | ||
[ ] 1. Leer libros (1 libro/mes). Total: 12. | ||
- Si la duración es menor a un año, finalizará en el mes | ||
correspondiente. | ||
Por último, el cálculo detallado debe poder exportarse a .txt | ||
(No subir el fichero) | ||
""" | ||
|
||
|
||
class Target: | ||
target_list = [] | ||
|
||
def __new__(cls, target: str, target_unit: str, amount: int = 1, period: int = 12): | ||
if cls.number_of_targets() >= 10: | ||
raise "No se puede agregar más objetivos (10/10 máximo alcanzado)." | ||
if not (target and target_unit): | ||
raise "Debe indicar un objetivo específico y la unidad en la que se evaluará el avace." | ||
if not (0 < period < 13): | ||
raise "El período debe estar entr 1 y 12 meses." | ||
instance = super().__new__(cls) | ||
cls.target_list.append(instance) | ||
return instance | ||
|
||
def __init__(self, target: str, target_unit: str, amount: int = 1, period: int = 12): | ||
self.target = target | ||
self.target_unit = target_unit | ||
self.amount = amount | ||
self.period = period | ||
|
||
@classmethod | ||
def number_of_targets(cls): | ||
return cls.target_list.__len__() | ||
|
||
def __str__(self): | ||
print(f"Objetivo: {self.target}\nPeríodo: {self.period}\nCantidad: {self.amount}\nUnidades: {self.target_unit}") | ||
|
||
def get_target(self): | ||
return self.target | ||
|
||
def get_target_unit(self): | ||
return self.target_unit | ||
|
||
def get_amount(self): | ||
return self.amount | ||
|
||
def get_period(self): | ||
return self.period | ||
|
||
|
||
class TargetManager: | ||
def __init__(self, target_list: list[Target]): | ||
self.target_list = target_list | ||
|
||
def show_monthy_targets(self): | ||
months = {1: "Enero", 2: "Febrero", 3: "Marzo", 4: "Abril", 5: "Mayo", 6: "Junio", | ||
7: "Julio", 8: "Agosto", 9: "Septiembre", 10: "Octubre", 11: "Noviembre", 12: "Diciembre"} | ||
print("\nObjetivos para este año ----------------") | ||
for target in self.target_list: | ||
print(f"\tObjetivo: {target.get_target()}: {target.get_amount()} {target.get_target_unit()} por mes durante {target.get_period()} meses") | ||
for month in range(1, 13): | ||
print(f"\nObjetivos {months[month]}\n{'#' * 30}") | ||
for target in self.target_list: | ||
monthly_activity = (target.get_amount() / target.get_period()).__round__(2) | ||
if target.get_amount() <= target.get_period(): | ||
if target.get_amount() >= month: | ||
print(f"\t{target.get_target()}: 1 {target.get_target_unit()}") | ||
continue | ||
if target.get_amount() > target.get_period(): | ||
if month <= target.get_period(): | ||
print(f"\t{target.get_target()}: {monthly_activity} {target.get_target_unit()}") | ||
continue | ||
if monthly_activity > 1 and target.get_period() >= month: | ||
print(f"\t{target.get_target()}: {monthly_activity} {target.get_target_unit()}") | ||
|
||
|
||
objetivo1 = Target("Leer", "libros", 7, 12) | ||
objetivo2 = Target("Ver", "videos", 12, 12) | ||
objetivo3 = Target("Escribir", "Artículos", 17, 8) | ||
|
||
gestor = TargetManager(Target.target_list) | ||
|
||
gestor.show_monthy_targets() | ||
|
||
# Agrego un objcetivo nuevo | ||
objetivo4 = Target("Practicar", "Tenis", 24, 6) | ||
|
||
gestor.show_monthy_targets() |