Wir schauen hinter die technische Kulisse von Lauflicht – Mustern und widmen uns dabei:
– dem Datentyp ‚list‚ in Python
– der ‚input‚ – Funktion und ihrer Verwendung
– einigen Besonderheiten beim Umgang mit Listen
Natürlich wie immer möglichst wenig theoretisch ausschweifend und mit einem Bezug zur praktischen Anwendung mit Beispielen.
Zuerst einmal sind hier ein paar nützliche Links:
- Die Code – Dateien zum Download findest du hier
- Die MicroPython Dokumentation
- Die Python Dokumentation
Der Datentyp list gehört zu den Sequenziellen Datentypen. Diese definiert die Fachliteratur wie folgt:
Unter sequenziellen Datentypen wird eine Klasse von Datentypen zusammengefasst, die Folgen von gleichartigen oder verschiedenen Elementen verwalten. die in sequenziellen Datentypen gespeicherten Elemente haben eine definierte Reihenfolge und man kann über eindeutige Indizes auf sie zugreifen.
Zu diesen Datentypen gehören auch noch andere Typen wie z.B. Strings,
Byte Arrays oder Tuples.
list ist dabei ein veränderlicher Typ und kann in Python auch unterschiedliche Datentypen aufnehmen.
Du erzeugst eine Liste wie folgt:
bezeichner = []
Damit hast du eine leere Liste erzeugt. Du kannst sie auch schon bei der Vereinbarung mit unterschiedlichen Daten füllen:
meineListe = [1, 2, "hallo", 3.33, True]
Hier hast du eine vorinitialisierte Liste mit fünf Elementen. Den Elementen werden dabei automatisch die Indizes 0 bis 4 zugewiesen, mit denen du auf die einzelnen Elemente zugreifen kannst:
element1 = meineListe[0]
Hier hätten wir jetzt also das erste Element ( 1) der liste in die Variable element1 gespeichert.
Du kannst an eine Liste auch Elemente anhängen. Das übernimmt die Methode append , die auf eine Liste angewendet werden kann.
meineListe.append("Ich bin angehängt")
In meinem Beispiel habe ich sieben 3,3v Verbraucher ( hier LEDs) an meinen Raspberry Pi Pico angeschlossen ( Pins 0 bis 6 ) und füge diese in eine Liste mit Hilfe einer for – Schleife ein.
import machine
liste = []
for p in range(7):
led = machine.Pin(p, machine.Pin.OUT)
liste.append(led)
Da die for – Schleife hier von 0 bis 6 zählt, kann ich die Schleifenvariable p für die Pin-Nummer verwenden. Jeder Duchlauf hängt also ein LED an die Liste an.
Hier noch einmal der Board-Aufbau grafisch dargestellt:

Jetzt, da alle sieben LEDs in der liste gespeichert sind, kann auf sie entweder über eben die sogenannte Subsequence [n] zugegriffen werden:
meinLED = liste[3]
Das wäre also das 4. LED, das in der Mitte liegt.
Oder man könnte mit einer for – Schleife auch direkt jedes Element in der Liste ansprechen:
for led in liste:
led.value(1)
Diese Schleife schaltet also jede LED in der Liste ein.
Zum Schluss ist hier noch ein Beispiel einer Funktion, die abwechselnd alle LEDs in der Liste mit einem geraden Index und alle mit einem ungeraden Index blinken lässt. Dieser Wechsel soll vier mal ausgeführt werden. Dazu verwenden wir eine äußere und zwei innere Schleifen.
Falls es hier Unklarheiten gibt, hoffe ich, dass meine ausführlichen Kommentare in der Code-Datei: listed_lights.py im GitHub Repo helfen können.
def blinkEvenOdd():
for t in range(4):
for index in range(len(lights)):
if index % 2 == 0:
lights[index].value(1)
else:
lights[index].value(0)
utime.sleep(0.3)
for index in range(len(lights)):
if index % 2 == 0:
lights[index].value(0)
else:
lights[index].value(1)
utime.sleep(0.3)
Hinweis: mit der Funktion len() kannst du die Länger einer Liste bestimmen. Sie gibt die Anzahl der Elemente zurück, die sich in der Liste befinden.
Der Einfachheit halber habe ich im Video diese Funktion weggelassen und stattdessen die Anzahl direkt in den range – Parameter geschrieben.
Allerdings solltest du len() , wann immer es geht vorziehen, da du damit die Gefahr, einen index out of range – Fehler zu bekommen, reduzierst.
Weil ich im Video auch die input Funktion verwende, um ein wenig Interaktion mit dem Programm zu schaffen, hier noch einmal die Hinweise zu dieser Funktion:
x = input("Eingabe: ")
Mit dieser Zeile erzeugst du das Warten auf eine Benutzereingabe über den Standard-Input (zumeist die Tastatur).
In der Konsole erscheint nun also:
Eingabe:
Dabei wird gewartet, bis Enter gedrückt wird. Das Eingegebene wird dann in der Variablen x gespeichert.
Wichtig zu wissen: der Typ der Eingabe ist immer ein String. Wenn du also eine Zahl erwarten würdest, mit der du rechnen kannst, müsstest du die Eingabe umwandeln ( Type Casting ).
x = int(input("Eingabe: "))
Natürlich ist auch hier noch nicht garantiert, dass wirklich nur eine Zahl eingegeben wird, und keine Buchstaben oder andere Zeichen. Das müsste separat geprüft werden.