Instructions

49
for i in range(w):
for j in range(z):
GPIO.output(LED[j], True); time.sleep(t)
GPIO.output(LED[j], False)
for j in range(z-1, -1, -1):
GPIO.output(LED[j], True); time.sleep(t)
GPIO.output(LED[j], False)
Auch hier werden ineinandergeschachtelte Schleifen verwendet. Nach der ersten inneren Schleife, die dem
zuvor beschriebenen Programmteil entspricht, also nachdem die LED mit der Nummer 3 leuchtet, beginnt
eine weitere Schleife für das Lauflicht in entgegengesetzter Richtung. Listenelemente sind immer mit 0 begin-
nend nummeriert. Die vierte LED hat demnach die Nummer 3.
Um eine Schleife rückwärts laufen zu lassen, verwenden wir die erweiterte Syntax von
for...range().
Anstatt nur einen Endwert anzugeben, können auch drei Parameter angegeben werden: Startwert, Schritt-
weite und Endwert. In unserem Beispiel sind das:
Startwert z-1
Die Variable
z enthält die Anzahl der LEDs. Da die Nummerierung der Listenele-
mente mit
0 beginnt, hat die letzte LED die Nummer z-1.
Schrittweite -1 Bei einer Schrittweite von -1 zählt jeder Schleifendurchlauf eine Zahl rückwärts.
Endwert -1
Der Endwert in einer Schleife ist immer der erste Wert, der nicht erreicht wird. In
der ersten vorwärts zählenden Schleife beginnt der Schleifenzähler bei
0 und
erreicht in unserem Beispiel die Werte
0, 1, 2, 3, um die LEDs zu adressieren. Die 4
wird bei viermaligem Schleifendurchlauf nicht erreicht. Die rückwärts zählende
Schleife soll mit der
0 enden und so den Wert -1 als ersten nicht erreichen.
Die beschriebene zweite Schleife lässt nacheinander die vier LEDs in umgekehrter Richtung blinken. Danach
startet die äußere Schleife den gesamten Zyklus neu, der hier, da jede LED zweimal blinkt, doppelt so lange
dauert wie im ersten Programmteil.
Muster 3
Hat der Benutzer eine 3 eingegeben, startet eine ähnliche Schleife. Hier werden die LEDs auch in beiden Rich-
tungen durchgezählt, aber nicht gleich nach dem Einschalten wieder ausgeschaltet.
elif e == "3":
for i in range(w):
for j in range(z):
GPIO.output(LED[j], True); time.sleep(t)
time.sleep(2*t)
for j in range(z-1, -1, -1):
GPIO.output(LED[j], False); time.sleep(t)
time.sleep(2*t)