Python – 04 Listen

Python – 04 Listen

Voraussetzungen

Bevor du mit diesem Modul startest, solltest du bereits vertraut sein mit:

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

1
2
3
4
5
6
7
8
#eine Liste
warenkorb = ["Apfel", "Birne", "Banane", 6, True]

print(*warenkorb,sep='\n') #Ausgabe aller Elemente, Trennzeichen ist \n (neue Zeile)

warenkorb[2] #ist informatisch das 2. Element, das an dritter Stelle (gezählt 0,1,2) steht

warenkorb[1] = "Himbeere" #ändert das 1. Element von 'Birne' in 'Himbeere'
  1. Probiere den Code oben aus. Ändere die Werte und ergänze 3 weitere Werte.
  2. Gib das 4. Element der Liste per print()-Befehl aus.
  3. Ändere den Wert des 3. Elements in “Banana” und gib ihn per print() aus.
  4. Bestimme den Typ der letzten beiden Elemente mit dem type()-Befehl, gib den Typ per print() aus.
  5. 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

1
2
3
4
einkauf = ["Apfel", "Birne", "Banane", "Tomate", "Gurke"]

if "Apfel" in einkauf:
    print("Apfel ist in der Liste.")
  1. 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)
  2. 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)
  3. 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
1
2
3
4
einkauf = ["Apfel", "Birne", "Banane", "Tomate", "Gurke"]

for item in einkauf:
	print(item)

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

  1. 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)
  2. 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

1
2
3
4
5
6
7
8
obst = ["Apfel", "Birne", "Banane"]
gemuese = ["Tomate", "Gurke", "Kürbis"]

obst_und_gemuese = obst + gemuese

print(obst)
print(gemuese)
print(obst_und_gemuese)
  1. Probiere den Code oben aus. Ändere die Werte und teste erneut.
  2. In Python ist es denkbar einfach, Listen zusammenzuführen. Probiere eigene Varianten aus.
    1. Klappt es auch mit 3 Listen?
    2. Klappt es auch mit Listen, die verschiedene Datentypen enthalten?
  3. 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)
  4. 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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#Beispiel mit Strings
obst = ["Apfel", "Birne", "Banane"]
print(*obst, sep='\n')
obst.sort()
print('--------')
print(*obst, sep='\n')

#Beispiel mit Floats
zahlen = [6,7,8,9,3,2,4,1]
print(*zahlen, sep='\n')
zahlen.sort()
print('--------')
print(*zahlen, sep='\n')
  1. Probiere die Codes oben aus.
  2. 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.

  1. 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
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#Start für unser Beispiel
text = 'Wenn du das beim Vorlesen direkt verstehst, kannst du die Löffelsprache.'
print(text)

#list(string) macht eine Liste aus Charactern aus einem String.  
textAsList = list(text)
print(textAsList)

#Start für das Neuzusammensetzen
rebuildText = "" #Beginne mit einem leeren String
for buchstabe in textAsList: #durchläuft alle Elemente (Buchstaben) der Liste textAsList
    #hier kannst du passend zur Löffelsprache substitutieren
    rebuildText += buchstabe #dem leeren String wird jedes Element der Liste nacheinander angefügt
print(rebuildText) #Ausgabe des ggf. veränderten Textes
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:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
text = 'Wenn du das beim Vorlesen direkt verstehst, kannst du die Löffelsprache.'
vokale = ['ie', 'au', 'ei', 'e', 'a', 'i', 'o', 'u', 'ü', 'ö', 'ä']

# Erst durch Platzhalter ersetzen (ohne Vokale!)
for idx, v in enumerate(vokale):
    text = text.replace(v, f'#{idx}#')

# Dann Platzhalter durch vokal+lew+vokal ersetzen
for idx, v in enumerate(vokale):
    text = text.replace(f'#{idx}#', v + 'lew' + v)

print(text)

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:

  1. Erstelle eine Route /einkauf
  2. Lege eine Liste mit mindestens 6 Produkten an
  3. Übergebe die Liste an ein Template
  4. 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
19
from 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 %}
Zuletzt aktualisiert am