Zum Inhalt springen
aviral gupta

// 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.

Lektion 2 von 5 in B5 Module, Dateien und Fehler

Danach können Sie

  • Werte mit f-Strings und str.format in Text einsetzen
  • Breite, Ausrichtung, Nachkommastellen und Tausendertrenner mit einer Formatangabe festlegen
  • Werte zum Debuggen mit = und !r zeigen und str() von repr() unterscheiden
  1. Aufwärmen · Aufgabe 1 von 7

    Aufwärmen aus der letzten Lektion: Nach welchen dieser Zeilen können Sie floor(2.5) aufrufen, ohne math. davorzuschreiben? Wählen Sie alle zutreffenden.

    Wählen Sie alle zutreffenden aus.

  2. 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")
  3. Üben · Aufgabe 3 von 7

    Setzen Sie die Formatangabe ein, damit die Zahl als 84,607,016 erscheint.

    population = 84607016
    print(f"{population:____}")
    {population:}
  4. Üben · Aufgabe 4 von 7

    Die Zeichen | zeigen, wo jedes Feld endet. Was gibt das aus?

    print(f"{'Tea':<6}|{2.5:>6.2f}|")
  5. Üben · Aufgabe 5 von 7

    x = 1234.567. Ordnen Sie jedem f-String den Text zu, den er erzeugt.

  6. Denksport · Aufgabe 6 von 7

    Knobelaufgabe. Beide Felder haben dieselbe Breite und keine Ausrichtung. Was gibt das aus?

    print(f"[{'ab':5}][{42:5}]")
  7. 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.py

Ausgabe

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
  1. Hinweis 1

    Jeder Wert bekommt nach einem Doppelpunkt seine eigene Formatangabe: {name:<10}, {qty:>3} und {price:>7.2f}.

  2. Hinweis 2

    Alles außerhalb der Klammern wird unverändert übernommen, " x " steht also direkt im f-String zwischen qty und price.

  3. 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.py

Prüfungen ausführen (learnrun.py muss im selben Ordner liegen):

python learnrun.py test
learnrun.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
  1. Hinweis 1

    In der Formatangabe steht das Komma vor der Genauigkeit: {amount:,.2f}.

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

  3. 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.py

Prüfungen ausführen (learnrun.py muss im selben Ordner liegen):

python learnrun.py test
learnrun.py herunterladen

Hä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 tuple

Warum, 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.

Problem melden

Etwas ist falsch oder unklar? Beschreiben Sie es kurz, dann wird es geprüft und korrigiert.

#

Mindestens 20 Zeichen.

Nur, wenn Sie eine Antwort wünschen.

Kernideen

f-Strings und str.format

Setzen Sie ein f vor die Anführungszeichen und schreiben Sie einen beliebigen Ausdruck in geschweifte Klammern: f"{name} is {age + 1}" wertet name und age + 1 aus und setzt deren Text ein. Aufrufe und Rechnungen in den Klammern sind erlaubt. Für eine echte Klammer verdoppeln Sie sie: f"{{x}}" gibt {x} aus. Die ältere Methode str.format füllt leere Platzhalter der Reihe nach: "{} and {}".format("tea", "cake"). Zahlen oder Namen in den Klammern wählen Argumente: "{1} {0}" vertauscht sie, "{name}" nimmt name=… .

Die Formatangabe nach dem Doppelpunkt

Nach einem Doppelpunkt folgt eine Formatangabe. .2f bedeutet: float mit zwei Nachkommastellen, gerundet; f"{3.14159:.2f}" ergibt 3.14. Eine Zahl setzt die Mindestbreite, aufgefüllt mit Leerzeichen; ein längerer Wert wird nie abgeschnitten. < richtet links aus, > rechts, ^ mittig; ein Zeichen davor füllt statt Leerzeichen, etwa *^9. Ohne Ausrichtung stehen Zahlen rechts und Strings links. Ein Komma fügt Tausendertrenner ein: f"{1234567.891:,.2f}" ergibt 1,234,567.89. Reihenfolge: Füllzeichen, Ausrichtung, Breite, Komma, Genauigkeit, Typ.

Debuggen mit = und !r

str() liefert die lesbare Form eines Werts, repr() die Form, die Sie im Code tippen würden: str("Ada") ist Ada, repr("Ada") ist 'Ada' mit Anführungszeichen. So wird Unsichtbares sichtbar, etwa ein Leerzeichen am Ende oder eine "5", die ein String ist und keine Zahl. Im f-String nutzt !r die repr-Form: f"{word!r}". f"{x=}" gibt den Ausdruck, ein Gleichheitszeichen und die repr des Werts aus, etwa x=7; Leerzeichen um = bleiben erhalten, und eine Formatangabe danach ersetzt repr.

Quellen

Zuletzt geprüft am 29. September 2026