************ Funktionen I ************ Funktionen und Methoden beziehen sich auf nützliche Codeschnipsel, die einem bestimmten Zweck dienen und normalerweise viele Male in deinem Programm verwendet werden. Wahrscheinlich hast du sowohl Funktionen als auch Methoden schon benutzt, ohne es unbedingt zu merken. In diesem Abschnitt werden wir nicht weiter auf Methoden eingehen, aber wir werden erklären, wie man Funktionen benutzt und schreibt. Funktionen verwenden ==================== Eine großartige Sache an Funktionen ist, dass sie in mehr als einem Programm verwendet werden können und Code-Wiederholungen vermeiden. Auf die gleiche Weise kannst du Funktionen verwenden, die andere Leute geschrieben haben. In Python können nützliche Funktionen zu Modulen zusammengestellt werden (obwohl du das nicht tun musst) - das ``random`` Modul ist ein gutes Beispiel. Um die Funktionen des Random-Moduls zu nutzen, musst du das Modul zuerst `importieren`. Sobald du das getan hast, kannst du alle Funktionen des Moduls benutzen. Hier sind zwei Beispiele von Funktionen aus 'random'. Die Funktion ``random.randint()`` erlaubt es uns, eine zufällige Ganzzahl (Integer) aus einem bestimmten Bereich zu erzeugen:: from microbit import * import random display.show(str(random.randint(1, 6))) Im obigen Code wird eine Zufallszahl von 1 bis 6 generiert - die obere Grenze ist in diesem Fall (ausnahmsweise!) mit dabei, dh jede der Zahlen 1, 2, 3, 4, 5 und 6 können angezeigt werden. In diesem Codeschnipsel prüft die Funktion ``random.choice`` wie viele Elemente in der Namensliste sind, erzeugt eine zufällige Ganzzahl im Bereich von 0 bis zur Listenlänge und gibt ein Listenelement mit dem Index der erzeugten Ganzzahl zurück:: from microbit import * import random namen = ["Maria", "Jolanda", "Damien", "Alia", "Kushal", "Mei Xiu", "Zoltan" ] display.scroll(random.choice(namen)) Eigene Funktionen erstellen ============================ Funktionen können dir helfen, deinen Code zu organisieren und ihn ordentlich zu halten. Hier ist ein Beispiel für eine einfache Funktion, die eine Nachricht ausgibt:: def zeigeBegruessung(): print("Hallo alle miteinander!") Um die Funktion zu nutzen, muss sie *aufgerufen* werden: :: zeigeBegruessung() Oder du könntest in einem Spiel an verschiedenen Stellen einen Countdown verwenden und willst nicht immer dieselbe for-Schleife im Code verwenden sondern einfach nur ``countdown()`` schreiben. :: #Countdown 3 - 2 - 1 def countdown(): for i in range(3,0,-1): # Werte von i zählen von 3 herunter display.show(i) sleep(500) display.clear() ... countdown() ... countdown() ... Das sind keine sehr interessante Funktionen, oder? Du kannst Funktionen mächtiger machen, indem du `Parameter` und `Rückgabewerte` benutzt. Wenn du dir eine Funktion wie eine Black Box vorstellst dann ist ein Parameter ein Eingabewert und ein Rückgabewert ist das, was du am anderen Ende wieder heraus bekommst. Wir könnten zum Beispiel die Countdown-Funktion erweitern, so dass wir ihr mit einem Parameter, den wir beim Aufrufen übergeben, sagen, von welchem Startwert ``n`` aus sie beginnen soll herunterzuzählen. Dafür müssen wir in der Klammer der Funktion ``countdown()`` die Variable n als Parameter der Funktion eintragen. In dieser Variablen ``n`` wird der Übergabewert gespeichert und kann dann im Code der Funktion verwendet werden. :: def countdown(n): for i in range(n,0,-1): # Werte von i zählen von n herunter display.show(i) sleep(500) display.clear() Der Parameter ``n`` macht unsere Funktion also gleich viel flexibler und in unterschiedlichen Situationen einsetzbar. Oder nehmen wir an, wir wollen ein kleines Programm schreiben, das einige Freunde mit einer Nachricht begrüßt, die ihren Namen und ihr Alter enthält: :: from microbit import * def printBirthdayGreeting(name, age): return "Happy Birthday " + name + " 🎂, du bist unglaubliche " + str(age) + " Jahre alt!" display.scroll(printBirthdayGreeting("Toni", 8)) display.scroll(printBirthdayGreeting("Sonja", 9)) display.scroll(printBirthdayGreeting("Maria", 11)) Die Funktion ``printBirthdayGreeting`` stellt die Geburtstagsnachricht für uns zusammen und gibt einen String zurück. ``str()`` wird benutzt, um das ``Alter``, welches eine Zahl ist, in einen String zu verwandeln. Du musst keine Parameter oder Rückgabewerte in deinen Funktionen verwenden, es sei denn, du willst/brauchst sie. Übungsaufgaben =================== 1. Schreibe eine Funktion ``blink(x, y)``, die eine LED an den Koordinaten, die durch die Parameter x und y angegeben werden, einmal blinken lässt. 2. Benutze die Funktion ``blink(x, y)`` um alle LEDs nacheinander blinken zu lassen. 3. Schreibe eine Funktion button_count() die ein Tupel zurückgibt, das die Anzahl der Betätigungen von Taste A und Taste B enthält. (fix) 4. Kombiniere die beiden Funktionen in einem Programm, das es dem Benutzer ermöglicht, die Koordinaten der blinkenden LED durch Drücken der Tasten einzustellen. 5. Schau dir die Skripte an, die du zuvor geschrieben hast und prüfe, ob du deinen Code durch die Verwendung von Funktionen verbessern könntest (oder nicht).