diff --git a/app/main.py b/app/main.py index fa56336e1..d074a5b3a 100644 --- a/app/main.py +++ b/app/main.py @@ -1 +1,12 @@ -# write your code here +def calculate_team_total_rating(players: list) -> int: + return sum(player.get_rating() for player in players) + + +def elves_concert(elfs: list) -> None: + for elf in elfs: + elf.play_elf_song() + + +def feast_of_the_dwarves(dwarves: list) -> None: + for dwarf in 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..6b953b931 --- /dev/null +++ b/app/players/dwarves/dwarf.py @@ -0,0 +1,12 @@ +from abc import ABC + +from app.players.player import Player + + +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..839db3f55 --- /dev/null +++ b/app/players/dwarves/dwarf_blacksmith.py @@ -0,0 +1,19 @@ +from .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..5fc7e5129 --- /dev/null +++ b/app/players/dwarves/dwarf_warrior.py @@ -0,0 +1,20 @@ +from .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 " + f"of the {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..dc4117055 --- /dev/null +++ b/app/players/elves/druid.py @@ -0,0 +1,19 @@ +from .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}. {self.nickname} has " + f"a favourite spell: {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..419f03bed --- /dev/null +++ b/app/players/elves/elf.py @@ -0,0 +1,13 @@ +from abc import ABC + +from app.players.player import Player + + +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 a song " + f"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..f4a4fcca3 --- /dev/null +++ b/app/players/elves/elf_ranger.py @@ -0,0 +1,19 @@ +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..deb4232ae --- /dev/null +++ b/app/players/player.py @@ -0,0 +1,14 @@ +from abc import ABC, abstractmethod + + +class Player(ABC): + def __init__(self, nickname: str) -> None: + self.nickname = nickname + + @abstractmethod + def get_rating(self) -> int: + pass + + @abstractmethod + def player_info(self) -> str: + pass