From 29c20da5b357a06a6f23a60b8e41ec8539f58a92 Mon Sep 17 00:00:00 2001 From: David GAILLETON Date: Sat, 17 Jan 2026 10:47:13 +0100 Subject: [PATCH] some fixes + 02/ex5 WIP --- 01/ex1/ft_garden_data.py | 8 +-- 01/ex2/ft_plant_growth.py | 16 +++--- 02/ex1/ft_different_errors.py | 2 +- 02/ex5/ft_garden_management.py | 98 ++++++++++++++++++++++++++++++++++ 4 files changed, 111 insertions(+), 13 deletions(-) create mode 100644 02/ex5/ft_garden_management.py diff --git a/01/ex1/ft_garden_data.py b/01/ex1/ft_garden_data.py index 0578ecb..131f51c 100644 --- a/01/ex1/ft_garden_data.py +++ b/01/ex1/ft_garden_data.py @@ -1,16 +1,16 @@ class Plants: name: str height: int - age: int + days: int - def __init__(self, name, height, age): + def __init__(self, name, height, days): self.name = name self.height = height - self.age = age + self.days = days def print_plant(self): print(self.name.capitalize() + ":", self.height, end="") - print("cm,", self.age, "days old") + print("cm,", self.days, "days old") if __name__ == "__main__": diff --git a/01/ex2/ft_plant_growth.py b/01/ex2/ft_plant_growth.py index db58d32..f8480bc 100644 --- a/01/ex2/ft_plant_growth.py +++ b/01/ex2/ft_plant_growth.py @@ -1,30 +1,30 @@ class Plants: name: str height: int - p_age: int + days: int - def __init__(self, name, height, age): + def __init__(self, name, height, days): self.name = name self.height = height - self.p_age = age + self.days = days def get_info(self): print(self.name.capitalize() + ":", self.height, end="") - print("cm,", self.p_age, "days old") + print("cm,", self.days, "days old") def grow(self): self.height = self.height + 1 def age(self): - self.p_age = self.p_age + 1 + self.days = self.days + 1 self.grow() if __name__ == "__main__": x = Plants("rose", 25, 1) + start = x.days; x.get_info() - i = 1 - while i < 8: + for n in range(1, 8): x.age() - i = i + 1 x.get_info() + print("Growth this week: +", x.days - start, "cm"); diff --git a/02/ex1/ft_different_errors.py b/02/ex1/ft_different_errors.py index faae7b9..4aefec7 100644 --- a/02/ex1/ft_different_errors.py +++ b/02/ex1/ft_different_errors.py @@ -10,7 +10,7 @@ def garden_operations(case: str) -> None: dic["a"] -def test_error_types(): +def test_error_types() -> None: try: garden_operations("ValueError") except ValueError: diff --git a/02/ex5/ft_garden_management.py b/02/ex5/ft_garden_management.py new file mode 100644 index 0000000..a4a9f8a --- /dev/null +++ b/02/ex5/ft_garden_management.py @@ -0,0 +1,98 @@ +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()