mirror of
https://github.com/DavidGailleton/42-Piscine_Python.git
synced 2026-03-14 05:06:55 +01:00
99 lines
2.6 KiB
Python
99 lines
2.6 KiB
Python
from logging import raiseExceptions
|
|
|
|
|
|
class Plant:
|
|
__name: str
|
|
__water: int
|
|
__sun: int
|
|
|
|
@classmethod
|
|
def set_name(cls, name: str) -> None:
|
|
if not name or not name[0]:
|
|
raise ValueError("Name cannot be empty")
|
|
cls.__name = name
|
|
|
|
@classmethod
|
|
def set_water(cls, water: int) -> None:
|
|
if water < 0:
|
|
raise ValueError("Water level cannot be negative")
|
|
cls.__water = water
|
|
|
|
@classmethod
|
|
def set_sun(cls, sun: int) -> None:
|
|
if sun < 0:
|
|
raise ValueError("Sun level cannot be negative")
|
|
cls.__sun = sun
|
|
|
|
@classmethod
|
|
def get_name(cls) -> str:
|
|
return cls.__name
|
|
|
|
@classmethod
|
|
def get_water(cls) -> int:
|
|
return cls.__water
|
|
|
|
@classmethod
|
|
def get_sun(cls) -> int:
|
|
return cls.__sun
|
|
|
|
def __init__(self, name: str, water: int, sun: int) -> None:
|
|
self.set_name(name)
|
|
self.set_water(water)
|
|
self.set_sun(sun)
|
|
|
|
|
|
class GardenManager:
|
|
__plants: list[Plant]
|
|
__water_tank_level: int
|
|
|
|
@classmethod
|
|
def get_water_tank_level(cls) -> int:
|
|
return cls.__water_tank_level
|
|
|
|
@classmethod
|
|
def set_water_tank_level(cls, level: int) -> None:
|
|
cls.__water_tank_level = level
|
|
|
|
def add_plant(self, name: str, water: int, sun: int) -> None:
|
|
try:
|
|
new_plant = Plant(name, water, sun)
|
|
i = 0
|
|
for n in self.__plants:
|
|
i = i + 1
|
|
new_lst: list[Plant | None] = [None] * (i + 1)
|
|
i = 0
|
|
for n in self.__plants:
|
|
new_lst[i] = n
|
|
i = i + 1
|
|
new_lst[i] = new_plant
|
|
print("Added", name, "successfully")
|
|
except ValueError as err:
|
|
print(err)
|
|
|
|
def water_plants(self) -> None:
|
|
print("Watering plants...")
|
|
try:
|
|
print("Opening watering system")
|
|
for n in self.__plants:
|
|
if self.__water_tank_level <= 0:
|
|
raise Exception("Caught GardenError: Not enough water in tank")
|
|
n.set_water(n.get_water() + 1)
|
|
self.__water_tank_level = self.__water_tank_level - 1;
|
|
print("Watering", n.get_name(), "- success")
|
|
except Exception as err:
|
|
print(err);
|
|
finally:
|
|
print("Closing watering system (cleanup)")
|
|
|
|
def __init__(self) -> None:
|
|
self.__plants = []
|
|
self.__water_tank_level = 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
manager = GardenManager()
|
|
manager.set_water_tank_level(10)
|
|
manager.add_plant("Tomato", 2, 10)
|
|
manager.add_plant("Lettuce", 5, 7)
|
|
manager.water_plants()
|