push
This commit is contained in:
parent
d02ef5f88a
commit
11040c45b8
|
|
@ -1 +0,0 @@
|
|||
Subproject commit acf30787c8f64b85f14d97502c3e4fa1e4ce9e24
|
||||
|
|
@ -1 +0,0 @@
|
|||
Subproject commit 5cd38a2f67f35003c9223ee1f9d26f13c83af264
|
||||
|
|
@ -1 +0,0 @@
|
|||
Subproject commit 459b61d28366c6f9390fe1d847923bc7fc31be0c
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
def ft_garden_intro():
|
||||
print("=== Welcome to My Garden ===")
|
||||
print("Plant: Rose\nHeight: 25cm\nAge: 30 days\n\n=== End of Program ===")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
ft_garden_intro()
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
class Plant:
|
||||
def __init__(self, name, heigt, age):
|
||||
self.name = name
|
||||
self.heigt = heigt
|
||||
self.age = age
|
||||
|
||||
|
||||
def ft_garden_data():
|
||||
rose = Plant("Rose: ", 25, 30)
|
||||
Sunflower = Plant("Sunflower: ", 80, 45)
|
||||
Cactus = Plant("Cactus: ", 15, 120)
|
||||
print("=== Garden Plant Registry ===")
|
||||
print(rose.name, rose.heigt, "cm,", rose.age, "days old")
|
||||
print(Sunflower.name, Sunflower.heigt, "cm,", Sunflower.age, "days old")
|
||||
print(Cactus.name, Cactus.heigt, "cm,", Cactus.age, "days old")
|
||||
|
||||
|
||||
ft_garden_data()
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
class Plant:
|
||||
def __init__(self, name, heigt, age):
|
||||
self.name = name
|
||||
self.heigt = heigt
|
||||
self.age = age
|
||||
|
||||
|
||||
def get_info(rose):
|
||||
print(rose.name, rose.heigt, "cm,", rose.age, "days old")
|
||||
|
||||
|
||||
def ft_plant_growth():
|
||||
rose = Plant("Rose", 25, 30)
|
||||
print("=== Day 1 ===")
|
||||
get_info(rose)
|
||||
rose.heigt += 6
|
||||
rose.age += 6
|
||||
print("=== Day 7 ===")
|
||||
get_info(rose)
|
||||
print("Growth this week: +6cm")
|
||||
|
||||
|
||||
ft_plant_growth()
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
class Plant:
|
||||
def __init__(self, name, height, age):
|
||||
self.name = name
|
||||
self.height = height
|
||||
self.age = age
|
||||
|
||||
|
||||
plant_data = [
|
||||
("Rose", 25, 30),
|
||||
("Oak", 200, 365),
|
||||
("Cactus", 5, 90),
|
||||
("Sunflower", 80, 45),
|
||||
("Fern", 15, 120)
|
||||
]
|
||||
|
||||
index = 0
|
||||
plants = [Plant(name, height, age) for name, height, age in plant_data]
|
||||
|
||||
for p in plants:
|
||||
print(f"Created: {p.name} ({p.height} cm, {p.age} days)")
|
||||
index += 1
|
||||
print(f"\nTotal plants created: {index}")
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
class Plant:
|
||||
def __init__(self, name, height, age):
|
||||
self.name = name
|
||||
self.height = height
|
||||
self.age = age
|
||||
|
||||
|
||||
rose = Plant("Rose", 10, 15)
|
||||
|
||||
|
||||
def get_height(self):
|
||||
print("Invalid operation attempted: ")
|
||||
print(f"height {self.height}cm [REJECTED]")
|
||||
print("Security: Negative height rejected\n")
|
||||
|
||||
|
||||
def get_age(self):
|
||||
print(f"Invalid operation attempted: {self.age} days [REJECTED]")
|
||||
print("Security: Negative age rejected")
|
||||
|
||||
|
||||
def ft_garden_security():
|
||||
print("=== Garden Security System ===")
|
||||
if rose.height < 0:
|
||||
get_height(rose)
|
||||
if rose.age < 0:
|
||||
get_age(rose)
|
||||
if rose.age >= 0 & rose.height >= 0:
|
||||
print(f"Plant created: {rose.name}")
|
||||
print(f"Height updated: {rose.height}cm [OK]")
|
||||
print(f"Age updated: {rose.age} days [OK]")
|
||||
|
||||
|
||||
ft_garden_security()
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
class Plant:
|
||||
def __init__(self, name, height, age):
|
||||
self.name = name
|
||||
self.height = height
|
||||
self.age = age
|
||||
self.type = type
|
||||
|
||||
|
||||
class Tree(Plant):
|
||||
def __init__(self, name, height, age, type, diameter, shade):
|
||||
super().__init__(name=name, height=height, age=age)
|
||||
self.diam = diameter
|
||||
self.shade = shade
|
||||
self.type = type
|
||||
|
||||
|
||||
class Flower(Plant):
|
||||
def __init__(self, name, height, age, type, color, bloom):
|
||||
super().__init__(name=name, height=height, age=age)
|
||||
self.color = color
|
||||
self.bloom = bloom
|
||||
self.type = type
|
||||
|
||||
|
||||
class Vegetable(Plant):
|
||||
def __init__(self, name, height, age, type, season, nutrional):
|
||||
super().__init__(name=name, height=height, age=age)
|
||||
self.season = season
|
||||
self.nutrional = nutrional
|
||||
self.type = type
|
||||
|
||||
|
||||
r = Flower("Rose", 25, 30, "Flower", "red", "blooming")
|
||||
o = Tree("Oak", 500, 1825, "Tree", 50, 78)
|
||||
t = Vegetable("Tomato", 80, 90, "Vegatable", "summer",
|
||||
"vitamin C")
|
||||
|
||||
print("=== Garden Plant Types ===\n")
|
||||
print(f"{r.name} ({r.type}): {r.height}cm, {r.age} days, {r.color} color")
|
||||
print(f"{r.name} is {r.bloom} beautifully !\n")
|
||||
print(f"{o.name} ({o.type}): {o.height}cm, {o.age} days, {o.diam}cm diameter")
|
||||
print(f"{o.name} provides {o.shade} square meters of shade\n")
|
||||
print(f"{t.name} ({t.type}): {t.height}cm, {t.age} days, {t.season} harvest")
|
||||
print(f"{t.name} is rich in {t.nutrional}")
|
||||
|
|
@ -0,0 +1,105 @@
|
|||
class Plant:
|
||||
def __init__(self, name, height, color, bloom, Prize):
|
||||
self.name = name
|
||||
self.height = height
|
||||
self.color = color
|
||||
self.bloom = bloom
|
||||
self.Prize = Prize
|
||||
|
||||
def grow(self, heigt: int = 1) -> None:
|
||||
self.height += heigt
|
||||
print(f"{self.name} grew {heigt}cm")
|
||||
|
||||
|
||||
class Garden:
|
||||
def __init__(self, owner: str):
|
||||
self.owner = owner
|
||||
self._plants: list[Plant] = []
|
||||
self.score = 0
|
||||
|
||||
def add_plant(self, plant: Plant) -> None:
|
||||
self._plants.append(plant)
|
||||
print(f"Added {plant.name} to {self.owner}'s garden")
|
||||
|
||||
def help_all_plants_grow(self) -> int:
|
||||
print(f"\n{self.owner} is helping all plants grow...")
|
||||
count = 0
|
||||
for plant in self._plants:
|
||||
plant.grow(1)
|
||||
count += 1
|
||||
return (count)
|
||||
|
||||
def list_plants(self) -> None:
|
||||
print(f"\n=== {self.owner}'s Garden Report ===")
|
||||
print("Plants in garden:")
|
||||
for plant in self._plants:
|
||||
display = f"- {plant.name}: {plant.height}cm"
|
||||
if (plant.color != ""):
|
||||
display += f", {plant.color} flowers"
|
||||
if (plant.bloom == 1):
|
||||
display += " (blooming)"
|
||||
if (plant.Prize > 0):
|
||||
display += f", Prize point: {plant.Prize}"
|
||||
print(display)
|
||||
|
||||
def list_update(self, height) -> None:
|
||||
regular = 0
|
||||
flowering = 0
|
||||
prize = 0
|
||||
print(f"\nPlants added: {len(self._plants)}, Total growth: {height}cm")
|
||||
for plant in self._plants:
|
||||
if plant.bloom == 1:
|
||||
flowering += 1
|
||||
if plant.Prize > 0:
|
||||
prize += 1
|
||||
if (plant.Prize == 0) & (plant.bloom == 0):
|
||||
regular += 1
|
||||
update = f"Plant types: {regular} regular, {flowering} flowering, "
|
||||
update += f"{prize} prize flowers\n"
|
||||
print(update)
|
||||
|
||||
|
||||
class GardenManager:
|
||||
def __init__(self):
|
||||
self._garden: list[Garden] = []
|
||||
|
||||
def add_garden(self, garden: Garden) -> None:
|
||||
self._garden.append(garden)
|
||||
|
||||
def garden_list(self) -> None:
|
||||
result = "Garden scores"
|
||||
len = 0
|
||||
totalheight = 0
|
||||
for Garden in self._garden:
|
||||
for plant in Garden._plants:
|
||||
Garden.score += plant.height
|
||||
Garden.score += 10
|
||||
if plant.bloom == 1:
|
||||
Garden.score += 10
|
||||
totalheight += plant.height
|
||||
len += 1
|
||||
result += f" - {Garden.owner}: {Garden.score}"
|
||||
if (totalheight >= 200):
|
||||
print("Height validation test: True")
|
||||
else:
|
||||
print("Height validation test: False")
|
||||
print(result)
|
||||
print(f"Total gardens managed: {len}")
|
||||
|
||||
|
||||
print("=== Garden Management System Demo ===\n")
|
||||
alice = Garden("Alice")
|
||||
alice.add_plant(Plant("Oak Tree", 100, "", 0, 0))
|
||||
alice.add_plant(Plant("Rose", 25, "red", 1, 0))
|
||||
alice.add_plant(Plant("Sunflower", 50, "yellow", 0, 10))
|
||||
|
||||
Bob = Garden("Bob")
|
||||
Bob.add_plant(Plant("Acacia Tree", 82, "", "", 0))
|
||||
Manager = GardenManager()
|
||||
Manager.add_garden(alice)
|
||||
Manager.add_garden(Bob)
|
||||
original = 0
|
||||
original += alice.help_all_plants_grow()
|
||||
alice.list_plants()
|
||||
alice.list_update(original)
|
||||
Manager.garden_list()
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
def test_temperature():
|
||||
print("=== Garden Temperature Checker ===")
|
||||
user_input = input("Testing temperature: ")
|
||||
try:
|
||||
temperature = int(user_input)
|
||||
except ValueError:
|
||||
print(f"Error: {user_input} is not a valid number")
|
||||
return
|
||||
if temperature < 0:
|
||||
print(f"Error: {temperature}°C is too cold for plants (min 0°C)")
|
||||
if temperature > 40:
|
||||
print(f"Error: {temperature}°C is too hot for plants (min 0°C)")
|
||||
else:
|
||||
print(f"Temperature {temperature}°C is perfect for plants!")
|
||||
|
||||
|
||||
test_temperature()
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
def garden_operations():
|
||||
print("=== Garden Error Types Demo ===\n")
|
||||
print("Testing ValueError...")
|
||||
try:
|
||||
int("abc")
|
||||
except ValueError:
|
||||
print("Caught ValueError: invalid literal for int()")
|
||||
print("\nTesting ZeroDivisionError...")
|
||||
try:
|
||||
5 / 0
|
||||
except ZeroDivisionError:
|
||||
print("Caught ZeroDivisionError: division by zero")
|
||||
print("\nTesting FileNotFoundError...")
|
||||
try:
|
||||
name = "missing.txt"
|
||||
open("/home/masalvad/work/poo/garden_guardian/ex1/" + name, "r")
|
||||
except FileNotFoundError:
|
||||
print(f"Caught FileNotFoundError: No such file '{name}'")
|
||||
print("\nTesting KeyError...")
|
||||
try:
|
||||
fruit = {"name": "apple", "color": "red"}
|
||||
key = "price"
|
||||
print(fruit[key])
|
||||
except KeyError:
|
||||
print(f"Caught KeyError: '{key}’")
|
||||
print("\nTesting multiple errors together...")
|
||||
try:
|
||||
fruit = {"name": "apple", "color": "red"}
|
||||
key = "price"
|
||||
print(fruit[key])
|
||||
name = "missing.txt"
|
||||
open("/home/masalvad/work/poo/garden_guardian/ex1/" + name, "r")
|
||||
5 / 0
|
||||
int("abc")
|
||||
except (ValueError, FileExistsError, FileNotFoundError, KeyError):
|
||||
print("Caught an error, but program continues!")
|
||||
print("\nAll error types tested successfully!")
|
||||
|
||||
|
||||
garden_operations()
|
||||
|
|
@ -0,0 +1,56 @@
|
|||
class Plant:
|
||||
def __init__(self, name, water, wilting):
|
||||
self.name = name
|
||||
self.water = water
|
||||
self.wilting = wilting
|
||||
|
||||
def check_water(self):
|
||||
if self.water < 5:
|
||||
raise WaterError("Not enough water in the tank!")
|
||||
|
||||
def check_wilting(self):
|
||||
if self.wilting == 1:
|
||||
raise PlantError(f"The {self.name} plant is wilting!")
|
||||
|
||||
def check_garden(self):
|
||||
if self.wilting == 1:
|
||||
raise PlantError(f"The {self.name} plant is wilting!")
|
||||
if self.water < 5:
|
||||
raise WaterError("Not enough water in the tank!")
|
||||
|
||||
|
||||
class GardenError(Exception):
|
||||
pass
|
||||
|
||||
|
||||
class WaterError(GardenError):
|
||||
pass
|
||||
|
||||
|
||||
class PlantError(GardenError):
|
||||
pass
|
||||
|
||||
|
||||
tomato = Plant("tomato", 2, 1)
|
||||
|
||||
print("=== Custom Garden Errors Demo ===")
|
||||
|
||||
print("\nTesting PlantError...")
|
||||
try:
|
||||
tomato.check_wilting()
|
||||
except PlantError as e:
|
||||
print("Caught PlantError:", e)
|
||||
|
||||
print("\nTesting WaterError...")
|
||||
try:
|
||||
tomato.check_water()
|
||||
except WaterError as e:
|
||||
print("Caught WaterError:", e)
|
||||
|
||||
print("\nTesting catching all garden errors...")
|
||||
try:
|
||||
tomato.check_garden()
|
||||
except GardenError as e:
|
||||
print("Caught GardenError:", e)
|
||||
|
||||
print("\nAll custom error types work correctly!")
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
class Plant:
|
||||
def __init__(self, name, water):
|
||||
self.name = name
|
||||
self.water = water
|
||||
|
||||
|
||||
tomato = Plant("tomato", 10)
|
||||
lettuce = Plant("lettuce", 5)
|
||||
carrots = Plant("carrots", 7)
|
||||
|
||||
|
||||
def water_plants(plants_list):
|
||||
print("Open watering system")
|
||||
try:
|
||||
for p in plants_list:
|
||||
p.water += 1
|
||||
print(f"Watering {p.name}")
|
||||
except AttributeError:
|
||||
print(f"Error: Cannot water {p} - invalid plant!")
|
||||
else:
|
||||
print("Watering completed successfully!")
|
||||
finally:
|
||||
print("Closing watering system (cleanup)")
|
||||
|
||||
|
||||
def test_watering_system():
|
||||
print("=== Garden Watering System ===")
|
||||
plantlist = [tomato, lettuce, carrots]
|
||||
badlist = [tomato, None, lettuce]
|
||||
print("\nTesting normal watering...")
|
||||
water_plants(plantlist)
|
||||
print("\nTesting with error...")
|
||||
water_plants(badlist)
|
||||
print("\nCleanup always happens, even with errors!")
|
||||
|
||||
|
||||
test_watering_system()
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
def check_plant_health(plant_name, water_level, sunlight):
|
||||
if not plant_name:
|
||||
raise ValueError("Plant name cannot be empty!")
|
||||
|
||||
if water_level < 1:
|
||||
raise ValueError(f"Water level {water_level} is too low (min 1)")
|
||||
if water_level > 10:
|
||||
raise ValueError(f"Water level {water_level} is too high (max 10)")
|
||||
|
||||
if sunlight < 2:
|
||||
raise ValueError(f"Sunlight hours {sunlight} is too low (min 2)")
|
||||
if sunlight > 12:
|
||||
raise ValueError(f"Sunlight hours {sunlight} is too high (max 12)")
|
||||
|
||||
return f"Plant '{plant_name}' is healthy!"
|
||||
|
||||
|
||||
def test_plant_checks():
|
||||
print("=== Garden Plant Health Checker ===")
|
||||
|
||||
print("\nTesting good values...")
|
||||
try:
|
||||
print(check_plant_health("tomato", 10, 5))
|
||||
except ValueError as e:
|
||||
print("Error:", e)
|
||||
|
||||
print("\nTesting empty plant name...")
|
||||
try:
|
||||
print(check_plant_health("", 10, 5))
|
||||
except ValueError as e:
|
||||
print("Error:", e)
|
||||
|
||||
print("\nTesting bad water level...")
|
||||
try:
|
||||
print(check_plant_health("tomato", 15, 5))
|
||||
except ValueError as e:
|
||||
print("Error:", e)
|
||||
|
||||
print("\nTesting bad sunlight hours...")
|
||||
try:
|
||||
print(check_plant_health("tomato", 10, 0))
|
||||
except ValueError as e:
|
||||
print("Error:", e)
|
||||
|
||||
print("\nAll error raising tests completed!")
|
||||
|
||||
|
||||
test_plant_checks()
|
||||
|
|
@ -0,0 +1,69 @@
|
|||
class Plant:
|
||||
def __init__(self, name, water, sun):
|
||||
self.name = name
|
||||
self.water = water
|
||||
self.sun = sun
|
||||
|
||||
def watering(self, water: int = 1) -> None:
|
||||
self.water += water
|
||||
print(f"Watering {self.name} success")
|
||||
|
||||
def check_plant_health(name, water, sun):
|
||||
srt = f"Error checking {name}: "
|
||||
if water < 1:
|
||||
raise ValueError(f"{srt}Water level {water} is too low (min 1)")
|
||||
if water > 10:
|
||||
raise ValueError(f"{srt}Water level {water} is too high (max 10)")
|
||||
|
||||
if sun < 2:
|
||||
raise ValueError(f"{srt}Sunlight hours {sun} is too low (min 2)")
|
||||
if sun > 12:
|
||||
raise ValueError(f"{srt}Sunlight hours {sun} is too high (max 12)")
|
||||
|
||||
return f"{name}: healthy (water: {water}, sun: {sun})"
|
||||
|
||||
|
||||
class Garden:
|
||||
def __init__(self):
|
||||
self._plants: list[Plant] = []
|
||||
|
||||
def add_plant(self, plant: Plant) -> None:
|
||||
if plant.name == "":
|
||||
raise ValueError("Error adding plant: Plant name cannot be empty!")
|
||||
else:
|
||||
self._plants.append(plant)
|
||||
print(f"Added {plant.name} succesfully")
|
||||
|
||||
def water_plants(self) -> None:
|
||||
print("Open watering system")
|
||||
try:
|
||||
for p in self._plants:
|
||||
p.water += 1
|
||||
print(f"Watering {p.name}")
|
||||
except AttributeError:
|
||||
print(f"Error: Cannot water {p} - invalid plant!")
|
||||
finally:
|
||||
print("Closing watering system (cleanup)")
|
||||
|
||||
def check_garden_health(self) -> None:
|
||||
print("\nChecking Plant health...")
|
||||
for p in self._plants:
|
||||
try:
|
||||
print(Plant.check_plant_health(p.name, p.water, p.sun))
|
||||
except ValueError as e:
|
||||
print(e)
|
||||
|
||||
|
||||
garden = Garden()
|
||||
print("=== Garden Management System ===\n")
|
||||
print("Adding plants to garden...")
|
||||
try:
|
||||
garden.add_plant(Plant("tomato", 5, 8))
|
||||
garden.add_plant(Plant("lettuce", 14, 3))
|
||||
garden.add_plant(Plant("", 5, 6))
|
||||
except ValueError as e:
|
||||
print(e)
|
||||
print("\nWatering plants...")
|
||||
garden.water_plants()
|
||||
garden.check_garden_health()
|
||||
print("Garden management system test complete!")
|
||||
|
|
@ -0,0 +1 @@
|
|||
print("Hello, Garden Community!")
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
def ft_plot_area():
|
||||
lenght = int(input("Enter length: "))
|
||||
widht = int(input("Enter Widht: "))
|
||||
print("Plot area:", lenght * widht)
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
def ft_harvest_total():
|
||||
day = int(input("Day 1 harvest: "))
|
||||
day += int(input("Day 2 harvest: "))
|
||||
day += int(input("Day 3 harvest: "))
|
||||
print("Total harvest:", day)
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
def ft_plant_age():
|
||||
age = int(input("Enter plant age in days: "))
|
||||
if age > 60:
|
||||
print("Plant is ready to harvest!")
|
||||
else:
|
||||
print("Plant needs more time to grow.")
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
def ft_water_reminder():
|
||||
day = int(input("Days since last watering: "))
|
||||
if day > 2:
|
||||
print("Water the plants!")
|
||||
else:
|
||||
print("Plants are fine")
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
def ft_count_harvest_iterative():
|
||||
day = int(input("Days until harvest: "))
|
||||
while day > 0:
|
||||
print("Day", 5 - day + 1)
|
||||
day = day - 1
|
||||
print("Harvest time!")
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
def ft_count_harvest_recursive(day=None, last=None):
|
||||
if day is None and last is None:
|
||||
last = int(input("Days until harvest: "))
|
||||
day = 1
|
||||
if day > last:
|
||||
print("Harvest time!")
|
||||
return
|
||||
print("Day", day)
|
||||
ft_count_harvest_recursive(day + 1, last)
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
def ft_garden_summary():
|
||||
name = input("Enter garden name: ")
|
||||
number = input("Enter number of plants: ")
|
||||
print("Garden:", name, "\nPlants:", number, "\nStatus: Growing Well!")
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
def ft_seed_inventory(seed_type: str, quantity: int, unit: str) -> None:
|
||||
seed_type = seed_type.lower()
|
||||
seed_type = seed_type[0].upper() + seed_type[1:]
|
||||
if unit == "packets":
|
||||
print(seed_type, "seeds:", quantity, unit, "available")
|
||||
elif unit == "grams":
|
||||
print(seed_type, "seeds:", quantity, unit, "total")
|
||||
elif unit == "area":
|
||||
print(seed_type, "seeds: covers", quantity, "square meters")
|
||||
else:
|
||||
print("Unknown unit type")
|
||||
Loading…
Reference in New Issue