Advertisement
Alekal

Untitled

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