Aufwärmen · Aufgabe 1 von 7
// B4.4 · ca. 25 Min. · Einstieg
Sets (Mengen)
Nach dieser Lektion legen Sie Sets an, auch das leere Set, prüfen, ob ein Wert enthalten ist, kombinieren Sets mit ihren vier Operatoren und entfernen mit Sets Duplikate.
Vorhersagen · Aufgabe 2 von 7
Sagen Sie es vorher, bevor Sie weiterlesen: Was gibt das aus?
print(len({1, 2, 2, 3, 3, 3}))Üben · Aufgabe 3 von 7
Setzen Sie ein leeres Set ein, damit add() in der nächsten Zeile funktioniert.
empty = ____ empty.add("x")empty =Üben · Aufgabe 4 von 7
sorted() macht aus jedem Set eine geordnete Liste, die Ausgabe ist also vorhersagbar. Was gibt das aus?
a = {1, 2, 3, 4} b = {3, 4, 5} print(sorted(a & b), sorted(a - b))Üben · Aufgabe 5 von 7
Ordnen Sie bei diesen beiden Sets jedem Ausdruck seine Elemente zu.
a = {1, 2, 3} b = {3, 4}Denksport · Aufgabe 6 von 7
Knobelaufgabe. Drei Werte von drei verschiedenen Typen. Was gibt das aus?
print(len({1, 1.0, True}))Anwenden · Aufgabe 7 von 7
Mini-Aufgabe. Schreiben Sie missing_letters(text), das in alphabetischer Reihenfolge die Buchstaben a bis z liefert, die nirgends in text vorkommen, ohne auf Groß- und Kleinschreibung zu achten. Für "The quick brown fox jumps over the lazy dog" lautet die Antwort [], denn dieser Satz enthält jeden Buchstaben.
Prüfen Sie Ihr Ergebnis anhand dieser Liste
Selbst programmieren
Lesen Sie das ausgearbeitete Beispiel und lösen Sie dann die Übungen. Ihr Code läuft in Ihrem Browser oder auf Ihrem Computer und wird nie hochgeladen.
Ausgearbeitetes Beispiel
Zwei Kurslisten
Zwei Kurse haben Anmeldungen gesammelt; eine Person hat sich zweimal für Python angemeldet. set() entfernt das Duplikat, in beantwortet Fragen nach dem Enthaltensein, und die vier Operatoren vergleichen die beiden Listen. Jedes Set läuft vor der Ausgabe durch sorted(), weil ein Set keine eigene Reihenfolge hat. Zum Schluss sammelt eine Set Comprehension jede Initiale einmal. Ergänzen Sie Namen in einer der Listen und starten Sie erneut.
main.py
python_course = ["ana", "ben", "cleo", "ben", "dan"]
web_course = ["cleo", "eve", "dan", "fay"]
python_set = set(python_course) # the duplicate "ben" disappears
web_set = set(web_course)
print("Python:", len(python_course), "sign-ups,", len(python_set), "people")
print("Is eve in Python?", "eve" in python_set)
print("Both:", sorted(python_set & web_set))
print("Either:", sorted(python_set | web_set))
print("Only Python:", sorted(python_set - web_set))
print("Exactly one:", sorted(python_set ^ web_set))
initials = {name[0].upper() for name in python_set | web_set}
print("Initials:", sorted(initials))
Ausführen mit
python main.pyAusgabe
Python: 5 sign-ups, 4 people
Is eve in Python? False
Both: ['cleo', 'dan']
Either: ['ana', 'ben', 'cleo', 'dan', 'eve', 'fay']
Only Python: ['ana', 'ben']
Exactly one: ['ana', 'ben', 'eve', 'fay']
Initials: ['A', 'B', 'C', 'D', 'E', 'F']- len(python_course) zählt Anmeldungen; len(python_set) zählt Personen.
- Exactly one (^) ist Either ohne Both.
- Die Set Comprehension baut jede Initiale einmal, obwohl zwei Listen zusammenkommen.
Ändern und ausführen
Tab rückt ein, Umschalt+Tab rückt aus. Um den Editor mit der Tastatur zu verlassen, drücken Sie Esc und dann Tab.
Beim ersten Ausführen lädt Ihr Browser Python herunter (bis zu 6.5 MB) und speichert es im Cache. Ihr Code bleibt auf Ihrem Gerät.
Übungen
Übung 1 von 2
Jedes Wort einmal
unique_words(text) soll jedes Wort von text einmal liefern, kleingeschrieben und alphabetisch sortiert. text.lower().split() liefert die kleingeschriebenen Wörter bereits als Liste. Der Startcode sortiert sie, behält aber die Duplikate. Entfernen Sie sie mit einem Set.
Tab rückt ein, Umschalt+Tab rückt aus. Um den Editor mit der Tastatur zu verlassen, drücken Sie Esc und dann Tab.
Beim ersten Ausführen lädt Ihr Browser Python herunter (bis zu 6.5 MB) und speichert es im Cache. Ihr Code bleibt auf Ihrem Gerät.
Hinweise
Hinweis 1
Ein Set behält jeden Wert einmal. Bauen Sie vor dem Sortieren eines aus den Wörtern.
Hinweis 2
sorted() nimmt ein Set an und liefert eine Liste.
Hinweis 3
return sorted({word for word in text.lower().split()}), oder sorted(set(text.lower().split()))
Eine Lösung zeigen
Ein möglicher Lösungsweg. Ihrer kann anders aussehen und trotzdem alle Prüfungen bestehen.
def unique_words(text: str) -> list[str]:
"""Return each word of text once, in lower case and alphabetical order."""
return sorted({word for word in text.lower().split()})
Auf dem eigenen Computer ausführen
Installieren Sie Python 3.14 oder neuer. Speichern Sie diese Dateien in einem Ordner, öffnen Sie dort ein Terminal und führen Sie die Befehle unten aus.
main.py
def unique_words(text: str) -> list[str]:
"""Return each word of text once, in lower case and alphabetical order."""
return sorted(text.lower().split())
test_main.py
from main import unique_words
def test_duplicates_removed():
"""Führt jedes Wort nur einmal auf"""
got = unique_words("the cat and the hat")
assert got == ["and", "cat", "hat", "the"], f"erhalten: {got!r}, erwartet: ['and', 'cat', 'hat', 'the']"
def test_case_ignored():
"""Behandelt The und the als dasselbe Wort"""
got = unique_words("The dog saw THE dog")
assert got == ["dog", "saw", "the"], f"erhalten: {got!r}, erwartet: ['dog', 'saw', 'the']"
def test_empty_text():
"""Leerer Text ergibt eine leere Liste"""
got = unique_words("")
assert got == [], f"unique_words('') lieferte {got!r}, erwartet: []"
Unter macOS und Linux tippen Sie python3, wo in diesen Befehlen python steht, wie in der ersten Lektion.
Programm ausführen:
python main.pyPrüfungen ausführen (learnrun.py muss im selben Ordner liegen):
python learnrun.py testlearnrun.py herunterladenÜbung 2 von 2
Zwei Listen vergleichen
compare(mine, yours) erhält zwei Namenslisten und soll drei sortierte Listen als Tupel zurückgeben: die Namen auf beiden Listen, die Namen nur in mine und die Namen nur in yours. Ein Name kann in einer Liste doppelt stehen, im Ergebnis aber nur einmal. Der Startcode bildet nur die Vereinigung. Verwenden Sie &, - und die richtige Reihenfolge der Operanden.
Tab rückt ein, Umschalt+Tab rückt aus. Um den Editor mit der Tastatur zu verlassen, drücken Sie Esc und dann Tab.
Beim ersten Ausführen lädt Ihr Browser Python herunter (bis zu 6.5 MB) und speichert es im Cache. Ihr Code bleibt auf Ihrem Gerät.
Hinweise
Hinweis 1
Machen Sie zuerst aus beiden Listen Sets: a, b = set(mine), set(yours).
Hinweis 2
a & b liefert die Namen auf beiden Listen. a - b und b - a sind nicht dasselbe.
Hinweis 3
return sorted(a & b), sorted(a - b), sorted(b - a)
Eine Lösung zeigen
Ein möglicher Lösungsweg. Ihrer kann anders aussehen und trotzdem alle Prüfungen bestehen.
def compare(mine: list[str], yours: list[str]) -> tuple[list[str], list[str], list[str]]:
"""Return (in both, only in mine, only in yours), each sorted."""
a, b = set(mine), set(yours)
return sorted(a & b), sorted(a - b), sorted(b - a)
Auf dem eigenen Computer ausführen
Installieren Sie Python 3.14 oder neuer. Speichern Sie diese Dateien in einem Ordner, öffnen Sie dort ein Terminal und führen Sie die Befehle unten aus.
main.py
def compare(mine: list[str], yours: list[str]) -> tuple[list[str], list[str], list[str]]:
"""Return (in both, only in mine, only in yours), each sorted."""
everyone = set(mine) | set(yours)
return sorted(everyone), [], []
test_main.py
from main import compare
def test_both():
"""Die erste Liste enthält die Namen, die auf beiden Listen stehen"""
both, _, _ = compare(["ana", "ben", "cleo"], ["ben", "dan", "ana"])
assert both == ["ana", "ben"], f"auf beiden: erhalten {both!r}, erwartet: ['ana', 'ben']"
def test_only_one_side():
"""Die zweite und dritte Liste enthalten die Namen, die nur auf einer Liste stehen"""
_, only_mine, only_yours = compare(["ana", "ben", "cleo"], ["ben", "dan", "ana"])
assert (only_mine, only_yours) == (["cleo"], ["dan"]), f"erhalten: {(only_mine, only_yours)!r}, erwartet: (['cleo'], ['dan'])"
def test_duplicates():
"""Ein doppelt aufgeführter Name erscheint einmal"""
got = compare(["eve", "eve"], ["eve"])
assert got == (["eve"], [], []), f"erhalten: {got!r}, erwartet: (['eve'], [], [])"
Unter macOS und Linux tippen Sie python3, wo in diesen Befehlen python steht, wie in der ersten Lektion.
Programm ausführen:
python main.pyPrüfungen ausführen (learnrun.py muss im selben Ordner liegen):
python learnrun.py testlearnrun.py herunterladenHäufige Fehler
Ein leeres Set mit {} beginnen
seen = {}
seen.add("ana")
Was Python ausgibt
AttributeError: 'dict' object has no attribute 'add'Warum, und die Lösung
{} ist ein leeres Dict, kein leeres Set, und ein Dict hat keine Methode add(). Schreiben Sie seen = set() für ein leeres Set. Geschweifte Klammern mit Werten, etwa {"ana"}, ergeben sehr wohl ein Set.
Eine Liste in ein Set stecken
pairs = {[1, 2], [3, 4]}
Was Python ausgibt
TypeError: cannot use 'list' as a set element (unhashable type: 'list')Warum, und die Lösung
Set-Elemente müssen hashbar sein, und eine Liste ist es nicht, weil sie sich ändern kann. Nehmen Sie für die inneren Werte Tupel: {(1, 2), (3, 4)}.
Auf ein Set per Index zugreifen
colours = {"red", "green"}
print(colours[0])
Was Python ausgibt
TypeError: 'set' object is not subscriptableWarum, und die Lösung
Ein Set hat keine Positionen, es gibt also kein erstes Element. Durchlaufen Sie es in einer Schleife, prüfen Sie mit in, oder machen Sie zuerst eine sortierte Liste daraus: sorted(colours)[0].
Python im Browser: Pyodide 314.0.7, MPL-2.0. Lizenz und Quellcode
Abschlussquiz
5 Fragen, ohne Hinweise. Ab 80 % ist die Lektion abgeschlossen.
Erledigen Sie zuerst alle Aufgaben oben, um das Abschlussquiz freizuschalten.