Advertisement
pacho_the_python

Untitled

Dec 19th, 2022
751
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.16 KB | None | 0 0
  1. from band import Band
  2. from band_members.drummer import Drummer
  3. from band_members.guitarist import Guitarist
  4. from band_members.singer import Singer
  5. from concert import Concert
  6.  
  7.  
  8. band_musicians = {
  9.     'drummer': 0,
  10.     'singer': 0,
  11.     'guitarist': 0
  12. }
  13.  
  14. rock_skills = {
  15.     'Drummer': 'play the drums with drumsticks',
  16.     'Singer': 'sing high pitch notes',
  17.     'Guitarist': 'play rock'
  18. }
  19.  
  20. metal_skills = {
  21.     'Drummer': 'play the drums with drumsticks',
  22.     'Singer': 'sing low pitch notes',
  23.     'Guitarist': 'play metal'
  24. }
  25.  
  26. jazz_skills = {
  27.     'Drummer': 'play the drums with drum brushes',
  28.     'Singer': 'sing high pitch notes and sing low pitch notes',
  29.     'Guitarist': 'play jazz'
  30. }
  31.  
  32.  
  33. class ConcertTrackerApp:
  34.     bands = []
  35.     musicians = []
  36.     concerts = []
  37.  
  38.     @staticmethod
  39.     def get_drummer_skills_by_concert_name(concert_name, musician):
  40.         if concert_name == 'Rock':
  41.             if rock_skills['Drummer'] in musician.skills:
  42.                 return True
  43.             return None
  44.         elif concert_name == 'Metal':
  45.             if metal_skills['Drummer'] in musician.skills:
  46.                 return True
  47.             return None
  48.         elif concert_name == 'Jazz':
  49.             if jazz_skills['Drummer'] in musician.skills:
  50.                 return True
  51.             return None
  52.  
  53.     @staticmethod
  54.     def get_singer_skills_by_concert_name(concert_name, musician):
  55.         if concert_name == 'Rock':
  56.             if rock_skills['Singer'] in musician.skills:
  57.                 return True
  58.             return None
  59.         elif concert_name == 'Metal':
  60.             if metal_skills['Singer'] in musician.skills:
  61.                 return True
  62.             return None
  63.         elif concert_name == 'Jazz':
  64.             if jazz_skills['Singer'] in musician.skills:
  65.                 return True
  66.             return None
  67.  
  68.     @staticmethod
  69.     def get_guitarist_skills_by_concert_name(concert_name, musician):
  70.         if concert_name == 'Rock':
  71.             if rock_skills['Guitarist'] in musician.skills:
  72.                 return True
  73.             return None
  74.         elif concert_name == 'Metal':
  75.             if metal_skills['Guitarist'] in musician.skills:
  76.                 return True
  77.             return None
  78.         elif concert_name == 'Jazz':
  79.             if jazz_skills['Guitarist'] in musician.skills:
  80.                 return True
  81.             return None
  82.  
  83.     def get_concert_by_place(self, concert_place):
  84.         for concert in self.concerts:
  85.             if concert.place == concert_place:
  86.                 return concert
  87.         return None
  88.  
  89.     def get_band(self, some_name):
  90.         for b in self.bands:
  91.             if b.name == some_name:
  92.                 return b
  93.         return None
  94.  
  95.     def get_musician_by_name(self, some_name):
  96.         for m in self.musicians:
  97.             if m.name == some_name:
  98.                 return m
  99.         return None
  100.  
  101.     def get_band_musician(self, name):
  102.         for player in self.bands:
  103.             if player.name == name:
  104.                 return player
  105.         return None
  106.  
  107.     def create_musician(self, musician_type: str, name: str, age: int):
  108.         musician_types = ["Guitarist", "Drummer", "Singer"]
  109.         if musician_type not in musician_types:
  110.             raise ValueError("Invalid musician type!")
  111.  
  112.         current_musician = self.get_musician_by_name(name)
  113.         if current_musician:
  114.             raise Exception(f"{name} is already a musician!")
  115.  
  116.         if musician_type == 'Guitarist':
  117.             new_musician = Guitarist(name, age)
  118.             self.musicians.append(new_musician)
  119.         elif musician_type == 'Drummer':
  120.             new_musician = Drummer(name, age)
  121.             self.musicians.append(new_musician)
  122.         elif musician_type == "Singer":
  123.             new_musician = Singer(name, age)
  124.             self.musicians.append(new_musician)
  125.  
  126.         return f"{name} is now a {musician_type}."
  127.  
  128.     def create_band(self, name: str):
  129.         if self.get_band(name):
  130.             raise Exception(f"{name} band is already created!")
  131.  
  132.         new_band = Band(name)
  133.         self.bands.append(new_band)
  134.         return f"{name} was created."
  135.  
  136.     def create_concert(self, genre: str, audience: int, ticket_price: float, expenses: float, place: str):
  137.         for concert in self.concerts:
  138.             if concert.place == place:
  139.                 raise Exception(f"{place} is already registered for {genre} concert!")
  140.         new_concert = Concert(genre, audience, ticket_price, expenses, place)
  141.         self.concerts.append(new_concert)
  142.         return f"{genre} concert in {place} was added."
  143.  
  144.     def add_musician_to_band(self, musician_name: str, band_name: str):
  145.         musician = self.get_musician_by_name(musician_name)
  146.         if not musician:
  147.             raise Exception(f"{musician_name} isn't a musician!")
  148.  
  149.         band = self.get_band(band_name)
  150.         if not band:
  151.             raise Exception(f"{band_name} isn't a band!")
  152.  
  153.         band.members.append(musician)
  154.         return f"{musician_name} was added to {band_name}."
  155.  
  156.     def remove_musician_from_band(self, musician_name: str, band_name: str):
  157.         band = self.get_band(band_name)
  158.         if not band:
  159.             raise Exception(f"{band_name} isn't a band!")
  160.  
  161.         musician = self.get_band_musician(musician_name)
  162.         if not musician:
  163.             raise Exception(f"{musician_name} isn't a member of {band_name}!")
  164.  
  165.         self.bands.remove(musician)
  166.         return f"{musician_name} was removed from {band_name}."
  167.  
  168.     def start_concert(self, concert_place: str, band_name: str):
  169.         concert = self.get_concert_by_place(concert_place)
  170.         current_band = self.get_band(band_name)
  171.         for musician in current_band.members:
  172.             if musician.__class__.__name__ == 'Drummer':
  173.                 band_musicians['drummer'] += 1
  174.  
  175.             elif musician.__class__.__name__ == 'Singer':
  176.                 band_musicians['singer'] += 1
  177.             elif musician.__class__.__name__ == 'Guitarist':
  178.                 band_musicians['guitarist'] += 1
  179.  
  180.         for k, v in band_musicians.items():
  181.             if v == 0:
  182.                 raise Exception(f"{band_name} can't start the concert because it doesn't have enough members!")
  183.  
  184.         for musician in current_band.members:
  185.             if musician.__class__.__name__ == 'Drummer':
  186.                 if not self.get_drummer_skills_by_concert_name(concert.genre, musician):
  187.                     raise Exception(f"The {band_name} band is not ready to play at the concert!")
  188.             elif musician.__class__.__name__ == 'Singer':
  189.                 if not self.get_singer_skills_by_concert_name(concert.genre, musician):
  190.                     raise Exception(f"The {band_name} band is not ready to play at the concert!")
  191.             elif musician.__class__.__name__ == 'Drummer':
  192.                 if not self.get_guitarist_skills_by_concert_name(concert.genre, musician):
  193.                     raise Exception(f"The {band_name} band is not ready to play at the concert!")
  194.  
  195.         profit = (concert.audience * concert.ticket_price) - concert.expenses
  196.         return f"{band_name} gained {profit:.2f}$ from the {concert.genre} concert in {concert_place}."
  197.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement