Aufwärmen · Aufgabe 1 von 7
Aufwärmen aus B2.3: Was gibt das aus?
for n in [1, 3, 5]:
if n % 2 == 0:
print("even:", n)
break
else:
print("no even number")// B2.4 · ca. 30 Min. · Einstieg
Nach dieser Lektion wählen Sie mit match zwischen Fällen, zerlegen eine Liste mit Mustern, die ihre Elemente einfangen, und ergänzen Bedingungen mit Guards.
Danach können Sie
Aufwärmen · Aufgabe 1 von 7
for n in [1, 3, 5]:
if n % 2 == 0:
print("even:", n)
break
else:
print("no even number")Vorhersagen · Aufgabe 2 von 7
status = 418
match status:
case 200:
print("OK")
case 404:
print("Not found")
case _:
print("Other")Üben · Aufgabe 3 von 7
day = "sun"
match day:
case "sat" ____ "sun":
print("weekend")
case _:
print("weekday")Üben · Aufgabe 4 von 7
command = "go north".split()
match command:
case ["quit"]:
print("bye")
case ["go", direction]:
print("going", direction)
case _:
print("unknown")Üben · Aufgabe 5 von 7
Denksport · Aufgabe 6 von 7
QUIT = "q"
key = "x"
match key:
case QUIT:
print("quitting", QUIT)Anwenden · Aufgabe 7 von 7
Prüfen Sie Ihr Ergebnis anhand dieser Liste
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
Ein Textabenteuer liest Befehle wie go north oder take lamp key. Das Programm zerlegt jeden Befehl in Wörter und vergleicht die Liste: feste Befehle, ein Guard, der nur vier Richtungen erlaubt, *things für beliebig viele Gegenstände, | für zwei Schreibweisen und ein Platzhalter für alles andere. Ergänzen Sie eigene Befehle in der Liste und starten Sie es erneut.
main.py
# A few commands a player might type.
commands = ["look", "go north", "go up", "take lamp key", "i", "", "dance now"]
inventory = []
for line in commands:
match line.split():
case ["look"]:
print("You are in a dark hall.")
case ["go", direction] if direction in ["north", "south", "east", "west"]:
print("You walk", direction)
case ["go", other]:
print("You cannot go", other)
case ["take", *things]:
for thing in things:
inventory.append(thing)
print("Taken:", things)
case ["inventory" | "i"]:
print("You carry:", inventory)
case []:
print("Say something.")
case [verb, *_]:
print("I do not know how to", verb)
Ausführen mit
python main.pyAusgabe
You are in a dark hall.
You walk north
You cannot go up
Taken: ['lamp', 'key']
You carry: ['lamp', 'key']
Say something.
I do not know how to danceTab 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.
Übung 1 von 2
Das Programm liest einen HTTP-Statuscode als ganze Zahl. Geben Sie mit match OK für 200 aus, Redirect für 301 oder 302, Not found für 404, Server error für 500 und Unknown für alles andere. Fassen Sie 301 und 302 mit | in einem Fall zusammen.
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.
match code: mit einem Fall pro Status, jeweils mit eingerücktem print.
case 301 | 302: passt auf beide Codes.
Schließen Sie mit case _: print("Unknown") als letztem Fall ab.
Ein möglicher Lösungsweg. Ihrer kann anders aussehen und trotzdem alle Prüfungen bestehen.
code = int(input())
match code:
case 200:
print("OK")
case 301 | 302:
print("Redirect")
case 404:
print("Not found")
case 500:
print("Server error")
case _:
print("Unknown")
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
code = int(input())
# Match code and print its text.
print("Unknown")
test_main.py
from learnrun import run_main
def status(code):
return run_main(f"{code}\n").strip()
def test_ok_and_not_found():
"""200 ist OK und 404 ist Not found"""
got = status(200), status(404)
assert got == ("OK", "Not found"), f"bei 200 und 404 gab das Programm {got!r} aus"
def test_redirects():
"""301 und 302 sind beide Redirect"""
got = status(301), status(302)
assert got == ("Redirect", "Redirect"), f"bei 301 und 302 gab das Programm {got!r} aus"
def test_server_error():
"""500 ist Server error"""
got = status(500)
assert got == "Server error", f"bei 500 gab das Programm {got!r} aus, erwartet: 'Server error'"
def test_unknown():
"""Jeder andere Code ist Unknown"""
got = status(418)
assert got == "Unknown", f"bei 418 gab das Programm {got!r} aus, erwartet: 'Unknown'"
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
Das Programm liest eine Zeile wie square 5 oder rect 3 4. Zerlegen Sie sie und vergleichen Sie die Wörter mit match. Geben Sie die Fläche eines Quadrats oder Rechtecks als ganze Zahl aus. Ist eine Größe nicht über 0, geben Sie mit einem Guard invalid aus. Bei allem anderen unknown shape.
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.
case ["square", side]: fängt die Größe als String ein; int(side) macht daraus eine Zahl.
Ein Guard steht hinter dem Muster: case ["square", side] if int(side) > 0:.
Nach den Fällen mit Guard fängt case ["square", _] | ["rect", _, _]: die richtigen Formen mit falschen Größen ab.
Ein möglicher Lösungsweg. Ihrer kann anders aussehen und trotzdem alle Prüfungen bestehen.
words = input().split()
match words:
case ["square", side] if int(side) > 0:
print(int(side) * int(side))
case ["rect", width, height] if int(width) > 0 and int(height) > 0:
print(int(width) * int(height))
case ["square", _] | ["rect", _, _]:
print("invalid")
case _:
print("unknown shape")
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
words = input().split()
# Match words: ["square", side] or ["rect", width, height].
print("unknown shape")
test_main.py
from learnrun import run_main
def area(line):
return run_main(line + "\n").strip()
def test_square():
"""square 5 hat die Fläche 25"""
got = area("square 5")
assert got == "25", f"bei square 5 gab das Programm {got!r} aus, erwartet: '25'"
def test_rect():
"""rect 3 4 hat die Fläche 12"""
got = area("rect 3 4")
assert got == "12", f"bei rect 3 4 gab das Programm {got!r} aus, erwartet: '12'"
def test_invalid_sizes():
"""Größen von 0 oder weniger sind invalid"""
got = area("square 0"), area("rect 3 -1")
assert got == ("invalid", "invalid"), f"bei square 0 und rect 3 -1 gab das Programm {got!r} aus"
def test_unknown():
"""Andere Formen und falsche Wortzahlen sind unknown"""
got = area("circle 2"), area("rect 3")
assert got == ("unknown shape", "unknown shape"), f"bei circle 2 und rect 3 gab das Programm {got!r} aus"
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 herunterladenQUIT = "q"
key = "x"
match key:
case QUIT:
print("quitting")
case _:
print("other key")
Was Python ausgibt
SyntaxError: name capture 'QUIT' makes remaining patterns unreachableWarum, und die Lösung
Ein bloßer Name in einem case fängt jeden Wert ein, kein Fall danach könnte je laufen, und Python lehnt die Datei ab. Vergleichen Sie stattdessen mit dem Literal: case "q":. Benannte Konstanten funktionieren nur als Namen mit Punkt, etwa keys.QUIT; die lernen Sie mit Modulen und Klassen kennen.
day = "sat"
match day:
case "sat" or "sun":
print("weekend")
Was Python ausgibt
SyntaxError: invalid syntaxWarum, und die Lösung
Muster sind keine Ausdrücke, or ist darin also nicht erlaubt. Alternativen verbinden Sie mit einem senkrechten Strich: case "sat" | "sun":.
n = 1
match n:
case _:
print("anything")
case 1:
print("one")
Was Python ausgibt
SyntaxError: wildcard makes remaining patterns unreachableWarum, und die Lösung
case _: passt auf alles, und match hört beim ersten passenden Fall auf; kein Fall darunter könnte je laufen. Stellen Sie die genauen Fälle nach oben und den Platzhalter ans Ende, so wie else am Ende einer if-Kette steht.
Python im Browser: Pyodide 314.0.7, MPL-2.0. Lizenz und Quellcode
5 Fragen, ohne Hinweise. Ab 80 % ist die Lektion abgeschlossen.
Erledigen Sie zuerst alle Aufgaben oben, um das Abschlussquiz freizuschalten.