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.
In de typische volgorde van kleurfasen:
Bij green licht mag het verkeer in de aangegeven richting doorrijden, als het veilig is om dat te doen en als er ruimte is aan de andere kant van het kruispunt.
Een oranje licht waarschuwt dat het verkeerslicht op het punt staat om naar rood te gaan. De acties de bestuurders bij een oranje licht moeten ondernemen verschillen: in sommige plaatsen moeten bestuurders stoppen als dit veilig kan gebeuren, terwijl op andere plaatsen bestuurders mogen oversteken als dat veilig kan gebeuren.
Een rood licht verbiedt alle doorgaand verkeer.
Definieer een klasse Verkeerslicht waarmee verkeerslichten kunnen voorgesteld worden in Python. Elk verkeerslicht bevindt zich op elk ogenblik in één van drie mogelijke toestanden: groen, oranje of rood. Deze klasse moet minstens de volgende methoden ondersteunen:
Een initialisatiemethode __init__ waaraan de begintoestand van een verkeerslicht kan doorgegeven worden (str; standaardwaarde: rood). De enige geldige begintoestanden zijn groen, oranje en rood (kleine letters).
Een methode __str__ die een stringvoorstelling (str) van het object teruggeeft, bestaande uit de huidige toestand van het verkeerslicht.
Een methode __repr__ die een stringvoorstelling (str) van het object teruggeeft, bestaande uit een Python expressie die aangeeft hoe een nieuw verkeerslicht kan aangemaakt worden met dezelfde toestand als de huidige toestand van het object waarop de methode wordt aangeroepen.
Een methode volgende die het verkeerslicht naar zijn volgende toestand laat springen: na rood komt groen, na groen komt oranje, en na oranje komt weer rood.
Aan de methoden __str__, __repr__ en volgende moeten geen argumenten doorgegeven worden.
>>> 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