Listen und Zufall beim Unicorn Shield

Listen und Zufall beim Unicorn Shield Titelbild

Listen

Nachdem du deine grauen Gehirnzellen mit etwas Eigeninitiative auf Trab gebracht hast, kannst du jetzt ja wieder etwas Neues lernen.

Variablen kommen dir ja nun schon zur Genüge bekannt vor. Diese „Boxen“, in denen du alles Mögliche speichern kannst. Problematisch wird die Sache mit den Variablen, wenn du ganz viele Dinge speichern möchtest. Damit solche Geschichten nicht zu unübersichtlich werden, gibt es sogenannte Listen.

Eine Liste ist wie eine Variable, in der du mehrere Werte speichern kannst. Stell dir vor, du möchtest ein Freundschaftsbuch programmieren, in dem du den Überblick über alle wichtigen Infos über deine Freunde hast. Würdest du dieses Beispiel mit normalen Variablen umsetzen, könnte das schnell unübersichtlich werden:

name = "Norbert"
lieblingsessen = "Nudelauflauf"
Hobby = "Fallschirmspringen"

Das ist sehr mühselig. Und stell dir vor du machst das für mehrere Freunde. Damit nichts durcheinander kommt, müsstest du die Variablen immer neu benennen, damit der Inhalt bei einem neuen Freund nicht einfach den Inhalt des alten Freundes überschreibt. Probleme über Probleme. Gehen wir schnell zu einer besseren Lösung mit Hilfe einer Liste über.

Du gibst einer Liste einen Namen und schreibst alles was gespeichert werden soll in eckige Klammern []. Alle Werte in den Klammern trennst du durch Kommata:

norbert = [5, "Nudelauflauf", "Fallschirmspringen"]

Die Liste bekommt einfach den Namen eines Freundes. In den eckigen Klammern kannst du nun alles Wichtige über deine Freunde speichern. In diesem Fall speichern wir das Alter, das Lieblingsessen und ein Hobby. Und das ist viel praktischer als mit einer Variablen.

Wenn du nun auf einen der Werte zugreifen möchtest, geht das auch ganz einfach. Allen Werten in der Liste wird eine Zahl zugeordnet. Der erste Werte bekommt die Nummer null, der zweite Wert die Nummer eins und immer so fortlaufend. Um nun auf deinen gewünschten Wert zuzugreifen, schreibst du einfach den Namen der Liste und direkt dahinter in eckigen Klammern die Nummer, die deinem gewünschten Wert zugeordnet ist:

print(norbert[1])

Auf welchen Wert greifen wir hier zu? Genau, auf das Lieblingsessen, den Nudelauflauf:

print(norbert[0])

Welcher Wert ist es jetzt? Exakt! Diesmal ist es das Alter. Und wenn du einen Wert in deiner Konsole ausgeben möchtest, geht das auch ganz leicht:

print(norbert[2])

Aber du kannst natürlich auch die print()-Funktion verwenden:

print(norbert[2])

Jetzt bist du dran! Erstelle eine Liste mit deinem Namen und fülle sie mit deinem Lieblingsessen, deinem Hobby und deinem bevorzugten Zeichentrickcharakter. Lasse dir jeden Wert einmal ausgeben.

Jetzt, da du Listen selber ausprobiert hast, fragst du dich sicher, wie du einen Fehler korrigieren kannst. Stell dir vor, du schreibst für dein Lieblingsessen aus Versehen Fischgrütze anstatt Himbeereis. Zum Glück kann man die einzelnen Werte, genau wie bei einer Variablen, ganz leicht verändern. Du wählst einfach den Wert aus, den du ändern möchtest und weist diesem Platz einen neuen Wert zu:



norbert[1] = "Himbeereis"

So leicht kannst du alles wieder in Ordnung bringen. Jetzt bist du dran! Tausche ein paar von deinen Werten aus. Probiere einfach etwas herum, um alles zu verstehen.

Mit Farben arbeiten

Wenn wir mit den Pixeln auf dem Shield arbeiten, können wir mithilfe der RGB-Parameter die meisten Farben mischen. Wir haben hier mal eine kleine Liste vorbereitet, du kannst aber jeden sogenannten Color Picker benutzen den du möchtest (Wenn du diesen Begriff bei Google eingibst, kannst du auch direkt den von Google integrierten). Damit du dir das besser vorstellen kannst, haben wir mit der .setPixel() einige Beispiele für die Farben vorbereitet. Du kannst diese aber natürlich auch für die .setAll()-Funktion übernehmen.

