Klassen Lane

Vi låter en fil bestå av ett antal positioner som antingen kan innehålla ett fordon eller vara tom (d.v.s. None).

Fordon strömmar in i ena änden (högsta index) och ut ur andra änden (index 0).

bild

Förenklingar av verkligheten: En fil består av ett antal diskreta positioner och alla fordon tar lika stor plats.

Vad händer på filen när tiden stegas?

bild

bild

bild

bild

bild

Observera att ett fordon flyttas högst en position per tidssteg!

Förenkling av verkligheten: Ett fordon står antingen stilla eller flyttar sig en plats per tidssteg.

Vad sker i ändarna på Lane?

Klassen Lane vet inte vad som finns framför eller bakom. Det är alltså "någon annan" som ser till att fordon kommer in på respektive lämnar filen.

Lane måste tillhandahålla en metod för att ta ut från första platsen och returnerar fordonet som fanns där:

bild

Det måste också finnas en metod som sätter ett fordon på sista platsen:

bild

Om man lägger ett fordon på sista platsen och den inte är ledig kommer man att tappa bort det som låg där:

bild

Det måste alltså gå att undersöka om sista platsen är ledig eller ej.

Klassen ska ha följande:

I programmet ska Lane-objekten hanteras med dessa metoder och således vara oberoende av den interna representationen.

Nedan följer kod med utskrifter som demonstrerar de olika metoderna.

Kod Utskrift
def demo_lane(): """Demonstration of the class Lane""" a_lane = Lane(10) print(a_lane) v = Vehicle('N', 34) a_lane.enter(v) print(a_lane) a_lane.step() print(a_lane) for i in range(20): if i % 2 == 0: u = Vehicle('S', i) a_lane.enter(u) a_lane.step() print(a_lane) if i % 3 == 0: print(' out: ', a_lane.remove_first()) print('Number in lane:', a_lane.number_in_lane()) [..........] [.........N] [........N.] [.......NS.] out: None [......NS..] [.....NS.S.] [....NS.S..] out: None [...NS.S.S.] [..NS.S.S..] [.NS.S.S.S.] out: None [NS.S.S.S..] [NSS.S.S.S.] [NSSS.S.S..] out: Vehicle(N, 34) [SSS.S.S.S.] [SSSS.S.S..] [SSSSS.S.S.] out: Vehicle(S, 0) [SSSS.S.S..] [SSSSS.S.S.] [SSSSSS.S..] out: Vehicle(S, 2) [SSSSS.S.S.] [SSSSSS.S..] [SSSSSSS.S.] out: Vehicle(S, 4) [SSSSSS.S..] Number in lane: 7

Tillbaka

Valid CSS!