Python Lernhandbuch

Kapitel 3: Strings und formatierte Ausgabe

Musterlösung mit Erklärung

Deine Lösung hat die Prüfung noch nicht bestanden. Lies die Erklärung, dann versuche es erneut – möglichst ohne abzuschreiben.
Aufgabe noch einmal lesen

Gegeben sind Zeilen aus einer Kundenliste:

python
zeilen = [
    '  max mustermann ; 42 ; wien ',
    'erika musterfrau;37;graz',
    'otto normal ;  58;  LINZ',
]

Gib jede Zeile in diesem Format aus: Name mit großen Anfangsbuchstaben, Alter, Stadt mit großem Anfangsbuchstaben, in Spalten ausgerichtet:

text
Max Mustermann      42 Wien
Erika Musterfrau    37 Graz
Otto Normal         58 Linz

Name linksbündig auf 20 Zeichen, Alter rechtsbündig auf 3 Zeichen.

python
zeilen = [
    '  max mustermann ; 42 ; wien ',
    'erika musterfrau;37;graz',
    'otto normal ;  58;  LINZ',
]

for zeile in zeilen:
    name, alter, stadt = zeile.split(';')
    name = name.strip().title()
    alter = int(alter.strip())
    stadt = stadt.strip().title()
    print(f'{name:<20}{alter:>3} {stadt}')

Was passiert:

  • zeile.split(';') liefert eine Liste mit drei Strings. Die Zeile name, alter, stadt = ... packt sie in drei Variablen aus (Unpacking, Kapitel 4). Hätte die Zeile nicht genau drei Teile, gäbe es einen ValueError.
  • strip() entfernt die überflüssigen Leerzeichen, title() macht aus 'LINZ' den Text 'Linz'.
  • int(alter.strip()) wandelt den Text in eine Zahl um. int verträgt auch Leerzeichen, das strip() ist hier nur zur Klarheit.
  • {name:<20} setzt den Namen linksbündig in ein 20 Zeichen breites Feld, {alter:>3} rechtsbündig in ein 3 Zeichen breites.

Warum so: Zuerst zerlegen, dann jede Einzelheit säubern, dann ausgeben. Diese Reihenfolge (Parsen, Bereinigen, Ausgeben) kehrt in fast jedem Datenprogramm wieder, auch beim Einlesen von CSV-Dateien.