.setPixel(0,55,0,0) Rot
.setPixel(0,255,180,0) Orange
.setPixel(0,255,255,0) Gelb
setPixel(0,0,255,0) Grün
.setPixel(0,0,255,155) Türkis
setPixel(0,0,0,255) Blau
.setPixel(0,255,0,255) Lila
.setPixel(0,255,255,255) Weiß
.setPixel(0,0,0,0) Schwarz/ausgeschaltet

Wenn du mit diesen Funktionen arbeitest, solltest du nach dem Aufrufen von .setPixel() und .setAll() nicht vergessen, auch die .show()-Funktion zu benutzen, damit die Farben auch wirklich auf dem Shield dargestellt werden. Du willst ja schließlich auch sehen, ob die LED jetzt wirklich Blau oder Gelb leuchtet. Auch kannst du anstatt .setAll(0,0,0) einfach die .clear()-Funktion benutzen, da schwarz und ausgeschaltet das gleiche sind (es gibt ja kein schwarzes Licht ;) ).

Der Zufall

Wenn wir Programmieren dann wollen wir meist sicher sein, dass eine Aktion oder eine Funktion immer das selbe Ergebnis erzeugt. Wäre ja auch komisch wenn mit einem print("Hallo") auf ein Mal "Auf Wiedersehen" im Terminal stehen würde. Doch manchmal ist es wirklich Praktisch wenn wir mit einem Zufall arbeiten können und beispielsweise mit dem Aufrufen einer Funktion nicht immer den gleichen Wert bekommen. Genau dafür können wir die random Bibliothek und die darin enthaltende randint()-Funktion benutzen.

import unicornshield as unicorn
from time import sleep
from random import randint

while True:
  unicorn.setAll(
      randint(0,255),
      randint(0,255),
      randint(0,255))
  unicorn.show()
  sleep(4)

Wenn du das Programm ausführst, solltest du alle vier Sekunden eine andere Farbe auf deinem Einhorn sehen. Beenden kannst du das Programm wie immer mit Strg+c.

Wenn wir uns das Programm ansehen, unterscheidet sich dieses gar nicht so sehr von den anderen Programmen. In Zeile 3 importieren wir die random Bibliothek und weil wir nur die Funktion randint brauchen, wird nur diese eingebunden. In Zeile 5 erstellen wir dann eine while-Schleife die immer läuft und beginnen in Zeile 6 mit der .setAll()-Funktion. Zu besseren Übersicht übergeben wir in Zeile 7, 8 und 9 jeweils einen Parameter an die Funktion. Wenn du willst kannst du aber auch alles in eine Zeile schreiben. Für die Funktion .setAll() übergeben wir normalerweise drei Parameter. Jeweils einen Parameter für einen RGB-Wert zwischen 0 und 255. Doch anstatt einen festen Wert zu übergeben, rufen wir folgenden Code auf: randint(0,255). Mit dieser Funktion können wir zufällige Zahlen erstellen. Der erste Parameter ist dafür für den Minimalwert und der zweite für den Maximalwert. Übersetzt sagt diese Funktion: "Gib mir eine zufällige Zahl zwischen 0 und 255". Diese Funktion rufen wir dann drei mal auf, um für jeden RGB-Wert eine Zahl zu erstellen. Wie dir schon aufgefallen ist, können wir für den Parameter einer Funktion eine andere Funktion übergeben. Diese Kette lässt sich unendlich weiterführen, solange die Funktionen einen Rückgabewert haben, die als Parameter funktionieren. In Zeile 10 rufen wir dann noch die .show()-Funktion auf, damit die erstellten wunderschönen Farben auch angezeigt werden. In Zeile gibt es dann noch eine sleep() Funktion. So verhindern wir, dass die Farben zu schnell wechseln. Du sollst unser Farbwerk ja auch etwas genießen können.

Jetzt bist du dran: Was passiert wenn du die Pausenzeit verkürzt? Und schaffst du es auch die randint()-Funktion für die Pausenzeiten zu benutzen?

Noch Fragen oder Feedback?

Bevor du eine Frage stellen kannst musst du dich zuerst Anmelden oder Regestrieren!