Python – 04 Listen
Voraussetzungen
Bevor du mit diesem Modul startest, solltest du bereits vertraut sein mit:
- Python – 03 Wahrheitswerte und Kontrollstrukturen - if-Bedingungen und Schleifen
Einführung
Listen sind wie Aktenschränke. Die Schubladen enthalten Informationen verschiedener Art. Beispielsweise kannst du in einer Schublade einen Text, in einer anderen eine Zahl und einer weiteren einfach nur einen Wahrheitswert aufbewahren. Du kannst sogar in einer Schublade im Grunde einen weiteren Aktenschrank aufbewahren. In der Informatik ist das möglich. Da freuen sich Ordnungsfanatiker genauso wie Messies.
Grundgerüst
1 2#eine Liste warenkorb= ["Apfel", "Birne", "Banane", 6, True]
Aufgaben
Aufgabe 1: Grundlagen
| |
- Probiere den Code oben aus. Ändere die Werte und ergänze 3 weitere Werte.
- Gib das 4. Element der Liste per print()-Befehl aus.
- Ändere den Wert des 3. Elements in “Banana” und gib ihn per print() aus.
- Bestimme den Typ der letzten beiden Elemente mit dem type()-Befehl, gib den Typ per print() aus.
- Bestimme die Länge der Liste mit len(warenkorb), gib das Ergebnis per print() aus.
Mini-Test
len() und type() sind interne Funktionen in Python und ziemlich nützlich, merken lohnt sich also.
Existenz von Elementen in Listen prüfen
Aufgabe 2: Existenz von Elementen in Listen prüfen
| |
- Was macht das Skript oben? Mache dir das zunächst wirklich klar, versuche es auch noch ein mal mit einem ganz eigenen Beispiel. Gib nur dein eigenes Beispiel ab. (a)
- Teste das ganze oben auch mit einer for-Schleife statt mit “in”. Schau dir dazu die Lösung unten an. Gib diese Aufgabe mit deiner eigenen Liste ab. (a)
- Erstelle eine Liste mit numerischen Einträgen (also Integern) und prüfe mit einer for-Schleife, ob die Werte kleiner, größer oder gleich 0 sind. (a)
Lösung zeigen
| |
Wie du siehst, kann diese for-Schleife einfach alle Elemente innerhalb der Liste durchlaufen. Du brauchst hier keinen len(einkauf)-Befehl, um dann mithilfe von rangealle Elemente zu durchlaufen.
Aufgabe 3: Listenelemente löschen und ergänzen
- Recherchiere, was der pop()-Befehl mit Listen in Python macht. Schreibe eine Liste und teste den Befehl damit. Mache mit print()-Befehlen vor und nach Anwendung des pop()-Befehls deutlich, was passiert ist. (a)
- Mit einkauf.append(“Orange”) kannst du der Liste Einkauf Orange hinzufügen. Füge 3 weitere Elemente hinzu, gebe anschließend alle Elemente der Liste aus, und zwar mit dieser Methode: (a)
Listen zusammenführen
Aufgabe 4: Listen zusammenführen
| |
- Probiere den Code oben aus. Ändere die Werte und teste erneut.
- In Python ist es denkbar einfach, Listen zusammenzuführen. Probiere eigene Varianten aus.
- Klappt es auch mit 3 Listen?
- Klappt es auch mit Listen, die verschiedene Datentypen enthalten?
- Du kannst auch einfach bestehende Listen mit einer anderen erweitern. Das geht mit liste1.extend(liste2). Erstelle zwei Listen und erweitere die eine mit der anderen. Was ist der Unterschied zu der ersten Variante? Schreibe die Antwort auf diese Frage als Kommentar in den Code. (a)
- Extra: Führe Listen mit verschiedenen Datentypen zusammen, lösche dann alle Einträge eines bestimmten Datentyps aus der zusammengesetzten Liste.
Sortieren und Mischen
In Python existieren fertige Methoden (also Funktionen), mit denen man Listen sortieren kann. Du kannst sowohl Listen mit Strings als auch mit Integern/Floats sortieren. Bei gemischten Listen mit Strings und Integern funktioniert das nicht.
Sortieren
Aufgabe 5a: Listenelemente sortieren
| |
- Probiere die Codes oben aus.
- Löse dieses Quiz:
Hinweis: s ist keine gültige Antwort, wenn ’s’ erwartet wird.
Mischen
Aufgabe 5b: Listenelemente mischen
Für das Mischen von Listenelementen in Python benötigst du das Paket random. Mit import random am Anfang deines Skriptes kannst du das Paket laden und Methoden dieses Pakets nutzen.
- Recherchiere, mit welcher Methode des Paketes random man Listenelemente mischen kann. Probiere es zunächst mit einer Beispielliste aus, bevor du die Fragen unten beantwortest.
Tipp zum Mischen
Die Methode lautet shuffle(). Du musst noch herausfinden, wie man sie nutzt.
Aufgabe 6 (extra): Löffelsprache
Die Löffelsprache ist eine Geheimsprache, die nur wenige beherrschen. Wenn du auch zu den in dieser Hinsicht ungelenken Menschen wie ich gehörst, kannst du dir eine Stütze bauen.
Die Aufgabe besteht darin, einen angegebenen Text so zu verändern, dass die Vokale entsprechend der Löffelsprache ersetzt werden.
Vokal-Substitute anzeigen
- e = elewe
- a = alewa
- i = ilewi
- o = olewo
- u = ulewu
- ü = ülewü
- ö = ölewö
- ä = älewä
- ie = ielewie
- au = aulewau
- ei = eilewei
Theoretisch weißt du nun, wie man die Aufgaben lösen kann. Das heißt du könntest es mit Stift und Papier lösen. Aber wer möchte das schon so machen!
Lösungsschritte und Fragen dahin
- Hast du die obige Reihenfolge richtig gelöst und kannst alle Schritte nachvollziehen?
- Weißt du, wie du die einzelnen Bausteine des Algorithmus erstellen kannst? Du benötigst unter anderem
- einen if-Block, um die Ersetzungen zu managen
- Befehle für die Konvertierungen string→liste und wieder zurück liste→string
| |
So geht es auch ...
Vielleicht hast du versucht, diese Aufgabe auf andere, schnelle Weise zu lösen. Der oben vorgeschlagene Weg ist umständlicher, aber du lernst auf deinem Niveau etwas mehr dazu. Der folgende Ansatz funktioniert jedoch auch:
| |
Das erzeugt diesen Text: “Welewenn dulewu dalewas beileweim Voleworleleweselewen dilewirelewekt velewerstelewehst, kalewannst dulewu dielewie Lölewöffelewelspralewachelewe.”
Flask-Anwendung
Voraussetzung für diese Aufgabe
Du solltest bereits Flask – 01 Erste Schritte und Flask – 02 Jinja Templating Grundlagen durchgearbeitet haben. Wenn nicht, überspringe diese Bonus-Aufgabe zunächst.
Einkaufsliste in Flask
Nutze dein Wissen über Listen, um eine einfache Einkaufsliste-App zu erstellen.
Anforderungen:
- Erstelle eine Route
/einkauf - Lege eine Liste mit mindestens 6 Produkten an
- Übergebe die Liste an ein Template
- Zeige die Produkte im Template an
Hinweis: Du kennst noch keine Schleifen in Jinja - zeige daher jeden Eintrag einzeln mit {{ produkte[0] }}, {{ produkte[1] }} etc. an.
In Flask – 03 Jinja Schleifen und Listen lernst du, wie man das eleganter mit Schleifen macht!
Bonuspunkte:
- Zeige auch die Anzahl der Produkte an (nutze
len()in Python) - Füge mit
.append()noch Produkte zur Liste hinzu, bevor du sie übergibst - Zeige auch die Datentypen einzelner Elemente an
Lösung zeigen
app.py:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19from flask import Flask, render_template app = Flask(__name__) @app.route("/einkauf") def einkauf(): # Liste mit Produkten erstellen produkte = ["Äpfel", "Birnen", "Bananen", "Brot", "Milch"] # Noch ein Produkt hinzufügen produkte.append("Käse") # Anzahl der Produkte ermitteln anzahl = len(produkte) return render_template("einkauf.html", produkte=produkte, anzahl=anzahl) if __name__ == "__main__": app.run(debug=True)templates/einkauf.html:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50<!DOCTYPE html> <html lang="de"> <head> <meta charset="UTF-8"> <title>Meine Einkaufsliste</title> <style> body { font-family: Arial, sans-serif; max-width: 600px; margin: 50px auto; padding: 20px; } h1 { color: #2c3e50; } ul { background: #ecf0f1; padding: 20px; border-radius: 8px; } li { padding: 10px; margin: 5px 0; background: white; border-radius: 4px; } .info { margin-top: 20px; padding: 10px; background: #3498db; color: white; border-radius: 4px; } </style> </head> <body> <h1>Meine Einkaufsliste</h1> <p class="info">Insgesamt {{ anzahl }} Produkte auf der Liste</p> <ul> <li>{{ produkte[0] }}</li> <li>{{ produkte[1] }}</li> <li>{{ produkte[2] }}</li> <li>{{ produkte[3] }}</li> <li>{{ produkte[4] }}</li> <li>{{ produkte[5] }}</li> </ul> <p><em>Hinweis: In Flask – 03 lernst du, wie man Listen mit Schleifen anzeigt!</em></p> </body> </html>Elegantere Variante (mit base.html):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38<!-- templates/base.html --> <!DOCTYPE html> <html lang="de"> <head> <meta charset="UTF-8"> <title>{% block title %}Einkaufsliste{% endblock %}</title> <style> body { font-family: Arial, sans-serif; max-width: 600px; margin: 50px auto; padding: 20px; } h1 { color: #2c3e50; } ul { background: #ecf0f1; padding: 20px; border-radius: 8px; } li { padding: 10px; margin: 5px 0; background: white; border-radius: 4px; } .info { margin-top: 20px; padding: 10px; background: #3498db; color: white; border-radius: 4px; } </style> </head> <body> {% block content %}{% endblock %} </body> </html>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21<!-- templates/einkauf.html --> {% extends "base.html" %} {% block title %}Meine Einkaufsliste{% endblock %} {% block content %} <h1>Meine Einkaufsliste</h1> <p class="info">Insgesamt {{ anzahl }} Produkte auf der Liste</p> <ul> <li>{{ produkte[0] }}</li> <li>{{ produkte[1] }}</li> <li>{{ produkte[2] }}</li> <li>{{ produkte[3] }}</li> <li>{{ produkte[4] }}</li> <li>{{ produkte[5] }}</li> </ul> <p><em>Hinweis: In Flask – 03 lernst du, wie man Listen mit Schleifen anzeigt!</em></p> {% endblock %}