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 returnerar True om signalen är grön, annars False 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.

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