class Plantation:
def __init__(self, size: int):
self.size = size
self.plants = {}
self.workers = []
@property
def size(self):
return self.__size
@size.setter
def size(self, value: int):
if value < 0:
raise ValueError("Size must be positive number!")
self.__size = value
def hire_worker(self, worker: str):
if worker in self.workers:
raise ValueError("Worker already hired!")
self.workers.append(worker)
return f"{worker} successfully hired."
def __len__(self):
count_of_plants = 0
for plants_planted in self.plants.values():
count_of_plants += len(plants_planted)
return count_of_plants
def planting(self, worker: str, plant: str):
if worker not in self.workers:
raise ValueError(f"Worker with name {worker} is not hired!")
elif len(self) >= self.size:
raise ValueError("The plantation is full!")
if worker in self.plants.keys():
self.plants[worker].append(plant)
return f"{worker} planted {plant}."
self.plants[worker] = [plant]
return f"{worker} planted it's first {plant}."
def __str__(self):
result = [f"Plantation size: {self.size}"]
result.append(f'{", ".join(self.workers)}')
for worker, plants in self.plants.items():
result.append(f"{worker} planted: {', '.join(plants)}")
return '\n'.join(result)
def __repr__(self):
result = ''
result += f'Size: {self.size}\n'
result += f'Workers: {", ".join(self.workers)}'
return result