Verkeerslichten regelen met behulp van lichtsignalen het oprijden van een gelijkvloerse kruising, de toegang tot bruggen, tunnels en spoorwegovergangen, de toegang tot parkeergarages en -terreinen, evenals de toegangsregulering bij fabrieken, bedrijven en andere afgesloten terreinen. Een verkeerslicht bevindt zich op elk ogenblik in één van drie mogelijke toestanden: groen, oranje of rood.

verkeerlicht

In de typische volgorde van kleurfasen:

Opgave

Definieer een klasse Verkeerslicht waarmee verkeerslichten kunnen voorgesteld worden. Elk verkeerslicht bevindt zich op elk ogenblik in één van drie mogelijke toestanden: groen, oranje of rood.

Bij het aanmaken van een nieuw verkeerslicht (Verkeerslicht) kan de begintoestand van het verkeerslicht doorgegeven worden (str; standaardwaarde: rood). De enige geldige begintoestanden zijn groen, oranje en rood (kleine letters).

Als er een verkeerslicht $$v$$ (Verkeerslicht) wordt doorgegeven aan de ingebouwde functie str, dan moet de huidige toestand (str) van verkeerslicht $$v$$ teruggegeven worden.

Als er een verkeerslicht $$v$$ (Verkeerslicht) wordt doorgegeven aan de ingebouwde functie repr, dan moet een stringvoorstelling (str) van verkeerslicht $$v$$ teruggegeven worden. Deze stringvoorstelling moet lezen als een Python expressie waarmee een nieuw verkeerslicht (Verkeerslicht) aangemaakt wordt met als begintoestand de huidige toestand van verkeerslicht $$v$$.

Op een verkeerslicht $$v$$ (Verkeerslicht) moet je een methode volgende kunnen aanroepen. Daarbij moet je geen argumenten doorgeven aan de methode en ze geeft altijd de waarde None terug, maar ze zorgt ervoor dat verkeerslicht $$v$$ naar zijn volgende toestand springt: na rood komt groen, na groen komt oranje, en na oranje komt weer rood.

Voorbeeld

>>> licht1 = Verkeerslicht()
>>> licht1
Verkeerslicht('rood')
>>> licht2 = Verkeerslicht('groen')
>>> print(licht1, licht2)
rood groen
>>> licht1.volgende()
>>> print(licht1, licht2)
groen groen
>>> licht1.volgende()
>>> licht1.volgende()
>>> licht2.volgende()
>>> print(licht1, licht2)
rood oranje