Advertisement
Alekal

Untitled

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