Advertisement
Alekal

Untitled

Nov 27th, 2018
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.58 KB | None | 0 0
  1. """Gym."""
  2. from operator import attrgetter
  3.  
  4. class Trainers:
  5. """Represent city modul."""
  6.  
  7. def __init__(self, stamina: int, color: str):
  8. self.stamina = stamina
  9. self.color = color
  10.  
  11. def __repr__(self):
  12. """Trainers: [{tossude vastupidavus}, {tossude värv}]."""
  13. return f"Trainers: [{self.stamina}, {self.color}]"
  14.  
  15.  
  16. class Member:
  17. """Represent member modul"""
  18.  
  19. def __init__(self, name: str, age: int, trainers: Trainers):
  20. """Docstring."""
  21.  
  22. self.name = name
  23. self.age = age
  24. self.trainers = trainers
  25. self.member_in_gym = []
  26.  
  27. def add_to_gym(self, gym):
  28. self.member_in_gym.append(gym)
  29.  
  30. def remove_from_gym(self, gym):
  31. self.member_in_gym.remove(gym)
  32.  
  33. def get_all_gyms(self) -> list:
  34. """Docstring."""
  35. pass
  36.  
  37. def __repr__(self):
  38. return f"{self.name}, {self.age}: {self.trainers}"
  39.  
  40.  
  41. class Gym:
  42. """Docstring."""
  43.  
  44. def __init__(self, name: str, max_members_number: int):
  45. """Docstring."""
  46. self.name = name
  47. self.max_members_numbers = max_members_number
  48. self.member_to_gym = []
  49. self.only_members_name = []
  50. self.only_members_stamina = []
  51. # self.member_to_gym = {}
  52.  
  53. def get_members_count_by_trainers_color(self, color):
  54. count = 0
  55. for member in self.member_to_gym:
  56. if member.trainers is not None:
  57. if member.trainers == color:
  58. count += 1
  59. return count
  60.  
  61. def get_members_count_by_name(self):
  62. count = 0
  63. for member in self.member_to_gym:
  64. if member.name is not None and member == member.name:
  65. count += 1
  66. return count
  67.  
  68. def minimum_stamina(self):
  69. members_with_low_stamina = []
  70. low_stamina = float('inf')
  71. for i in self.member_to_gym:
  72. if i.trainers.stamina < low_stamina:
  73. members_with_low_stamina = [i]
  74. low_stamina = i.trainers.stamina
  75. elif i.trainers.stamina == low_stamina:
  76. members_with_low_stamina.append(i)
  77. return members_with_low_stamina
  78.  
  79. def add_member(self, member: Member) -> Member:
  80. """Docstring."""
  81. if self.can_add_member(member):
  82. if member not in self.member_to_gym:
  83. if len(self.member_to_gym) < self.max_members_numbers:
  84. member.member_in_gym.append(self)
  85. self.member_to_gym.append(member)
  86. # print(self.member_to_gym)
  87. return member
  88. if len(self.member_to_gym) >= self.max_members_numbers:
  89. for i in self.minimum_stamina():
  90. self.member_to_gym.remove(i)
  91. self.member_to_gym.append(member)
  92. return member
  93.  
  94. def can_add_member(self, member: Member) -> bool:
  95. """Docstring"""
  96. if isinstance(member, Member):
  97. if member.trainers.stamina >= 0:
  98. if isinstance(member.trainers.color, str):
  99. if len(member.trainers.color) >= 1:
  100. return True
  101. else:
  102. return False
  103.  
  104. def remove_member(self, member: Member):
  105. """Docstring."""
  106. if member in self.member_to_gym:
  107. member.member_in_gym.remove(self)
  108. self.member_to_gym.remove(member)
  109. # for i in self.member_to_gym:
  110. # if i == member:
  111. # self.member_to_gym.remove(i)
  112.  
  113. def get_total_stamina(self) -> int:
  114. """Docstring."""
  115. stamina = []
  116. for member in self.member_to_gym:
  117. stamina.append(member.trainers.stamina)
  118. return sum(stamina)
  119.  
  120. def get_members_number(self) -> int:
  121. """Docstring."""
  122. return len(self.member_to_gym)
  123.  
  124. def get_all_members(self) -> list:
  125. """Docstring."""
  126. return self.member_to_gym
  127.  
  128. def get_average_age(self) -> float:
  129. age = []
  130. for member in self.member_to_gym:
  131. age.append(member.age)
  132. return sum(age) / len(self.member_to_gym)
  133. # return round((sum(age) / len(self.member_to_gym)), 2)
  134.  
  135. def __str__(self) -> str:
  136. """Gym [saali nimi] : [saali liikmete arv] member(s)"""
  137. return f"Gym {self.name}: {len(self.member_to_gym)} member(s)"
  138.  
  139. def __repr__(self):
  140. return f"Gym {self.name}: {len(self.member_to_gym)} member(s)"
  141.  
  142.  
  143. class City:
  144. """Represent city modul."""
  145.  
  146. def __init__(self, max_gym_number: int):
  147. """Docstring."""
  148. self.max_gym_number = max_gym_number
  149. self.gym_in_city = []
  150.  
  151. def build_gym(self, gym):
  152. """Docstring."""
  153. if self.can_build_gym():
  154. self.gym_in_city.append(gym)
  155. else:
  156. return None
  157.  
  158. def can_build_gym(self) -> bool:
  159. """Docstring."""
  160. if len(self.gym_in_city) < self.max_gym_number:
  161. return True
  162. else:
  163. return False
  164.  
  165. def destroy_gym(self):
  166. """Docstring."""
  167. gyms_to_destroy = []
  168. for gym in self.gym_in_city:
  169. min_memebers_in_gym_count = min(map(lambda gym: len(gym.member_to_gym), self.gym_in_city))
  170. if len(gym.member_to_gym) < min_memebers_in_gym_count:
  171. min_memebers_in_gym_count = len(gym.member_to_gym)
  172. gyms_to_destroy = [gym]
  173. elif len(gym.member_to_gym) == min_memebers_in_gym_count:
  174. gyms_to_destroy.append(gym)
  175. else:
  176. pass
  177. for gym in gyms_to_destroy:
  178. self.gym_in_city.remove(gym)
  179.  
  180. def get_max_members_gym(self) -> list:
  181. """Docstring."""
  182. max_memebers_in_gym_count = max(map(lambda gym: len(gym.member_to_gym), self.gym_in_city))
  183. list_of_max_memebers = []
  184. list_of_max_memebers.append(max_memebers_in_gym_count)
  185. return list_of_max_memebers
  186.  
  187. def get_max_stamina_gyms(self) -> list:
  188. """Docstring."""
  189. counter = 0
  190. max_stamina_gym = []
  191. for gym in self.gym_in_city:
  192. if gym.get_total_stamina() > counter:
  193. counter = gym.get_total_stamina()
  194. max_stamina_gym = [gym]
  195. elif gym.get_total_stamina() == counter:
  196. max_stamina_gym.append(gym)
  197. return max_stamina_gym
  198.  
  199. def get_max_average_ages(self) -> list:
  200. """Docstring."""
  201. try:
  202. counter = 0
  203. max_age = []
  204. for gym in self.gym_in_city:
  205. if gym.get_average_age() > counter:
  206. counter = gym.get_average_age()
  207. max_age = [gym]
  208. elif gym.get_average_age() == counter:
  209. max_age.append(gym)
  210. return max_age
  211. except ZeroDivisionError:
  212. pass
  213.  
  214. def get_min_average_ages(self) -> list:
  215. """Docstring."""
  216. try:
  217. counter = float('inf')
  218. min_age = []
  219. for gym in self.gym_in_city:
  220. if gym.get_average_age() < counter:
  221. counter = gym.get_average_age()
  222. min_age = [gym]
  223. elif gym.get_average_age() == counter:
  224. min_age.append(gym)
  225. return min_age
  226. except ZeroDivisionError:
  227. pass
  228.  
  229. def get_gyms_by_trainers_color(self, color: str) -> list:
  230. """Docstring."""
  231. return sorted(self.gym_in_city, key=lambda gym: gym.get_members_count_by_trainers_color(color))
  232.  
  233. def get_gyms_by_name(self, name: str) -> list:
  234. """Docstring."""
  235. return sorted(self.gym_in_city, key=lambda gym: gym.get_members_count_by_name())
  236.  
  237. def get_all_gyms(self) -> list:
  238. return self.gym_in_city
  239.  
  240.  
  241. if __name__ == "__main__":
  242. city1 = City(100)
  243. gym = Gym("TTÜ Sport", 50)
  244. city1.build_gym(gym)
  245.  
  246. trainers1 = Trainers(50, "blue")
  247. trainers2 = Trainers(50, "grey")
  248.  
  249. member = Member("Ago Luberg", 35, trainers1)
  250. member2 = Member("Ahti Lohk", 35, trainers2)
  251.  
  252. gym.add_member(member)
  253. gym.add_member(member2)
  254.  
  255. print(gym.get_members_number()) # 2
  256.  
  257. print(gym.get_all_members()) # [Ago Luberg, 35: Trainers: [50, blue], Ahti Lohk, 35: Trainers: [50, grey]]
  258.  
  259. gym.add_member(member) # Trying to add Ago again
  260. print(gym.get_members_number()) # 2 //We can't...
  261.  
  262. for i in range(48):
  263. gym.add_member(Member("Tudeng Tudeng", 20, Trainers(49, "blue")))
  264.  
  265. print(gym.get_members_number()) # 50
  266.  
  267. trainers3 = Trainers(60, "blue")
  268. member_new = Member("Megane", 19, trainers3)
  269. gym.add_member(member_new)
  270.  
  271. print(
  272. gym.get_members_number()) # 3 -> Ago, Ahti and Megan, all others were removed because of the lowest trainers' stamina
  273.  
  274. city2 = City(10)
  275. city2.build_gym(Gym("MyFitness", 100))
  276. city2.destroy_gym()
  277.  
  278. for i in range(9):
  279. city2.build_gym(Gym("Super Gym", 10))
  280.  
  281. print(city2.can_build_gym()) # False -> Cannot build gym, city is full of them
  282.  
  283. #######################################################################################
  284.  
  285. city3 = City(100)
  286.  
  287. gym4 = Gym("Sparta", 50)
  288. gym5 = Gym("People Fitness", 30)
  289. gym6 = Gym("Gym Eesti", 100)
  290.  
  291. city3.build_gym(gym4)
  292. city3.build_gym(gym5)
  293. city3.build_gym(gym6)
  294.  
  295. gym4.add_member(Member("Bob", 18, Trainers(50, "black")))
  296. gym4.add_member(Member("Emma", 20, Trainers(70, "red")))
  297. gym4.add_member(Member("Ken", 25, Trainers(40, "grey")))
  298.  
  299. gym5.add_member(Member("Merili", 18, Trainers(100, "pink")))
  300. gym5.add_member(Member("Richard", 20, Trainers(70, "green")))
  301.  
  302. gym6.add_member(Member("Bella", 40, Trainers(15, "green")))
  303. gym6.add_member(Member("Bob", 50, Trainers(70, "green")))
  304. gym6.add_member(Member("Sandra", 25, Trainers(30, "pink")))
  305. gym6.add_member(Member("Bob", 35, Trainers(50, "black")))
  306.  
  307. city2.get_max_members_gym() # [Gym Gym Eesti : 4 member(s)]
  308. city2.get_max_stamina_gyms() # [Gym People Fitness : 2 member(s)]
  309. city2.get_max_average_ages() # [Gym Gym Eesti : 4 member(s)] => average age 37,5
  310. city2.get_min_average_ages() # [Gym People Fitness : 2 member(s)] => average age 19
  311. city2.get_gyms_by_trainers_color(
  312. "green") # [Gym Gym Eesti : 4 member(s), Gym People Fitness : 2 member(s)] => Gym Eesti has 2 members with green trainers, People Fitness has 1.
  313. city2.get_gyms_by_name(
  314. "Bob") # [Gym Gym Eesti : 4 member(s), Gym Sparta : 2 member(s)] => Gym Eesti has 2 members with name Bob, Sparta has 1.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement