Python-Kurs / Mit Variablen, input und print eine Ausgabe erfassen

In Python verweisen Variablen auf Werte; input() liest Text ein und print() gibt Ergebnisse aus. Auch eine Eingabe, die wie eine Zahl aussieht, bleibt zunächst eine Zeichenkette und muss für Zahlenoperationen passend umgewandelt werden.

Zuweisungen und Kommentare unterscheiden

Der Operator = weist einem Namen das Ergebnis auf seiner rechten Seite zu. Er prüft nicht, ob zwei Ausdrücke mathematisch gleich sind. Wenn Sie demselben Namen einen neuen Wert zuweisen, verwenden spätere Ausdrücke diesen neuen Wert.

Speichern Sie dieses vollständige kleine Beispiel als assignment.py und führen Sie es im Projektterminal mit python assignment.py aus:

amount = 3500
amount = amount + 500
print(amount)  # Display the calculated result

Die Ausgabe lautet 4000. Zuerst erhält amount den Wert 3500. Danach wird rechts der bisherige Wert plus 500 berechnet und das Ergebnis wieder dem Namen zugeordnet. Der englische Kommentar hinter # erläutert die Ausgabe; er selbst wird nicht ausgeführt.

Wählen Sie Namen wie amount oder expense, die eine Rolle erkennen lassen. Überschreiben Sie nicht versehentlich eingebaute Namen wie print, input oder list. Kommentare sollten Gründe, Einheiten oder Einschränkungen erklären, statt nur die unmittelbar sichtbare Anweisung zu wiederholen.

Ein vollständiges Programm mit zwei Eingaben ausführen

Erstellen Sie input_expense.py im Übungsordner und speichern Sie die Datei als UTF-8. Das Programm benötigt nur die Python-Standardbibliothek. Übernehmen Sie den gesamten Inhalt:

name = input("name: ").strip()
amount_text = input("amount: ").strip()
amount = int(amount_text)
print(f"{name}: {amount:,} KRW")

Starten Sie im Terminal der ausgewählten Projektumgebung python input_expense.py. Unter macOS oder Ubuntu verwenden Sie außerhalb einer aktivierten Umgebung gegebenenfalls python3 oder ausdrücklich den Pfad zum Projektinterpreter. Geben Sie bei name: den Text lunch und bei amount: die Ziffern 8000 ein; bestätigen Sie jeweils mit der Eingabetaste.

Die reine Standardausgabe des Programms, ohne die von Ihnen eingetippten Zeichen, lautet:

name: amount: lunch: 8,000 KRW

Im interaktiven Terminal stehen die Eingaben normalerweise zusätzlich auf dem Bildschirm. Sie sehen daher sinngemäß die Aufforderung name: lunch, danach amount: 8000 und schließlich die Ergebniszeile lunch: 8,000 KRW. Der Ausgabe-Block oben ist keine vollständige Abschrift dieser interaktiven Anzeige: input druckt seine Aufforderung ohne abschließenden Zeilenumbruch.

Die englischen Aufforderungen gehören zum gezeigten Beispiel: name fragt den Ausgabennamen ab, amount den Betrag. KRW bezeichnet südkoreanische Won; das Beispiel rechnet keine Währung um. Der Wert ist ein ganzer Won-Betrag, kein Eurobetrag mit Cent-Anteil.

Text, Zahl und Ausgabeformat verfolgen

Der erste Aufruf von input liefert einen Text. strip() entfernt Leerraum am Anfang und Ende, nicht innerhalb des Namens. Auch amount_text ist nach dem Einlesen weiterhin Text. Erst int(amount_text) versucht, daraus eine ganze Zahl zu machen. Die Referenz zu input und die Referenz zu int beschreiben diese unterschiedlichen Schritte.

Eine f-Zeichenkette beginnt mit f vor den Anführungszeichen. Ausdrücke in geschweiften Klammern werden ausgewertet und in den Text eingesetzt. In {amount:,} aktiviert das Komma die Gruppierung mit Kommas: 8000 erscheint als 8,000. Das ist keine automatische Anpassung an deutsche Tausender- und Dezimaltrennzeichen. Die Python-Formatierungssyntax legt die Bedeutung fest.

Geben Sie deshalb für die Umwandlung zunächst 8000 ohne Gruppierungszeichen ein. Weder 8,000 noch 8.000 wird von diesem int-Aufruf als gruppierte Zahl 8000 gelesen. Ausgabeformatierung und Einleseformat sind zwei getrennte Entscheidungen.

Der Code ist noch keine vollständige Prüfung einer Ausgabe. Ein leerer Name wird akzeptiert; int akzeptiert auch negative ganze Zahlen. Wenn Ihr Anwendungsfall nichtnegative Beträge und nichtleere Namen verlangt, benötigen Sie zusätzliche Bedingungen. Dass eine Umwandlung gelingt, sagt noch nicht, dass der Wert fachlich zulässig ist.

Gezielt andere Eingaben und Fehler ausprobieren

  1. Führen Sie das Programm mit lunch und 9000 erneut aus. Erwarten Sie lunch: 9,000 KRW.
  2. Geben Sie vor und nach lunch sowie 8000 Leerzeichen ein. Nach strip() sollte das Ergebnis wieder lunch: 8,000 KRW sein.
  3. Geben Sie als Betrag 8000.5 ein. Die Umwandlung des Textes in eine ganze Zahl scheitert mit ValueError; die Ergebniszeile wird nicht ausgeführt.
  4. Probieren Sie einen leeren Betrag und danach abc. Auch diese Eingaben führen zu ValueError. Die genaue zusätzliche Fehlermeldung kann je nach Python-Version variieren.
  5. Stellen Sie die Eingaben lunch und 8000 wieder her und bestätigen Sie das ursprüngliche Ergebnis.

Wenn der Cursor an einer Eingabeaufforderung wartet, ist das nicht automatisch ein hängen gebliebenes Programm. Prüfen Sie, ob es gerade eine Eingabe erwartet und ob Sie das Terminal statt eines reinen Ausgabefensters verwenden. Ohne weitere Fehlerbehandlung beendet eine ungültige Umwandlung das Beispiel mit einem Traceback.

Erst eine bewusst gestaltete Validierungsschleife kann fehlerhafte Eingaben erklären und erneut abfragen. Verfolgen Sie zunächst für jede Zeile, welcher Wert Text und welcher eine Zahl ist. Ein pauschales Verschlucken aller Fehler würde sowohl Eingabefehler als auch andere Programmfehler unsichtbar machen.