Fortgeschrittener Python-Entwicklungskurs
Kapitel
>
Stufe
Erweiterte Listen
Abbilden, Filtern, Reduzieren
Zielsetzung
Beende das Mischen und Herstellen von Speiseeis, indem du Maps, Filter und Reduce verwendest.
Einige der Speiseeissorten sind knapp oder leer, aber wir haben genügend Materialien, um dies auszugleichen und mehr Speiseeis herzustellen. Dafür musst du Map verwenden, ein mächtiges Werkzeug, das dir erlaubt, den erforderlichen Code zu minimieren, indem es Schleifen und Verzweigungen zusammenfasst. Die Funktionen Filter und Reduce ergänzen die Map-Funktion und bieten die dringend benötigte Vielseitigkeit in deinem Code.
Um zu beginnen, musst du Reduce aus der functools-Bibliothek importieren, um die Funktion zu verwenden, indem du folgenden Code am Anfang deines Programms hinzufügst: from functools import reduce. Die Funktionen Map und Filter sind in Python integriert und müssen nicht importiert werden.
Zuerst musst du einige Zutaten aus dem begehbaren Gefrierschrank holen, zum goldenen X-Marke gehen, dich zur Tür wenden und sie mit der open()-Funktion öffnen. Hole alle Gläser mit "cream" aus dem Gefrierschrank und gehe dann zur leuchtenden X-Marke auf dem grünen Teppich.
Im Bereich gibt es drei (3) Listen-Konstanten mit den Namen: vanilla, strawberry und chocolate. Jede Konstante enthält eine Kombination von Zutaten, die die jeweilige Speiseeis-Sorte ausmachen. An der grünen X-Marke überprüfst du den Inhalt der Listen-Konstanten strawberry. Verwende zunächst die place()-Funktion, um die zuvor gegriffene "cream" abzulegen, und benutze die speak()-Funktion, um den Inhalt der Listen-Konstanten strawberry zu überprüfen.
Sobald dies überprüft wurde, ist es an der Zeit, die Map-Funktion mit der Listen-Konstanten strawberry zu verwenden, deren Inhalt ausschließlich aus Dezimalzahlen besteht. Mit der map()-Funktion kannst du alle Elemente einer Liste runden, sodass du nicht jedes Element einzeln in einer Schleife runden musst. Erstelle dazu eine Liste namens map1 und verwende die map()-Funktion in Verbindung mit der strawberry-Liste und der round()-Funktion, wie folgt: map1 = list(map(round, strawberry)). Anschließend verwendest du die speak()-Funktion mit map1, um das Ergebnis zu überprüfen.
Nachdem dies erledigt ist, gehen wir zu Filter über, welches ähnlich wie Map funktioniert, aber stattdessen eine Funktion erfordert. Oben im Editor findest du eine vordefinierte Funktion namens main_ingredients, die bestimmt, ob eine Zahl größer als 25 ist.
def main_ingredients(value):
return value > 25
Anstatt eine Schleife zu durchlaufen, kannst du diese Funktion in Verbindung mit der filter()-Funktion verwenden, um eine neue Liste mit Elementen zu erstellen, die über 25 liegen – dies sind die Hauptzutaten. Erstelle eine neue Liste namens filter1 und wende die filter()-Funktion mit main_ingredients und map1 an, um alle Hauptzutaten aus der zuvor erstellten Map-Liste zu ermitteln, wie folgt: filter1 = list(filter(main_ingredients, value)). Verwende anschließend die speak()-Funktion mit filter1, um das Ergebnis zu überprüfen.
Nun kommen wir zu Reduce, das ähnlich wie Filter verwendet wird, aber dazu dient, eine Liste zu einem einzigen Element zu reduzieren. Ähnlich wie Filter verwendet es eine benutzerdefinierte Funktion, diesmal namens custom_sum, die zwei Zahlen dynamisch addiert.
def custom_sum(first, second):
return first + second
Erstelle eine Variable namens reduce1 und verwende die reduce()-Funktion in Verbindung mit der custom_sum-Funktion und filter1, um alle Elemente zu einem einzigen zusammenzufassen, wie folgt: reduce1 = reduce(custom_sum, filter1). Verwende anschließend die speak()-Funktion mit reduce1, um das Ergebnis zu überprüfen.
Nachdem du den Map, Filter, Reduce-Zyklus abgeschlossen hast, wiederhole denselben Zyklus an den Licht-X-Marken auf den roten und blauen Teppichen. Auf dem roten Teppich verwendest du die Listen-Konstante vanilla und erstellst map2, filter2 und reduce2. Auf dem blauen Teppich verwendest du die Listen-Konstante chocolate und erstellst map3, filter3 und reduce3.
Gehe zur letzten Licht-X-Marke, die sich auf dem violetten Teppich befindet, und füge reduce1, reduce2 und reduce3 zusammen, um die Hauptzutaten von Vanille, Erdbeer und Schokolade zu vereinen. Erstelle eine Variable namens neapolitan und addiere alle Reduce-Ergebnisse, wie folgt: neapolitan = reduce1+reduce2+reduce3. Verwende die speak()-Funktion mit dieser Kombination, um sie zu überprüfen, und nutze die place()-Funktion, um Neapolitan-Speiseeis zu kreieren und das Level abzuschließen.