Advertisement
Alekal

Untitled

Nov 28th, 2018
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.74 KB | None | 0 0
  1. """Gym."""
  2.  
  3.  
  4. class Trainers:
  5. """Represent city module."""
  6.  
  7. def __init__(self, stamina: int, color: str):
  8. """
  9. Init.
  10.  
  11. :param stamina:
  12. :param color:
  13. """
  14. self.stamina = stamina
  15. self.color = color
  16.  
  17. def __repr__(self):
  18. """Trainers: [{tossude vastupidavus}, {tossude värv}]."""
  19. return f"Trainers: [{self.stamina}, {self.color}]"
  20.  
  21.  
  22. class Member:
  23. """Represent member module."""
  24.  
  25. def __init__(self, name: str, age: int, trainers: Trainers):
  26. """
  27. Init.
  28.  
  29. :param name:
  30. :param age:
  31. :param trainers:
  32. """
  33. self.name = name
  34. self.age = age
  35. self.trainers = trainers
  36. self.member_in_gym = []
  37.  
  38. def add_to_gym(self, gym):
  39. """Add yo gym.
  40.  
  41. :return
  42. """
  43. self.member_in_gym.append(gym)
  44.  
  45. def remove_from_gym(self, gym):
  46. """
  47. Remove ftom gym.
  48.  
  49. :param gym:
  50. :return:
  51. """
  52. self.member_in_gym.remove(gym)
  53.  
  54. def get_all_gyms(self) -> list:
  55. """
  56. Get all gyms.
  57.  
  58. :return:
  59. """
  60. pass
  61.  
  62. def __repr__(self):
  63. """
  64. Repr.
  65.  
  66. :return:
  67. """
  68. return f"{self.name}, {self.age}: {self.trainers}"
  69.  
  70.  
  71. class Gym:
  72. """Docstring."""
  73.  
  74. def __init__(self, name: str, max_members_number: int):
  75. """
  76. Unit.
  77.  
  78. :param name:
  79. :param max_members_number:
  80. """
  81. self.name = name
  82. self.max_members_numbers = max_members_number
  83. self.member_to_gym = []
  84. self.only_members_name = []
  85. self.only_members_stamina = []
  86. # self.member_to_gym = {}
  87.  
  88. def get_members_count_by_trainers_color(self, color):
  89. """
  90. Get members count by trainers color.
  91.  
  92. :param color:
  93. :return:
  94. """
  95. count = 0
  96. for member in self.member_to_gym:
  97. if member.trainers is not None:
  98. if member.trainers.color == color:
  99. count += 1
  100. return count
  101.  
  102. # def get_members_count_by_name(self, name):
  103. # """
  104. # Get members count by name.
  105. #
  106. # :param name:
  107. # :return:
  108. # """
  109. # count = 0
  110. # for member in self.member_to_gym:
  111. # if member.name == name:
  112. # count += 1
  113. # return count
  114.  
  115. def minimum_stamina(self):
  116. """
  117. Minimal stamina.
  118.  
  119. :return:
  120. """
  121. members_with_low_stamina = []
  122. low_stamina = float('inf')
  123. for i in self.member_to_gym:
  124. if i.trainers.stamina < low_stamina:
  125. members_with_low_stamina = [i]
  126. low_stamina = i.trainers.stamina
  127. elif i.trainers.stamina == low_stamina:
  128. members_with_low_stamina.append(i)
  129. return members_with_low_stamina
  130.  
  131. def add_member(self, member: Member) -> Member:
  132. """
  133. Add member.
  134.  
  135. :param member:
  136. :return:
  137. """
  138. if self.can_add_member(member):
  139. if member not in self.member_to_gym:
  140. if len(self.member_to_gym) < self.max_members_numbers:
  141. member.member_in_gym.append(self)
  142. self.member_to_gym.append(member)
  143. # print(self.member_to_gym)
  144. return member
  145. if len(self.member_to_gym) >= self.max_members_numbers:
  146. for i in self.minimum_stamina():
  147. self.member_to_gym.remove(i)
  148. self.member_to_gym.append(member)
  149. return member
  150.  
  151. def can_add_member(self, member: Member) -> bool:
  152. """
  153. Can add member.
  154.  
  155. :param member:
  156. :return:
  157. """
  158. if isinstance(member, Member):
  159. if member.trainers.stamina >= 0:
  160. if isinstance(member.trainers.color, str):
  161. if len(member.trainers.color) >= 1:
  162. return True
  163. else:
  164. return False
  165.  
  166. def remove_member(self, member: Member):
  167. """
  168. Remove member.
  169.  
  170. :param member:
  171. :return:
  172. """
  173. if member in self.member_to_gym:
  174. member.member_in_gym.remove(self)
  175. self.member_to_gym.remove(member)
  176. # for i in self.member_to_gym:
  177. # if i == member:
  178. # self.member_to_gym.remove(i)
  179.  
  180. def get_total_stamina(self) -> int:
  181. """
  182. Total stamina.
  183.  
  184. :return:
  185. """
  186. stamina = []
  187. for member in self.member_to_gym:
  188. stamina.append(member.trainers.stamina)
  189. return sum(stamina)
  190.  
  191. def get_members_number(self) -> int:
  192. """
  193. Member number.
  194.  
  195. :return:
  196. """
  197. return len(self.member_to_gym)
  198.  
  199. def get_all_members(self) -> list:
  200. """
  201. All members.
  202.  
  203. :return:
  204. """
  205. return self.member_to_gym
  206.  
  207. def get_average_age(self) -> float:
  208. """
  209. Average age.
  210.  
  211. :return:
  212. """
  213. age = []
  214. for member in self.member_to_gym:
  215. age.append(member.age)
  216. return sum(age) / len(self.member_to_gym)
  217. # return round((sum(age) / len(self.member_to_gym)), 2)
  218.  
  219. def __str__(self) -> str:
  220. """
  221. Str.
  222.  
  223. :return:
  224. """
  225. return f"Gym {self.name}: {len(self.member_to_gym)} member(s)"
  226.  
  227. def __repr__(self):
  228. """
  229. Repr.
  230.  
  231. :return:
  232. """
  233. return f"Gym {self.name}: {len(self.member_to_gym)} member(s)"
  234.  
  235.  
  236. class City:
  237. """Represent city modul."""
  238.  
  239. def __init__(self, max_gym_number: int):
  240. """Docstring."""
  241. self.max_gym_number = max_gym_number
  242. self.gym_in_city = []
  243.  
  244. def build_gym(self, gym):
  245. """Docstring."""
  246. if self.can_build_gym():
  247. self.gym_in_city.append(gym)
  248. else:
  249. return None
  250.  
  251. def can_build_gym(self) -> bool:
  252. """Docstring."""
  253. if len(self.gym_in_city) < self.max_gym_number:
  254. return True
  255. else:
  256. return False
  257.  
  258. def destroy_gym(self):
  259. """Docstring."""
  260. gyms_to_destroy = []
  261. for gym in self.gym_in_city:
  262. min_memebers_in_gym_count = min(map(lambda gym: len(gym.member_to_gym), self.gym_in_city))
  263. if len(gym.member_to_gym) < min_memebers_in_gym_count:
  264. min_memebers_in_gym_count = len(gym.member_to_gym)
  265. gyms_to_destroy = [gym]
  266. elif len(gym.member_to_gym) == min_memebers_in_gym_count:
  267. gyms_to_destroy.append(gym)
  268. else:
  269. pass
  270. for gym in gyms_to_destroy:
  271. self.gym_in_city.remove(gym)
  272.  
  273. def get_max_members_gym(self) -> list:
  274. """Docstring."""
  275. max_memebers_in_gym_count = max(map(lambda gym: len(gym.member_to_gym), self.gym_in_city))
  276. list_of_max_memebers = []
  277. list_of_max_memebers.append(max_memebers_in_gym_count)
  278. return list_of_max_memebers
  279.  
  280. def get_max_stamina_gyms(self) -> list:
  281. """Docstring."""
  282. counter = 0
  283. max_stamina_gym = []
  284. for gym in self.gym_in_city:
  285. if gym.get_total_stamina() > counter:
  286. counter = gym.get_total_stamina()
  287. max_stamina_gym = [gym]
  288. elif gym.get_total_stamina() == counter:
  289. max_stamina_gym.append(gym)
  290. return max_stamina_gym
  291.  
  292. def get_max_average_ages(self) -> list:
  293. """Docstring."""
  294. try:
  295. counter = 0
  296. max_age = []
  297. for gym in self.gym_in_city:
  298. if gym.get_average_age() > counter:
  299. counter = gym.get_average_age()
  300. max_age = [gym]
  301. elif gym.get_average_age() == counter:
  302. max_age.append(gym)
  303. return max_age
  304. except ZeroDivisionError:
  305. pass
  306.  
  307. def get_min_average_ages(self) -> list:
  308. """Docstring."""
  309. try:
  310. counter = float('inf')
  311. min_age = []
  312. for gym in self.gym_in_city:
  313. if gym.get_average_age() < counter:
  314. counter = gym.get_average_age()
  315. min_age = [gym]
  316. elif gym.get_average_age() == counter:
  317. min_age.append(gym)
  318. return min_age
  319. except ZeroDivisionError:
  320. pass
  321.  
  322. def get_gyms_by_trainers_color(self, color: str) -> list:
  323. """Docstring."""
  324. return sorted(self.gym_in_city, key=lambda gym: gym.get_members_count_by_trainers_color(color), reverse=True)
  325.  
  326. # def list_of_name(self, name):
  327. # list = []
  328. # for gym in self.gym_in_city:
  329. # count = 0
  330. # for member in gym.get_all_members():
  331. # if member.name == name:
  332. # count += 1
  333. # if count >= 1:
  334. # list.append([gym, count])
  335. # list = sorted(list, key=lambda x: x[1], reverse=True)
  336. # return list
  337.  
  338. def get_gyms_by_name(self, name: str) -> list:
  339. """Docstring."""
  340. sorted_list_by_name = []
  341. list = []
  342. for gym in self.gym_in_city:
  343. count = 0
  344. for member in gym.get_all_members():
  345. if member.name == name:
  346. count += 1
  347. if count >= 1:
  348. list.append([gym, count])
  349. list = sorted(list, key=lambda x: x[1], reverse=True)
  350. for i in list:
  351. sorted_list_by_name.append(i[0])
  352. return sorted_list_by_name
  353. # return sorted(self.gym_in_city, key=lambda gym: gym.get_members_count_by_name(name), reverse=True)
  354.  
  355. def get_all_gyms(self) -> list:
  356. """Get all gyms."""
  357. return self.gym_in_city
  358.  
  359.  
  360. if __name__ == "__main__":
  361. city1 = City(100)
  362. gym = Gym("TTÜ Sport", 50)
  363. city1.build_gym(gym)
  364.  
  365. trainers1 = Trainers(50, "blue")
  366. trainers2 = Trainers(50, "grey")
  367.  
  368. member = Member("Ago Luberg", 35, trainers1)
  369. member2 = Member("Ahti Lohk", 35, trainers2)
  370.  
  371. gym.add_member(member)
  372. gym.add_member(member2)
  373.  
  374. print(gym.get_members_number()) # 2
  375.  
  376. print(gym.get_all_members()) # [Ago Luberg, 35: Trainers: [50, blue], Ahti Lohk, 35: Trainers: [50, grey]]
  377.  
  378. gym.add_member(member) # Trying to add Ago again
  379. print(gym.get_members_number()) # 2 //We can't...
  380.  
  381. for i in range(48):
  382. gym.add_member(Member("Tudeng Tudeng", 20, Trainers(49, "blue")))
  383.  
  384. print(gym.get_members_number()) # 50
  385.  
  386. trainers3 = Trainers(60, "blue")
  387. member_new = Member("Megane", 19, trainers3)
  388. gym.add_member(member_new)
  389.  
  390. print(
  391. gym.get_members_number()) # 3 -> Ago, Ahti and Megan, all others were removed because of the lowest trainers' stamina
  392.  
  393. city2 = City(10)
  394. city2.build_gym(Gym("MyFitness", 100))
  395. city2.destroy_gym()
  396.  
  397. for i in range(9):
  398. city2.build_gym(Gym("Super Gym", 10))
  399.  
  400. print(city2.can_build_gym()) # False -> Cannot build gym, city is full of them
  401.  
  402. #######################################################################################
  403.  
  404. city3 = City(100)
  405.  
  406. gym4 = Gym("Sparta", 50)
  407. gym5 = Gym("People Fitness", 30)
  408. gym6 = Gym("Gym Eesti", 100)
  409.  
  410. city3.build_gym(gym4)
  411. city3.build_gym(gym5)
  412. city3.build_gym(gym6)
  413.  
  414. gym4.add_member(Member("Bob", 18, Trainers(50, "black")))
  415. gym4.add_member(Member("Emma", 20, Trainers(70, "red")))
  416. gym4.add_member(Member("Ken", 25, Trainers(40, "grey")))
  417.  
  418. gym5.add_member(Member("Merili", 18, Trainers(100, "pink")))
  419. gym5.add_member(Member("Richard", 20, Trainers(70, "green")))
  420.  
  421. gym6.add_member(Member("Bella", 40, Trainers(15, "green")))
  422. gym6.add_member(Member("Bob", 50, Trainers(70, "green")))
  423. gym6.add_member(Member("Sandra", 25, Trainers(30, "pink")))
  424. gym6.add_member(Member("Bob", 35, Trainers(50, "black")))
  425.  
  426. city2.get_max_members_gym() # [Gym Gym Eesti : 4 member(s)]
  427. city2.get_max_stamina_gyms() # [Gym People Fitness : 2 member(s)]
  428. city2.get_max_average_ages() # [Gym Gym Eesti : 4 member(s)] => average age 37,5
  429. city2.get_min_average_ages() # [Gym People Fitness : 2 member(s)] => average age 19
  430. city2.get_gyms_by_trainers_color(
  431. "green") # [Gym Gym Eesti : 4 member(s), Gym People Fitness : 2 member(s)] => Gym Eesti has 2 members with
  432. # green trainers, People Fitness has 1.
  433. city2.get_gyms_by_name(
  434. "Bob") # [Gym Gym Eesti : 4 member(s), Gym Sparta : 2 member(s)] => Gym Eesti has 2 members with name Bob,
  435. # Sparta has 1.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement