Aufwärmen · Aufgabe 1 von 7
Aufwärmen aus Modul B2: Was gibt das aus?
total = 0
for n in range(1, 4):
total += n
print(total)// B3.1 · ca. 25 Min. · Einstieg
Nach dieser Lektion definieren Sie Funktionen mit def, rufen sie mit Argumenten auf, geben Ergebnisse mit return zurück und erklären, warum eine Funktion ohne return None liefert.
Lektion 1 von 5 in B3 Funktionen
Danach können Sie
Aufwärmen · Aufgabe 1 von 7
total = 0
for n in range(1, 4):
total += n
print(total)Vorhersagen · Aufgabe 2 von 7
def double(n):
n * 2
print(double(5))Üben · Aufgabe 3 von 7
def area(width, height):
____ width * heightÜben · Aufgabe 4 von 7
def set_score():
score = 100
score = 5
set_score()
print(score)Üben · Aufgabe 5 von 7
Denksport · Aufgabe 6 von 7
def first_even(numbers):
for n in numbers:
if n % 2 == 0:
return n
return -1
print(first_even([3, 7, 8, 10]), first_even([1, 5]))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
line_total berechnet die Kosten einer Zeile des Kassenbons und gibt sie zurück. print_line gibt eine Zeile aus und ruft line_total auf, um den Betrag zu bekommen. Weil line_total sein Ergebnis zurückgibt, kann das Programm auch zwei Zeilen addieren. Der letzte Aufruf zeigt, was print_line zurückgibt: Es gibt nur aus, das Ergebnis ist also None.
main.py
def line_total(price, quantity):
"""Return the cost of one receipt line."""
return price * quantity
def print_line(name, price, quantity):
"""Print one receipt line."""
print(name, quantity, "x", price, "=", line_total(price, quantity))
print_line("apples", 0.5, 6)
print_line("bread", 2.25, 1)
total = line_total(0.5, 6) + line_total(2.25, 1)
print("total:", total)
result = print_line("milk", 1.1, 2)
print("print_line returned", result)
Ausführen mit
python main.pyAusgabe
apples 6 x 0.5 = 3.0
bread 1 x 2.25 = 2.25
total: 5.25
milk 2 x 1.1 = 2.2
print_line returned NoneTab 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
Vervollständigen Sie zwei Funktionen in main.py. area(width, height) gibt Breite mal Höhe zurück, perimeter(width, height) den Umfang des Rechtecks: zwei Breiten plus zwei Höhen. Beide müssen die Zahl zurückgeben, nicht ausgeben. Die Tests importieren sie mit from main import area, perimeter.
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.
Ersetzen Sie return 0 durch die Rechnung; die Parameter width und height enthalten schon die Zahlen aus dem Aufruf.
Der Umfang addiert alle vier Seiten: width + height + width + height.
return width * height und return 2 * width + 2 * height.
Ein möglicher Lösungsweg. Ihrer kann anders aussehen und trotzdem alle Prüfungen bestehen.
def area(width, height):
"""Return the area of a rectangle."""
return width * height
def perimeter(width, height):
"""Return the perimeter of a rectangle."""
return 2 * width + 2 * height
print(area(3, 4), perimeter(3, 4))
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 area(width, height):
"""Return the area of a rectangle."""
return 0 # replace with the real calculation
def perimeter(width, height):
"""Return the perimeter of a rectangle."""
return 0 # replace with the real calculation
print(area(3, 4), perimeter(3, 4))
test_main.py
from main import area, perimeter
def test_area():
"""area(3, 4) ist 12"""
got = area(3, 4)
assert got == 12, f"area(3, 4) lieferte {got!r}, erwartet: 12"
def test_area_other_sizes():
"""area stimmt auch für 5 x 5 und 2.5 x 2"""
got = area(5, 5), area(2.5, 2)
assert got == (25, 5.0), f"area(5, 5) und area(2.5, 2) lieferten {got!r}, erwartet: (25, 5.0)"
def test_perimeter():
"""perimeter(3, 4) ist 14"""
got = perimeter(3, 4)
assert got == 14, f"perimeter(3, 4) lieferte {got!r}, erwartet: 14"
def test_perimeter_square():
"""perimeter(5, 5) ist 20"""
got = perimeter(5, 5)
assert got == 20, f"perimeter(5, 5) lieferte {got!r}, erwartet: 20"
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
grade(score) soll für eine Punktzahl von 0 bis 100 einen Buchstaben zurückgeben: "A" ab 90, "B" ab 80, "C" ab 70 und "F" unter 70. Der Starter gibt aus, statt zurückzugeben, also liefert jeder Aufruf None. Korrigieren Sie das mit einer if-, elif- und else-Kette, die den Buchstaben zurückgibt.
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.
Ersetzen Sie print("F") durch eine Kette von Prüfungen. Jeder Zweig endet mit return und einem Buchstaben.
Beginnen Sie mit der besten Note: if score >= 90: return "A". Dann elif score >= 80 und so weiter.
Der else-Zweig gibt "F" zurück, so bekommt jede Punktzahl einen Buchstaben, und kein Aufruf liefert None.
Ein möglicher Lösungsweg. Ihrer kann anders aussehen und trotzdem alle Prüfungen bestehen.
def grade(score):
"""Return the letter grade for a score from 0 to 100."""
if score >= 90:
return "A"
elif score >= 80:
return "B"
elif score >= 70:
return "C"
else:
return "F"
print(grade(85))
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 grade(score):
"""Return the letter grade for a score from 0 to 100."""
# 90 and up: "A", 80 and up: "B", 70 and up: "C", below 70: "F".
print("F")
print(grade(85))
test_main.py
from main import grade
def test_returns_the_letter():
"""grade(95) liefert A"""
got = grade(95)
assert got == "A", f"grade(95) lieferte {got!r}, erwartet: 'A' (gibt die Funktion den Buchstaben zurück oder nur aus?)"
def test_boundaries():
"""90, 80 und 70 sind A, B und C"""
got = grade(90), grade(80), grade(70)
assert got == ("A", "B", "C"), f"grade(90), grade(80) und grade(70) lieferten {got!r}, erwartet: ('A', 'B', 'C')"
def test_fail():
"""69 und 0 sind F"""
got = grade(69), grade(0)
assert got == ("F", "F"), f"grade(69) und grade(0) lieferten {got!r}, erwartet: ('F', 'F')"
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 herunterladenprint(square(4))
def square(n):
return n * n
Was Python ausgibt
NameError: name 'square' is not definedWarum, und die Lösung
Python führt eine Datei von oben aus. Bei square(4) ist das def darunter noch nicht gelaufen, der Name square existiert also nicht. Stellen Sie jedes def über den Code, der es aufruft; meist stehen alle Funktionen oben in der Datei.
def greet(name):
print("Hello,", name)
greet()
Was Python ausgibt
TypeError: greet() missing 1 required positional argument: 'name'Warum, und die Lösung
greet hat einen Parameter, also braucht jeder Aufruf ein Argument: greet("Ada"). Die Meldung nennt den Parameter, der keinen Wert bekommen hat. Die nächste Lektion zeigt, wie ein Standardwert ein Argument optional macht.
def double(n):
print(n * 2)
result = double(5) + 1
Was Python ausgibt
TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'Warum, und die Lösung
double zeigt 10 an, gibt aber nichts zurück; double(5) ist also None, und None + 1 ist ein Fehler. NoneType ist der Typ von None. Schreiben Sie return n * 2 und geben Sie das Ergebnis dort aus, wo Sie die Funktion aufrufen.
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.