Klassen Light
Klassen Light
ska representera en trafiksignal.
En trafiksignal karakteriseras av egenskaperna
- period d.v.s. antalet tidssteg mellan två växlingar från grönt till rött och
- grönperiod d.v.s. antalet tidssteg som signalen är grön.
Förloppet för en signal med period 7 och grönperiod 3 kan illustreras på detta sätt:
Tidssteg: | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
Intern klocka: | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 0 | 1 |
Färg: | G | G | G | R | R | R | R | G | G | G | R | R | R | R | G | G |
En signal har således en intern klocka som går "cirkulärt" d.v.s. den börjar på noll och går till periodlängden varefter den börjar på noll igen.
Klassen behöver en
-
konstruktor
Light(period, green_period)
som specificerar egenskaperna, -
en metod
step()
som stegar den interna klockan, -
en metod
is_green()
som returnerarTrue
om signalen är grön, annarsFalse
och -
en
__str__()
-metod som returnerar en lämplig textrepresentation av signalen.
Observera att färgen inte behöver lagras som instansvariabel. Den egenskapen räknas lätt ut utifrån värdet på grönperioden och värdet på den interna klockan.
Demonstration:Kod | Utskrift |
---|---|
def demo_light(): """Demonstrats the Light class""" a_light = Light(7, 3) for i in range(15): print(i, a_light, a_light.is_green()) a_light.step() | 0 (G) True 1 (G) True 2 (G) True 3 (R) False 4 (R) False 5 (R) False 6 (R) False 7 (G) True 8 (G) True 9 (G) True 10 (R) False 11 (R) False 12 (R) False 13 (R) False 14 (G) True |