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.
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.
De constructor heeft 1 argument:
name
: De naam van het voetbalteam.def __init__(self, name:str):
Je klasse moet minstens onderstaande methoden hebben. Deze zijn gerangschikt in alfabetische volgorde, niet volgens moeilijkheid.
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:
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.
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:
GK
: Doelman (Goalkeeper)DF
: Verdediger (Defender)MF
: Middenvelder (Midfielder)FW
: Aanvaller (Forward)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.
def get_name(self) -> str:
Deze methode geeft de naam van het voetbalteam terug.
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.
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.
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:
player_out
zit momenteel in het team.player_in
zit momenteel nog niet in het team.player_out
een doelman is, mag deze enkel gewisseld worden als player_in
ook een doelman is.player_out
geen doelman is, mag deze enkel gewisseld worden als player_in
ook geen doelman is (het is dus bijvoorbeeld wel mogelijk om middenvelders te wisselen voor aanvallers).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