Aufwärmen · Aufgabe 1 von 7
// B5.2 · ca. 25 Min. · Einstieg
Formatierte Ausgabe mit f-Strings
Nach dieser Lektion geben Sie Werte mit f-Strings in sauberen Spalten aus, runden sie auf feste Nachkommastellen mit Tausendertrennern und zeigen beim Debuggen genau, was eine Variable enthält.
Vorhersagen · Aufgabe 2 von 7
Sagen Sie es vorher, bevor Sie weiterlesen: Was gibt das aus?
price = 3.14159 print(f"Total: {price:.2f} EUR")Üben · Aufgabe 3 von 7
Setzen Sie die Formatangabe ein, damit die Zahl als 84,607,016 erscheint.
population = 84607016 print(f"{population:____}"){population:}Üben · Aufgabe 4 von 7
Die Zeichen | zeigen, wo jedes Feld endet. Was gibt das aus?
print(f"{'Tea':<6}|{2.5:>6.2f}|")Üben · Aufgabe 5 von 7
x = 1234.567. Ordnen Sie jedem f-String den Text zu, den er erzeugt.
Denksport · Aufgabe 6 von 7
Knobelaufgabe. Beide Felder haben dieselbe Breite und keine Ausrichtung. Was gibt das aus?
print(f"[{'ab':5}][{42:5}]")Anwenden · Aufgabe 7 von 7
Mini-Aufgabe. Geben Sie einen Kassenbon aus für items = [("Coffee", 3.2), ("Bagel", 2.75), ("Juice", 4.5)]: jeden Namen linksbündig in 10 Zeichen, jeden Preis rechtsbündig in 8 Zeichen mit zwei Nachkommastellen, und als letzte Zeile Total mit der Summe in denselben Spalten.
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
Eine Monatsbudget-Tabelle
Drei Ausgaben erscheinen als Tabelle: Namen linksbündig, Beträge rechtsbündig mit zwei Nachkommastellen und eine Summe mit Tausendertrenner. Danach folgen zwei Debug-Zeilen: der Specifier = mit einem Prozentformat und str.format mit !r, das die Anführungszeichen um einen String zeigt.
main.py
items = [("Rent", 950.0), ("Groceries", 312.456), ("Internet", 39.9)]
total = sum(price for _, price in items)
print(f"{'Item':<12}{'EUR':>10}")
for name, price in items:
print(f"{name:<12}{price:>10.2f}")
print("-" * 22)
print(f"{'Total':<12}{total:>10,.2f}")
rent_share = items[0][1] / total
print(f"{rent_share = :.1%}")
print("{} items, the first is {!r}".format(len(items), items[0][0]))
Ausführen mit
python main.pyAusgabe
Item EUR
Rent 950.00
Groceries 312.46
Internet 39.90
----------------------
Total 1,302.36
rent_share = 72.9%
3 items, the first is 'Rent'- 312.456 erscheint als 312.46 und 39.9 als 39.90: .2f zeigt immer genau zwei Nachkommastellen.
- Die Überschriften sind Strings und brauchen deshalb < und >, um zu den Spalten darunter zu passen.
- rent_share = behält die Leerzeichen um =, und :.1% multipliziert mit 100 und hängt ein Prozentzeichen an.
- {!r} in str.format wirkt wie !r im f-String: Der String erscheint mit seinen Anführungszeichen.
Ä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
Eine Bon-Zeile
Schreiben Sie format_line(name, qty, price), das eine Bon-Zeile zurückgibt: den Namen linksbündig in 10 Zeichen, die Menge rechtsbündig in 3, dann " x ", dann den Preis rechtsbündig in 7 Zeichen mit zwei Nachkommastellen. format_line("Tea", 2, 3.5) gibt "Tea 2 x 3.50" zurück, insgesamt 23 Zeichen.
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
Jeder Wert bekommt nach einem Doppelpunkt seine eigene Formatangabe: {name:<10}, {qty:>3} und {price:>7.2f}.
Hinweis 2
Alles außerhalb der Klammern wird unverändert übernommen, " x " steht also direkt im f-String zwischen qty und price.
Hinweis 3
return f"{name:<10}{qty:>3} x {price:>7.2f}"
Eine Lösung zeigen
Ein möglicher Lösungsweg. Ihrer kann anders aussehen und trotzdem alle Prüfungen bestehen.
def format_line(name: str, qty: int, price: float) -> str:
return f"{name:<10}{qty:>3} x {price:>7.2f}"
if __name__ == "__main__":
print(format_line("Tea", 2, 3.5))
print(format_line("Croissant", 12, 1.25))
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 format_line(name: str, qty: int, price: float) -> str:
return f"{name} {qty} x {price}"
if __name__ == "__main__":
print(format_line("Tea", 2, 3.5))
print(format_line("Croissant", 12, 1.25))
test_main.py
from main import format_line
def test_tea():
"""Tea, 2, 3.5 ergibt die Beispielzeile"""
got = format_line("Tea", 2, 3.5)
assert got == "Tea 2 x 3.50", f"format_line(\"Tea\", 2, 3.5) gab {got!r} zurück"
def test_width():
"""Jede Zeile ist 23 Zeichen lang"""
got = format_line("Croissant", 12, 1.25)
assert len(got) == 23, f"die Zeile {got!r} hat {len(got)} Zeichen, erwartet waren 23"
def test_two_decimals():
"""Preise zeigen immer zwei Nachkommastellen, gerundet"""
got = format_line("Cake", 1, 12.349)
assert got.endswith(" 12.35"), f"für 12.349 endet die Zeile mit {got[-7:]!r}, erwartet war ' 12.35'"
def test_columns():
"""Name, Menge und Preis stehen in ihren Spalten"""
got = format_line("Jam", 10, 150.0)
assert got == "Jam 10 x 150.00", f"format_line(\"Jam\", 10, 150.0) gab {got!r} zurück"
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
Geldbeträge und Prozente
Schreiben Sie zwei Funktionen. money(amount) gibt den Betrag mit Tausendertrenner und zwei Nachkommastellen zurück, gefolgt von " EUR": money(1234.5) ist "1,234.50 EUR". percent(part, whole) gibt part / whole als Prozentwert mit einer Nachkommastelle zurück: percent(1, 8) ist "12.5%". Nutzen Sie die Formatangaben , .2f und .1%, statt selbst zu runden.
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
In der Formatangabe steht das Komma vor der Genauigkeit: {amount:,.2f}.
Hinweis 2
Der Typ % multipliziert selbst mit 100 und hängt das Prozentzeichen an. Übergeben Sie also den Bruch part / whole, nicht part / whole * 100.
Hinweis 3
return f"{part / whole:.1%}"
Eine Lösung zeigen
Ein möglicher Lösungsweg. Ihrer kann anders aussehen und trotzdem alle Prüfungen bestehen.
def money(amount: float) -> str:
return f"{amount:,.2f} EUR"
def percent(part: float, whole: float) -> str:
return f"{part / whole:.1%}"
if __name__ == "__main__":
print(money(1234.5), percent(1, 8))
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 money(amount: float) -> str:
return str(amount) + " EUR"
def percent(part: float, whole: float) -> str:
return str(part / whole * 100) + "%"
if __name__ == "__main__":
print(money(1234.5), percent(1, 8))
test_main.py
from main import money, percent
def test_money_separator():
"""1234.5 wird zu 1,234.50 EUR"""
got = money(1234.5)
assert got == "1,234.50 EUR", f"money(1234.5) gab {got!r} zurück"
def test_money_small_and_large():
"""0.5 und 2500000 bekommen zwei Nachkommastellen und Trenner"""
got = money(0.5), money(2500000)
assert got == ("0.50 EUR", "2,500,000.00 EUR"), f"money(0.5) und money(2500000) gaben {got!r} zurück"
def test_percent():
"""1 von 8 ist 12.5%, 2 von 3 ist 66.7%"""
got = percent(1, 8), percent(2, 3)
assert got == ("12.5%", "66.7%"), f"percent(1, 8) und percent(2, 3) gaben {got!r} zurück"
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
Einen String als Zahl formatieren
value = "3.5" # what input() gives you: a string
print(f"{value:.1f}")
Was Python ausgibt
ValueError: Unknown format code 'f' for object of type 'str'Warum, und die Lösung
Der Typ f funktioniert nur mit Zahlen, und input() liefert immer einen String. Wandeln Sie zuerst um: value = float(input()). Dann funktioniert f"{value:.1f}".
Zu wenige Argumente für str.format
print("{} scored {}".format("Ada"))
Was Python ausgibt
IndexError: Replacement index 1 out of range for positional args tupleWarum, und die Lösung
Jedes leere {} nimmt das nächste Argument, und für das zweite, Index 1, gibt es keins. Übergeben Sie ein Argument pro Platzhalter, oder nutzen Sie einen f-String: Dort stehen die Werte in den Klammern und können nicht fehlen, f"{name} scored {score}".
d für einen float verwenden
total = 2.5 * 4
print(f"{total:,d}")
Was Python ausgibt
ValueError: Unknown format code 'd' for object of type 'float'Warum, und die Lösung
d ist für ganze Zahlen, und 2.5 * 4 ist der float 10.0. Zeigen Sie einen float mit .0f ohne Nachkommastellen, f"{total:,.0f}", oder wandeln Sie ihn mit int(total) um, wenn es eine ganze Zahl sein muss.
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.