Skip to content
Snippets Groups Projects
Commit 07a0ef6d authored by Erlacher, Moritz's avatar Erlacher, Moritz
Browse files

Code of second tutorial

parent 50a04580
No related branches found
No related tags found
No related merge requests found
File added
File added
from plant import Plant
class Bed:
def __init__(self, location: str) -> None:
self.location = location
self._plants = []
self.water_level = 0
self._WATERING_THRESHOLD = 5
def __repr__(self) -> str:
return f"Bed {self.location}"
def __str__(self) -> str:
return (f"{self!r}\n"
f"Water level: {self.water_level}\n"
f"{len(self.plants)} plants: {[p.species for p in self.plants]}")
@property
def water_level(self) -> int:
return self._water_level
@water_level.setter
def water_level(self, water_level: int):
if water_level < 0:
raise ValueError(f"No more water in {self!r}.")
self._water_level = water_level
@property
def plants(self) -> list:
return self._plants
@plants.deleter
def plants(self):
self._plants.clear()
@property
def needs_water(self) -> bool:
return self.water_level < self._WATERING_THRESHOLD
def plant_plant(self, plant: Plant) -> None:
self.plants.append(plant)
def water(self, added_water: int = 1) -> None:
self.water_level += added_water
def update(self) -> None:
for plant in self.plants:
try:
self.water_level -= 1
plant.grow()
except ValueError:
print(f"Bed {self.location} is out of water, plants can't grow")
return
def harvest(self):
harvested_fruits = []
for plant in self.plants:
while True:
try:
harvested_fruits.append(plant.pick())
except IndexError:
break
return harvested_fruits
class Fruit:
def __init__(self, name: str, calories: int):
self.name = name
self.calories = calories
def __repr__(self):
return f"{self.name}"
import random
from copy import copy
from fruit import Fruit
class Plant:
def __init__(self, species: str, growth_factor: int, fruit_template: Fruit):
self.species = species
self.growth_factor = growth_factor
self.fruit_template = fruit_template
self._size = 1
self._fruits = []
def __repr__(self):
return f"{self.species}"
def __str__(self):
return f"{self.species} of size {self.size:.1f} with {len(self.fruits)} fruits"
@property
def size(self) -> int:
return self._size
@property
def growth_factor(self) -> float:
return self._growth_factor
@property
def fruits(self):
return self._fruits
@fruits.deleter
def fruits(self):
self.fruits.clear()
@growth_factor.setter
def growth_factor(self, growth_factor: float):
if growth_factor < 1:
raise ValueError(f"Invalid growth factor. given: {growth_factor} should be bigger than 1")
self._growth_factor = growth_factor
def grow(self):
self._size *= self.growth_factor
if random.randrange(100) < self.size:
self.fruits.append(copy(self.fruit_template))
def pick(self):
return self.fruits.pop()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment