Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- """Pizzeria."""
- from math import pi
- class Chef:
- """Chef class."""
- def __init__(self, name: str, experience_level: int):
- """Initialize chef's name and experience level."""
- self.name = name
- self.experience_level = experience_level
- self.money = 0
- def __repr__(self):
- """Return string."""
- return f"Pizza chef {self.name.capitalize()} with {self.experience_level} XP"
- class Pizza:
- """Pizza class."""
- def __init__(self, name: str, diameter: int, toppings: list):
- """Initialize pizza."""
- self.name = name
- self.diameter = diameter
- self.toppings = toppings
- def calculate_complexity(self) -> int:
- """Calculate pizza complexity."""
- complexity = 0
- for topping in self.toppings:
- complexity += len(topping) // 3
- return complexity
- def calculate_price(self) -> int:
- """Calculate pizza price."""
- r = self.diameter / 2
- pizza_area = pi * r ** 2
- area_price = pizza_area / 40
- topping_price = len(self.toppings) // 2
- return int((area_price + topping_price) * 100)
- def __repr__(self):
- """Return string."""
- return f"{self.name.capitalize()} pizza with a price of {self.calculate_price() // 100}." \
- f"{str(self.calculate_price())[-2:]}"
- class Pizzeria:
- """Pizzeria class."""
- def __init__(self, name: str, is_fancy: bool, budget: int):
- """Initialize Pizzeria."""
- self.name = name
- self.is_fancy = is_fancy
- self.budget = budget
- self.chefs = []
- self.pizzas = []
- self.baked = []
- def __repr__(self):
- """Return string."""
- return f"{self.name.capitalize()} with {len(self.chefs)} pizza chef's."
- def add_chef(self, chef: Chef) -> Chef or None:
- """Add chef to pizzeria."""
- if chef not in self.chefs:
- if self.is_fancy and chef.experience_level >= 25:
- self.chefs.append(chef)
- return chef
- elif not self.is_fancy:
- self.chefs.append(chef)
- return chef
- else:
- return None
- def remove_chef(self, chef: Chef):
- """Remove chef from pizzeria."""
- if chef in self.chefs:
- self.chefs.remove(chef)
- def add_pizza_to_menu(self, pizza: Pizza):
- """Add pizza to menu."""
- pizza_price = pizza.calculate_price()
- if pizza_price <= self.budget:
- if pizza not in self.pizzas and len(self.chefs) >= 1:
- self.pizzas.append(pizza)
- self.budget -= pizza_price
- def remove_pizza_from_menu(self, pizza: Pizza):
- """Remove pizza from menu."""
- self.pizzas.remove(pizza)
- def bake_pizza(self, pizza: Pizza) -> Pizza or None:
- """Bake a pizza."""
- qualified_chefs = []
- for chef in self.chefs:
- if chef.experience_level >= pizza.calculate_complexity():
- qualified_chefs.append(chef)
- sorted_chefs = sorted(qualified_chefs, key=lambda c: c.experience_level, reverse=False)
- if pizza in self.pizzas:
- if len(qualified_chefs) >= 1:
- sorted_chefs[0].experience_level += len(pizza.name) // 2
- income = pizza.calculate_price() * 4 + len(pizza.name)
- self.budget += income // 2
- self.baked.append(pizza)
- return pizza
- else:
- return None
- def get_pizza_menu(self) -> list:
- """Get menu."""
- menu = self.pizzas
- return sorted(menu, key=lambda p: p.calculate_price(), reverse=True)
- def get_baked_pizzas(self) -> dict:
- """Get baked pizzas."""
- pizzas = dict()
- for pizza in self.baked:
- if pizza in pizzas:
- pizzas[pizza] += 1
- else:
- pizzas[pizza] = 1
- return pizzas
- def get_chefs(self) -> list:
- """Get chefs."""
- chefs = self.chefs
- return sorted(chefs, key=lambda c: c.experience_level)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement