diff --git a/app/main.py b/app/main.py index fa56336e1..565ce36c0 100644 --- a/app/main.py +++ b/app/main.py @@ -1 +1,17 @@ -# write your code here +from app.players.player import Player +from app.players.elves.elf import Elf +from app.players.dwarves.dwarf import Dwarf + + +def calculate_team_total_rating(list_of_players: list[Player]) -> int: + return sum(player.get_rating() for player in list_of_players) + + +def elves_concert(list_of_elves: list[Elf]) -> None: + for elf in list_of_elves: + elf.play_elf_song() + + +def feast_of_the_dwarves(list_of_dwarves: list[Dwarf]) -> None: + for dwarf in list_of_dwarves: + dwarf.eat_favourite_dish() diff --git a/app/players/__init__.py b/app/players/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/app/players/dwarves/__init__.py b/app/players/dwarves/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/app/players/dwarves/dwarf.py b/app/players/dwarves/dwarf.py new file mode 100644 index 000000000..a422ba1ba --- /dev/null +++ b/app/players/dwarves/dwarf.py @@ -0,0 +1,13 @@ +from app.players.player import Player +from abc import ABC + + +class Dwarf(Player, ABC): + def __init__(self, nickname: str, favourite_dish: str) -> None: + super().__init__(nickname) + self._favourite_dish = favourite_dish + + def eat_favourite_dish(self) -> None: + print( + f"{self.nickname} is eating {self._favourite_dish}" + ) diff --git a/app/players/dwarves/dwarf_blacksmith.py b/app/players/dwarves/dwarf_blacksmith.py new file mode 100644 index 000000000..efb857702 --- /dev/null +++ b/app/players/dwarves/dwarf_blacksmith.py @@ -0,0 +1,19 @@ +from app.players.dwarves.dwarf import Dwarf + + +class DwarfBlacksmith(Dwarf): + def __init__( + self, + nickname: str, + favourite_dish: str, + skill_level: int + ) -> None: + super().__init__(nickname, favourite_dish) + self._skill_level = skill_level + + def player_info(self) -> str: + return (f"Dwarf blacksmith {self.nickname}" + f" with skill of the {self._skill_level} level") + + def get_rating(self) -> int: + return self._skill_level diff --git a/app/players/dwarves/dwarf_warrior.py b/app/players/dwarves/dwarf_warrior.py new file mode 100644 index 000000000..a75aced76 --- /dev/null +++ b/app/players/dwarves/dwarf_warrior.py @@ -0,0 +1,19 @@ +from app.players.dwarves.dwarf import Dwarf + + +class DwarfWarrior(Dwarf): + def __init__(self, + nickname: str, + favourite_dish: str, + hummer_level: int + ) -> None: + super().__init__(nickname, favourite_dish) + self._hummer_level = hummer_level + + def player_info(self) -> str: + return (f"Dwarf warrior {self.nickname}." + f" {self.nickname} has a hummer of the" + f" {self._hummer_level} level") + + def get_rating(self) -> int: + return self._hummer_level + 4 diff --git a/app/players/elves/__init__.py b/app/players/elves/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/app/players/elves/druid.py b/app/players/elves/druid.py new file mode 100644 index 000000000..93f50af37 --- /dev/null +++ b/app/players/elves/druid.py @@ -0,0 +1,19 @@ +from app.players.elves.elf import Elf + + +class Druid(Elf): + def __init__(self, + nickname: str, + musical_instrument: str, + favourite_spell: str + ) -> None: + super().__init__(nickname, musical_instrument) + self._favourite_spell = favourite_spell + + def player_info(self) -> str: + return (f"Druid {self.nickname}." + f" {self.nickname} has a favourite spell: " + f"{self._favourite_spell}") + + def get_rating(self) -> int: + return len(self._favourite_spell) diff --git a/app/players/elves/elf.py b/app/players/elves/elf.py new file mode 100644 index 000000000..9a2305f5c --- /dev/null +++ b/app/players/elves/elf.py @@ -0,0 +1,14 @@ +from app.players.player import Player +from abc import ABC + + +class Elf(Player, ABC): + def __init__(self, nickname: str, musical_instrument: str) -> None: + super().__init__(nickname) + self._musical_instrument = musical_instrument + + def play_elf_song(self) -> None: + print( + f"{self.nickname} is playing" + f" a song on the {self._musical_instrument}" + ) diff --git a/app/players/elves/elf_ranger.py b/app/players/elves/elf_ranger.py new file mode 100644 index 000000000..fcca8fe1f --- /dev/null +++ b/app/players/elves/elf_ranger.py @@ -0,0 +1,18 @@ +from app.players.elves.elf import Elf + + +class ElfRanger(Elf): + def __init__(self, + nickname: str, + musical_instrument: str, + bow_level: int + ) -> None: + super().__init__(nickname, musical_instrument) + self._bow_level = bow_level + + def player_info(self) -> str: + return (f"Elf ranger {self.nickname}." + f" {self.nickname} has bow of the {self._bow_level} level") + + def get_rating(self) -> int: + return 3 * self._bow_level diff --git a/app/players/player.py b/app/players/player.py new file mode 100644 index 000000000..da085f37c --- /dev/null +++ b/app/players/player.py @@ -0,0 +1,14 @@ +from abc import abstractmethod, ABC + + +class Player(ABC): + def __init__(self, nickname: str) -> None: + self.nickname = nickname + + @abstractmethod + def get_rating(self) -> None: + pass + + @abstractmethod + def player_info(self) -> None: + pass