Klassen Light
#
Klassen Light
ska representera en trafiksignal.
En trafiksignal karakteriseras av följande egenskaper:
period, dvs. antalet tidssteg mellan två växlingar från grönt till rött och
grönperiod, dvs. 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 |
För enkelhetens skull låter vi signalerna alltid starta med grönperioden.
En signal har således en intern klocka som går ”cirkulärt”, dvs. den börjar på noll och går till periodlängden varefter den börjar på noll igen.
Klassen behöver:
en konstruktor
__init__(self, 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
ochen
__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.
Använd demonstrations-koden nedan för att kontrollera att din klass Light fungerar och ger den förväntade utskriften.
Obs! Demo-funktionen finns redan inlagd i modulen trafficComponents.py så du anropar den enklast genom att köra trafficComponents.py
.
Kod |
Utskrift |
---|---|
def demo_light():
"""Demonstrates 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
|