Theorie
Design pattern: Funktion ausführen bis
return
return
kann nur innerhalb einer Funktion verwendet werden. Damit kann man dem Hauptprogramm einen Wert zurückgeben. Aber für dieses Design pattern viel wichtiger: Es beendet die Ausführung der Funktion.So konnten wir in unserer Funktion
fill()
die LEDs füllen, bis die Summe der LEDs gleich gross war, wie die gewünschte Anzahl, und dann einfach die Funktion beenden.def fill(nr, wartezeit): sum = 0 for y in range(5): for x in range(5): if sum == nr: return display.set_pixel(x, y, 9) sum = sum + 1 sleep(wartezeit)
LEDs auffüllen
Der Microbit hat ein 5x5 Screen mit insgesamt 25 LEDs, die wir mit microbit.display
ansteuern können.
L1: Reihe auffüllen
Schreiben Sie ein Programm, bei dem man sieht, wie es die erste Reihe Pixel um Pixel auffüllt.
Lösung
for x in range(5): display.set_pixel(x, 0, 9) sleep(500)
L2: Gesamten Screen auffüllen
Erweitern Sie das Programm so, dass nicht nur die erste Reihe, sondern der gesamte Screen aufgefüllt wird.
Lösung
for y in range(5): for x in range(5): display.set_pixel(x, y, 9) sleep(500)
L3: Zusatz: Diagonale
Erweitern Sie das Programm so, dass die Pixel der Diagonale nicht angestellt werden - alle andern aber schon! 😊
Lösung
for y in range(5): for x in range(5): if not x == y: display.set_pixel(x, y, 9) sleep(500)
L4: Funktion fill
Jetzt lagern wir diese Funktionalität in eine Funktion aus. Das nennt man Refaktorierung: Ein bisschen wie bei Multiplikationen extrahieren wir einen Teil unsere Programms als “Faktor” in eine Funktion.
Schreiben Sie eine Funktion fill(nr, wartezeit)
, die die Anzahl nr
LEDs auf dem Display auffüllt und zwischen den Pixeln immer wartezeit
wartet. Also fill(7, 0) soll sofort das hier anzeigen:
Speichern Sie sich diese Funktion fill()
irgendwo ab, wir werden die sicher nochmals gebrauchen!
Tipp: Das return
-Statement ist dazu da, Werte aus einer Funktion zurück ans Hauptprogramm zu übergeben. Hier werden Sie return
aber nur gebrauchen, weil return
die Funktion beendet.
Lösung
def fill(nr, wartezeit): display.clear() sum = 0 for y in range(5): for x in range(5): if sum == nr: return display.set_pixel(x, y, 9) sum = sum + 1 sleep(wartezeit)
L5: Knacknuss
Modifizieren Sie die Funktion fill()
so, dass die LEDs auch wieder der Reihe nach abstellen.
L6: Knacknuss: “Kitt, I need you pal!
In den 1980ern und 1990ern waren viele aus dem Häuschen wegen einer Serie, in der ein junger Schönling mit seinem schwarzen, künstlich-intelligenten Auto für Gerechtigkeit kämpft. Die Rede ist von “Knight Rider” mit David Hasselhoff. Zu Ihrer Belustigung, hier ein Trailer:

Jetzt wollen Sie natürlich Ihren Microbit genau so cool machen wie K.I.T.T., das intelligente Auto… Beginnen wir also ganz vorne: Machen Sie die Animation der roten Lichter in K.I.T.T.s Kühlerhaube mit Ihrem Microbit nach.
Lösung
from microbit import * def kitt(x): # Alle bestehenden LEDs um 1 dimmen for i in range(5): neue_helligkeit = display.get_pixel(i, 0) - 1 if neue_helligkeit < 0: neue_helligkeit = 0 display.set_pixel(i, 0, neue_helligkeit) # Ein aktuelles LED ganz anstellen display.set_pixel(x, 0, 9) sleep(200) while True: # Von links nach rechts for i in range(5): kitt(i) # Von rechts nach links for i in range(4, -1, -1): kitt(i)