Eingabe

Eingabe mit Input

Eingabe über Tastatur Es gibt kaum Programme, die ohne jegliche Eingaben auskommen. Eingaben können über viele Wege erfolgen, so zum Beispiel aus einer Datenbank, von einem anderen Rechner im lokalen Netzwerk oder auch über das Internet. Die einfachste und wohl auch häufigste Eingabe erfolgt jedoch über die Tastatur. Für diese Form der Eingabe bietet Python die Funktion input(eingabeprompt).

Kommt es zum Aufruf der Funktion input während eines Programmlaufes, wird der Programmablauf solange gestoppt, bis die Benutzerin oder der Benutzer eine Eingabe über die Tastur tätigt und diese mit der Return-Taste abschließt. Damit der User auch weiß, was er einzugeben hat, wird der String des Parameters "eingabeprompt" ausgegeben, sofern ein solcher String existiert. Der Parameter "eingabeprompt" von input() ist optional.

Der Eingabestring des Benutzers wird von input() nicht interpretiert, d.h. input() liefert immer einen String zurück.

In der folgenden interaktiven Python-Shell können wir erkennen, dass die Eingabe immer ein String ist.

>>> eingabe = input("Ihre Eingabe? ")
Ihre Eingabe? 34
>>> eingabe
'34'
>>> eingabe = input("Ihre Eingabe? ")
Ihre Eingabe? [3,5,8]
>>> eingabe
'[3,5,8]'
>>> type(eingabe)
<class 'str'>
>>> 
Meistens wird auf den Ergebnisstring von input sofort der entsprechende cast-Operator angewendet, um den für die Weiterverarbeitung benötigten Datentyp zu erhalten:
>>> alter = int(input("Ihr Alter? "))
Ihr Alter? 42
>>> alter, type(alter)
(42, <class 'int'>)
>>> 
>>> preis = float(input("Artikelpreis? "))
Artikelpreis? 33.99
>>> preis, type(preis)
(33.99, <class 'float'>)
>>> 
Eine unangenehme Überraschung erlebt mancher Programmieranfänger, wenn er oder sie eine Liste einlesen will und diese entsprechend mittels ,,list'' umwandelt:
>>> preis = float(input("Preis? "))
Preis? 327.99
>>> print(preis)
327.99
>>> staedte = list(input("Liste? "))
Liste? ["Berlin", "Ulm", "Frankfurt", "Stuttgart", "Freiburg"]
>>> print(staedte)
['[', '"', 'B', 'e', 'r', 'l', 'i', 'n', '"', ',', ' ', '"', 'U', 'l', 'm', '"', ',', ' ', '"', 'F', 'r', 'a', 'n', 'k', 'f', 'u', 'r', 't', '"', ',', ' ', '"', 'S', 't', 'u', 't', 't', 'g', 'a', 'r', 't', '"', ',', ' ', '"', 'F', 'r', 'e', 'i', 'b', 'u', 'r', 'g', '"', ']']
Eigentlich ist es klar und logisch, was passiert ist. Python wandelt den String in eine Liste, indem jedes einzelne Zeichen zu einem Listenelement wird. Wir hätten aber gerne die einzelnen Städte, also "Berlin", "Ulm", "Frankfurt", "Stuttgart", und "Freiburg", als Elemente der Ergebnisliste. Um dies zu erreichen müssen wir die Funktion eval benutzen. eval interpretiert die Eingabe und liefert den entsprechenden Datentyp zurück. Dies funktioniert nicht nur für Listen sondern auch für andere Datentypen wie beispielsweise Tupel und Dictionaries.
>>> staedte = eval(input("Liste? "))
Liste? ["zürich", "Bern", "Basel", "Schaffhausen"]
>>> print(staedte)
['zürich', 'Bern', 'Basel', 'Schaffhausen']
>>> 
>>> einwohnerzahl = eval(input("Städte und Einwohner: "))
Städte und Einwohner: {"Köln": 1024373, "Frankfurt":687775, "Stuttgart":597939}
>>> einwohnerzahl
{'Köln': 1024373, 'Frankfurt': 687775, 'Stuttgart': 597939}
>>> 


Unterschied zu Python2

Da die Verwendung von input unter Python2 immer wieder zu Programmierfehlern geführt hatten, wurde das Verhalten von input() in Python3 zu dem von raw_input geändert. raw_input gibt es nicht mehr in Python3. Will man eine Benutzereingabe evaluieren, wie dies input() in Python2 automatisch macht, muss man dies in Python3 expliziert durch Anwendung der Funktion eval gestalten.

Im folgenden Diagramm stellen wir die Unterschiede zwischen input, raw_input und der verschiedenen Python-Versionen schematisch dar:

Unterschiede zwischen input, raw_input zwischen Python und Python3