EK 2020

Komende zomer spelen de Belgische Rode Duivels op het Europees Kampioenschap voetbal. In deze opgave zul je een voetbalteam modelleren, waarbij, net zoals in een voetbalmatch, spelers gewisseld kunnen worden voor andere spelers.

Opgave

Schrijf een Python-klasse SoccerTeam. Deze klasse stelt een voetbalteam voor en moet volgende constructor en minstens volgende methoden bevatten. Je bent volledig vrij om de nodige instantievariabelen te kiezen en het is ook toegelaten (en aangeraden!) om extra methodes toe te voegen, dit kan je helpen bij het zoeken naar fouten. Merk op dat deze methoden gebruikmaken van een SoccerPlayer klasse. Deze kan je hier1 downloaden, het is de bedoeling dat je deze lokaal in dezelfde map plaatst als de SoccerTeam klasse, maar je hoeft deze niet in te dienen.

Specificaties

Constructor

De constructor heeft 1 argument:

def __init__(self, name:str):

Methodes

Je klasse moet minstens onderstaande methoden hebben. Deze zijn gerangschikt in alfabetische volgorde, niet volgens moeilijkheid.

add_player()

def add_player(self, player:SoccerPlayer) -> bool:

Deze methode voegt de gegeven speler toe aan het voetbalteam. Indien dit lukt, geeft de methode True terug, anders False. Het mag enkel mogelijk zijn om een speler toe te voegen wanneer aan alle onderstaande voorwaarden is voldaan:

get_average_age()

def get_average_age(self) -> float:

Deze methode geeft de gemiddelde leeftijd van alle toegevoegde spelers weer. Wanneer er nog geen spelers zijn toegevoegd, geeft deze methode logischerwijs 0.0 terug.

get_formation()

def get_formation(self) -> str:

Deze methode bepaalt de huidige formatie van het voetbalteam. De formatie is een string van 3 cijfers, gescheiden door streepjes, die aangeeft hoeveel spelers er op elke positie staan. De positie van een speler kan je opvragen met de get_position()-methode in de SoccerPlayer-klasse. Deze methode kan 4 mogelijke uitkomsten hebben:

De formatie bestaat uit het aantal verdedigers, aantal middenvelders en aantal aanvallers, in die volgorde. Wanneer een voetbalteam bijvoorbeeld bestaat uit 4 verdedigers, 4 middenvelders en 2 aanvallers, zal deze methode de string 4-4-2 teruggeven.

get_name()

def get_name(self) -> str:

Deze methode geeft de naam van het voetbalteam terug.

get_players()

def get_players(self) -> list:

Deze methode geeft een array terug van alle spelers die momenteel in het team zitten. Deze array mag null-waarden bevatten; de test zal deze verwijderen. De volgorde van spelers in deze array is niet belangrijk.

get_players_at()

def get_players_at(self, position:SoccerPlayer.position) -> list:

Deze methode geeft een array terug van alle spelers die momenteel in het team zitten en op de gegeven positie position spelen. Deze array mag null-waarden bevatten; de test zal deze verwijderen. De volgorde van spelers in deze array is niet belangrijk.

substitute()

def substitute(self, player_out:SoccerPlayer, player_in:SoccerPlayer) -> bool:

Deze methode vervangt de speler player_out door de speler player_in. Indien dit lukt, geeft de methode True terug, anders False. Een wissel mag enkel doorgaan als volgende voorwaarden gelden:

Opmerkingen en tips

Lokaal testen

Het is aangeraden om je oplossing lokaal uit te proberen en optioneel wat print-statements toe te voegen om je te helpen debuggen. Dit kan je simpelweg doen door onderaan het bestand, buiten de klasse code te schrijven en het bestand te runnen.

team = SoccerTeam("Rode Duivels")
print(team.get_average_age()) # output: 0.0