9.2 Tastatureingaben 

Sie erinnern sich sicherlich noch an unser kleines Beispielprogramm zum Einstieg in die Sprache Python, das Spiel »Zahlenraten«. Dort haben wir bereits eine Tastatureingabe des Benutzers verwendet. Dazu wurde folgender Code verwendet:
guess = input("Raten Sie: ")
Hier wird zunächst der String "Raten Sie:" auf dem Bildschirm ausgegeben und ein Eingabeprompt angezeigt. Jetzt wird der Programmablauf so lange angehalten, bis der Benutzer eine Eingabe getätigt und diese mit
bestätigt hat. Anschließend wird der eingelesene Wert mit der Referenz guess verknüpft.
Bei der Verwendung von input müssen Sie vor allem eine Besonderheit beachten: Alle Eingaben des Benutzers werden zunächst als Python-Code interpretiert und können erst danach an eine Referenz gebunden werden. So würde guess hier nach der Eingabe von »2+2« keineswegs einen String mit dem Wert "2+2" referenzieren, sondern eine ganze Zahl mit dem Wert 4.
Diese Eigenschaft von input lässt sich in unserem Beispiel zum »Cheaten« verwenden, indem der Name der Referenz auf den zu ratenden Begriff eingegeben wird:
Raten Sie: secret Super, Sie haben es in 1 Versuchen geschafft!
Was ist da genau passiert? Nun, dazu sollten wir uns zunächst die ersten paar Zeilen des Programms vergegenwärtigen:
secret = 1337
guess = 0
i = 0
while guess != secret:
guess = input("Raten Sie: ")
[...]
Wir erinnern uns, dass die Eingabe des Spielers bei Verwendung von input als Python-Code interpretiert wird. Sie könnten sich also vorstellen, dass input("Raten Sie: ") durch die Eingabe ersetzt wird. Nach der Eingabe des Spielers referenzieren sowohl guess als auch secret denselben Wert, nämlich die geheime Zahl 1337. Damit ist die Abbruchbedingung der Schleife sofort erfüllt und der Spieler hat das Spiel gewonnen, ohne die geheime Zahl erraten zu haben.
Das ist natürlich nicht im Sinne des Programmierers und kann, je nachdem in welchem Kontext ein Programm eingesetzt wird, als massive Sicherheitslücke betrachtet werden. In der Regel ist es daher nicht erwünscht, dass eine Eingabe des Benutzers interpretiert wird, sondern man möchte sie als String weiterverarbeiten können. Für diesen Zweck existiert in Python eine Alternative zu input namens raw_input:
guess = raw_input("Raten Sie: ")
Nach der Verwendung von raw_input referenziert guess die Eingabe als String. Sollte der Benutzer also, wie im eingangs erwähnten Beispiel, »2+2« eingeben, so referenziert guess einen String mit dem Wert "2+2". Allerdings ist es mit dem Ersetzen von input durch raw_input noch nicht ganz getan, denn es wird im weiteren Verlauf des Spiels erwartet, dass guess eine ganze Zahl und keinen String referenziert. Dazu müssen wir das Ergebnis von raw_input explizit in einen Wert des Datentyps int konvertieren:
guess = int(raw_input("Raten Sie: "))
Spätestens jetzt werden alle nicht numerischen Eingaben mit einer Fehlermeldung quittiert:
Raten Sie: abc Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: invalid literal for int() with base 10: 'abc'
Von den Verwendungsmöglichkeiten her sind input und raw_input gleich. Der Text, der vor der Eingabe auf dem Bildschirm ausgegeben wird, ist optional und kann ersatzlos gestrichen werden:
guess = raw_input()
Dies hat eine Eingabe ohne vorherigen Prompt zur Folge.