mitmario.dev

Eingaben

Python Sandbox 3 Min Lesezeit 4 BeispieleLektion 6 von 8

Wenn die Werte fest im Code stehen, tut ein Programm bei jedem Lauf dasselbe. Für ein anderes Ergebnis musst du den Code ändern. Mit input kann das Programm stattdessen fragen.

input stellt eine Frage

Ein Programm fragt
name = input("Wie heißt du? ")
print(f"Hallo {name}!")

input("Wie heißt du? ") tut zwei Dinge. Es gibt die Frage aus, ohne Zeilenumbruch danach. Dann wartet es, bis eine Zeile Antwort kommt, und gibt diese Antwort zurück. Mit name = davor bekommt die Antwort einen Namen. Ab da ist sie ein Wert wie jeder andere.

Auf deinem eigenen Rechner steht dann die Frage da, und der Cursor blinkt dahinter. Du tippst Mia und drückst Enter. Erst dann geht es weiter.

Woher die Antwort hier kommt

Auf der Maschine, auf der dein Code in diesem Kurs läuft, sitzt niemand an einer Tastatur. Deshalb kommen die Antworten aus einer Datei. Sie heißt eingabe.txt und hat eine Zeile je Frage. Im Beispiel steht darin nur Mia.

Gestartet wird dein Programm dann mit python main.py < eingabe.txt. Das < gehört zur Kommandozeile und nicht zu Python. Damit wird der Inhalt der Datei in das Programm geschickt, als hätte ihn jemand getippt. Dein Programm merkt keinen Unterschied. Es stellt seine Frage, liest eine Zeile und macht weiter.

Im Terminal steht deshalb Wie heißt du? Mia, mit der Antwort direkt hinter der Frage. Die Antwort wird dort mit hingeschrieben, damit die Ausgabe so aussieht wie an einem echten Rechner, an dem du sie selbst getippt hättest. Sonst stünde da die Frage und gleich danach Hallo Mia!, und niemand wüsste, woher die Mia kommt.

Wenn du einen anderen Namen in eingabe.txt schreibst, wird beim nächsten Lauf jemand anderes gegrüßt. Die Datei ist zum Ausprobieren da. Beim Prüfen einer Aufgabe zählt sowieso nicht, was du hineingeschrieben hast, sondern welche Antworten die Aufgabe vorsieht.

Das Leerzeichen am Ende

Ohne Leerzeichen am Ende der Frage
name = input("Wie heißt du?")
print(f"Hallo {name}!")

Ein kleines Detail macht hier viel aus. input gibt die Frage genau so aus, wie sie dasteht. Ohne Leerzeichen am Ende klebt die Antwort an der Frage, Wie heißt du?Mia. Deshalb endet jede Frage in diesem Kurs mit einem Leerzeichen, und in eigenem Code ist es dort genauso gut aufgehoben.

Die Antwort ist immer Text

input liefert immer Text
anzahl = input("Wie viele Brötchen? ")
print(anzahl * 2)
print(int(anzahl) * 2)

Die Antwort ist eine 3, und anzahl * 2 gibt trotzdem 33 aus. input liefert immer Text, auch wenn jemand eine Zahl eintippt. Und Text mal zwei ist eben derselbe Text zweimal hintereinander. Erst nach int(anzahl) wird gerechnet, und heraus kommen die erwarteten 6 Brötchen.

Weil man das fast jedes Mal braucht, schreibt man beides meistens in eine Zeile: anzahl = int(input("Wie viele Brötchen? ")). Gelesen wird von innen nach außen. Erst wird gefragt, dann wird die Antwort in eine ganze Zahl verwandelt, und das Ergebnis heißt anzahl. Für Kommazahlen steht dort float statt int.

Was passiert, wenn jemand auf die Frage nach einer Zahl drei antwortet, kennst du auch schon. Es gibt einen ValueError. Wie man damit umgeht, ohne dass das Programm abstürzt, kommt in Abschnitt 9.

Wenn eine Antwort fehlt

Eine Zeile zu wenig
name = input("Wie heißt du? ")
jahr = input("Geburtsjahr? ")
print(name, jahr)

Das Programm stellt zwei Fragen, aber in eingabe.txt steht nur eine Zeile. Die erste Frage bekommt ihre Mia. Bei der zweiten ist die Datei zu Ende, und Python meldet EOFError: EOF when reading a line. EOF heißt end of file, also Ende der Datei. Es sollte noch eine Zeile gelesen werden, aber da war keine mehr.

Darunter steht ein deutscher Satz, der nicht von Python kommt, sondern von dieser Plattform: Hier gibt es keine Tastatur, und die Antworten gehören in eine Datei. Auf deinem eigenen Rechner siehst du diesen Fehler praktisch nie, weil dort jemand tippt. Hier heißt er fast immer, dass in eingabe.txt eine Zeile fehlt.

Zum Mitnehmen

Was input() zurückgibt, ist immer Text, für Zahlen kommt int() oder float() drumherum. Fehlt in eingabe.txt eine Zeile, endet das Programm mit einem EOFError.

Jetzt du

Basis Konto, kostenlos

Zu dieser Lektion gehört eine Aufgabe. Du schreibst den Code selbst, und nach jedem Lauf sagt dir eine Prüfliste, was schon stimmt.

Dafür brauchst du das Basis Konto. Es kostet nichts, und ein Passwort gibt es auch nicht.

In diesem Kurs läuft dein Code auf einem Server. Dafür hat das Basis Konto 1 Stunde im Monat, mehr Zeit gibt es mit dem Premium Konto.

Was in dieser Lektion steckt

  • Artikel mit 4 Beispielen zum Ausprobieren

    Steht hier, ohne Konto lesbar.

  • Aufgabe, dein Code läuft auf einem Server

    Öffnet sich mit dem Basis Konto.