input
– Nutzereingaben anfordern
Eingaben vom Nutzer abfragen in Python
Wir haben bei den vorherigen Kapiteln immer wieder Daten auf dem Bildschirm ausgegeben. Allerdings werden in der Realität die Daten entweder aus einer Datenbank kommen oder durch einen Nutzer festgelegt, also eingegeben werden.
Um eine Angabe vom Nutzer anzufordern, gibt es in Python den Befehl input
Diesem Befehl können wir einen Text mitgeben, damit dem Nutzer klar ist, was er denn eingeben soll. Die Eingabe selber wird in einer Variablen gespeichert, mit der wir dann weiterarbeiten können.
Unser Befehl sieht dann so aus:
benutzereingabe = input("Bitte Zahl eingeben")
Das Python-Programm pausiert nun, wenn es diese Programmzeile erreicht hat und wartet ab, bis der Nutzer eine Eingabe gemacht hat. Erst nach der Eingabe läuft das Programm dann weiter.
Nun können wir die Variable, die im Beispiel „benutzereingabe“ genannt wurde, im weiteren Programmablauf nutzen.
benutzereingabe = input("Bitte Zahl eingeben")
print(benutzereingabe)
Input liefert Strings
Als Rückgabewert der input
-Funktion erhalten wir eine String. Den Typ einer Variablen können wir uns über die Funktion type
ausgeben lassen. Im folgenden Beispiel zum Testen:
benutzereingabe = input("Bitte Zahl eingeben")
print(type(benutzereingabe))
Als Ergebnis erhalten wir:
class 'str'
Wollen wir aber mit der vom Benutzer eingegebenen Zahl weiterrechnen, müssen wir den String erst in eine Zahl konvertieren.
Hier kommt das Prinzip des „castens“ zum Einsatz. Der Typ einer Variablen umgewandelt.
Wenn man den Typ einer Variablen umwandelt, spricht man „casting“. Das Wort erinnert nicht zu Unrecht an das Besetzen von Filmrollen (also die Rollenverteilung). Und genau das machen wir mit dem Typ. Wir sagen, du bist nun eine Ganzzahl (integer).
benutzereingabe = int(benutzereingabe)
Jetzt können wir mit der Benutzereingabe als Zahl arbeiten. Diese Zahl können wir über print
ausgeben lassen.
print(benutzereingabe)
Wollen wir nun die Zahl mit einem Text am Anfang ausgeben lassen, kommen kleine Probleme zum Vorschein:
print("Eingegeben wurde: " + benutzereingabe)
Wir versuchen nun die STRING-Ausgabe "Eingegeben wurde" mit einer Integer zu verknüpfen und das wird mit einer Fehlermeldung quittiert. Hier müssen wir den Typ wieder umwandeln und alles ist gut:
print("Eingegeben wurde: " + str(benutzereingabe))
Gibt der Benutzer allerdings die Zahl in andere Form ein (sprich keine Zahl), dann bekommt man Fehlermeldungen.
Tipp für Fortgeschrittene: unsichtbare input-Eingaben (z.B. für Passwort)
Eigentlich greifen wir nicht besonders tief in die Trickkiste, aber es passt so perfekt an diesem Platz. Mit der bisherigen input
-Eingabe sind immer alle Nutzereingaben sichtbar. Allerdings sollten Passworteingaben beim eintippen unsichtbar sein sonst kann jemand Unberechtigtes das Passwort einfach vom Bildschirm ablesen.
Dazu nutzen wir das Modul getpass
.
Folgender Code macht die Magie:
from getpass import getpass
nutzername = input("Nutzername: ")
kennwort = getpass("Passwort: ")
print("Eingegebener Nutzername", nutzername)
print("Eingegebenes Kennwort", kennwort)