Advertisement
Guest User

Untitled

a guest
Nov 20th, 2019
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.15 KB | None | 0 0
  1. """Pizzeria."""
  2. from math import pi
  3.  
  4.  
  5. class Chef:
  6. """Chef class."""
  7.  
  8. def __init__(self, name: str, experience_level: int):
  9. """Initialize chef's name and experience level."""
  10. self.name = name
  11. self.experience_level = experience_level
  12. self.money = 0
  13.  
  14. def __repr__(self):
  15. """Return string."""
  16. return f"Pizza chef {self.name.capitalize()} with {self.experience_level} XP"
  17.  
  18.  
  19. class Pizza:
  20. """Pizza class."""
  21.  
  22. def __init__(self, name: str, diameter: int, toppings: list):
  23. """Initialize pizza."""
  24. self.name = name
  25. self.diameter = diameter
  26. self.toppings = toppings
  27.  
  28. def calculate_complexity(self) -> int:
  29. """Calculate pizza complexity."""
  30. complexity = 0
  31. for topping in self.toppings:
  32. complexity += len(topping) // 3
  33. return complexity
  34.  
  35. def calculate_price(self) -> int:
  36. """Calculate pizza price."""
  37. r = self.diameter / 2
  38. pizza_area = pi * r ** 2
  39. area_price = pizza_area / 40
  40. topping_price = len(self.toppings) // 2
  41. return int((area_price + topping_price) * 100)
  42.  
  43. def __repr__(self):
  44. """Return string."""
  45. return f"{self.name.capitalize()} pizza with a price of {self.calculate_price() // 100}." \
  46. f"{str(self.calculate_price())[-2:]}"
  47.  
  48.  
  49. class Pizzeria:
  50. """Pizzeria class."""
  51.  
  52. def __init__(self, name: str, is_fancy: bool, budget: int):
  53. """Initialize Pizzeria."""
  54. self.name = name
  55. self.is_fancy = is_fancy
  56. self.budget = budget
  57. self.chefs = []
  58. self.pizzas = []
  59. self.baked = []
  60.  
  61. def __repr__(self):
  62. """Return string."""
  63. return f"{self.name.capitalize()} with {len(self.chefs)} pizza chef's."
  64.  
  65. def add_chef(self, chef: Chef) -> Chef or None:
  66. """Add chef to pizzeria."""
  67. if chef not in self.chefs:
  68. if self.is_fancy and chef.experience_level >= 25:
  69. self.chefs.append(chef)
  70. return chef
  71. elif not self.is_fancy:
  72. self.chefs.append(chef)
  73. return chef
  74. else:
  75. return None
  76.  
  77. def remove_chef(self, chef: Chef):
  78. """Remove chef from pizzeria."""
  79. if chef in self.chefs:
  80. self.chefs.remove(chef)
  81.  
  82. def add_pizza_to_menu(self, pizza: Pizza):
  83. """Add pizza to menu."""
  84. pizza_price = pizza.calculate_price()
  85. if pizza_price <= self.budget:
  86. if pizza not in self.pizzas and len(self.chefs) >= 1:
  87. self.pizzas.append(pizza)
  88. self.budget -= pizza_price
  89.  
  90. def remove_pizza_from_menu(self, pizza: Pizza):
  91. """Remove pizza from menu."""
  92. self.pizzas.remove(pizza)
  93.  
  94. def bake_pizza(self, pizza: Pizza) -> Pizza or None:
  95. """Bake a pizza."""
  96. qualified_chefs = []
  97.  
  98. for chef in self.chefs:
  99. if chef.experience_level >= pizza.calculate_complexity():
  100. qualified_chefs.append(chef)
  101. sorted_chefs = sorted(qualified_chefs, key=lambda c: c.experience_level, reverse=False)
  102. if pizza in self.pizzas:
  103. if len(qualified_chefs) >= 1:
  104. sorted_chefs[0].experience_level += len(pizza.name) // 2
  105. income = pizza.calculate_price() * 4 + len(pizza.name)
  106. self.budget += income // 2
  107. self.baked.append(pizza)
  108. return pizza
  109. else:
  110. return None
  111.  
  112. def get_pizza_menu(self) -> list:
  113. """Get menu."""
  114. menu = self.pizzas
  115. return sorted(menu, key=lambda p: p.calculate_price(), reverse=True)
  116.  
  117. def get_baked_pizzas(self) -> dict:
  118. """Get baked pizzas."""
  119. pizzas = dict()
  120. for pizza in self.baked:
  121. if pizza in pizzas:
  122. pizzas[pizza] += 1
  123. else:
  124. pizzas[pizza] = 1
  125. return pizzas
  126.  
  127. def get_chefs(self) -> list:
  128. """Get chefs."""
  129. chefs = self.chefs
  130.  
  131. return sorted(chefs, key=lambda c: c.experience_level)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement