Python-Benutzereingabe
Benutzereingaben in Python mit input() lesen, Typen umwandeln, Daten validieren, Fehler behandeln und interaktive Programme erstellen.
Pythons eingebaute input()-Funktion lässt Programme anhalten und auf eine Eingabe des Benutzers warten. Dieses Kapitel behandelt alles, was Sie brauchen, um Benutzereingaben zu lesen, zu validieren und umzuwandeln — vom einfachen Eingabeaufforderungs-Einzeiler bis hin zu robusten Eingabeschleifen, die ungültige Daten ablehnen.
Was Sie lernen werden:
- Wie
input()funktioniert und was es immer zurückgibt - String-Eingaben in Zahlen und andere Typen umwandeln
- Mehrere Werte in einer Zeile abfragen
- Eingaben mit Schleifen und
try/exceptvalidieren - Passwörter ohne Echo der Zeichen lesen
- Häufige Fallstricke und wie man sie vermeidet
Die input()-Funktion
input() zeigt eine optionale Aufforderung an, wartet darauf, dass der Benutzer die Eingabetaste drückt, und gibt alles, was der Benutzer getippt hat, als string zurück.
name = input("What is your name? ")
print("Hello, " + name + "!")Beispielsitzung:
What is your name? Alice
Hello, Alice!Zwei Dinge, die man beachten sollte:
- Der Aufforderungsstring wird ohne Zeilenumbruch im Terminal ausgegeben — der Cursor steht direkt nach dem
?. - Der Rückgabewert ist immer ein
str, auch wenn der Benutzer42eingibt.
Wenn Sie input() ohne Argument aufrufen, wird keine Aufforderung angezeigt, aber die Funktion wartet dennoch auf eine Eingabe:
value = input() # silent promptEingaben in andere Typen umwandeln
Da input() immer einen string zurückgibt, müssen Sie den Wert casten, wenn Sie eine Zahl oder einen anderen Typ benötigen. Pythons eingebaute Konvertierungsfunktionen machen das unkompliziert.
Integer-Eingabe
age = int(input("Enter your age: "))
print("In ten years you will be", age + 10)Enter your age: 25
In ten years you will be 35Float-Eingabe
price = float(input("Enter the price: "))
tax = price * 0.08
print(f"Tax: ${tax:.2f}")Enter the price: 19.99
Tax: $1.60boolean-artige Eingabe
Python hat keine bool()-Kurzform für „Ja/Nein"-Text, daher prüfen Sie den string direkt:
answer = input("Continue? (yes/no): ").strip().lower()
if answer == "yes":
print("Continuing...")
else:
print("Stopping.")Eine vollständige Referenz zu Pythons Typsystem finden Sie in den Kapiteln Python Data Types und Python Casting.
Mehrere Werte auf einmal lesen
Manchmal müssen Benutzer mehrere Werte in einer einzigen Zeile eingeben. str.split() teilt den Eingabestring in eine Liste auf.
# Read three space-separated integers
a, b, c = input("Enter three numbers separated by spaces: ").split()
a, b, c = int(a), int(b), int(c)
print("Sum:", a + b + c)Enter three numbers separated by spaces: 4 7 2
Sum: 13Sie können auch ein benutzerdefiniertes Trennzeichen verwenden:
first, last = input("Enter your full name (first,last): ").split(",")
print(f"Hello, {first.strip()} {last.strip()}!")Enter your full name (first,last): Alice,Smith
Hello, Alice Smith!map() ist eine kompakte Möglichkeit, alle Teile auf einmal zu konvertieren:
numbers = list(map(int, input("Enter numbers: ").split()))
print("Numbers:", numbers)
print("Total:", sum(numbers))Enter numbers: 3 1 4 1 5 9
Numbers: [3, 1, 4, 1, 5, 9]
Total: 23Ungültige Eingaben mit try/except behandeln
Wenn der Benutzer etwas Unerwartetes eingibt — Buchstaben, wo eine Zahl erwartet wurde — löst die Konvertierung einen ValueError aus und das Programm bricht ab, außer Sie fangen ihn ab.
Grundlegende Fehlerbehandlung
try:
age = int(input("Enter your age: "))
print("Valid age:", age)
except ValueError:
print("That is not a valid number. Please enter digits only.")Enter your age: twenty
That is not a valid number. Please enter digits only.Einen vollständigen Leitfaden zur Ausnahmebehandlung finden Sie im Kapitel Python Try Except.
Die Aufforderung wiederholen, bis eine gültige Eingabe erfolgt
Eine while True-Schleife in Kombination mit break ist das Standardmuster für „weiter fragen, bis der Benutzer richtig antwortet":
while True:
try:
age = int(input("Enter your age: "))
if age < 0 or age > 130:
print("Please enter a realistic age (0-130).")
else:
break # valid input received
except ValueError:
print("That is not a valid number. Please try again.")
print(f"Your age is {age}.")Beispielsitzung:
Enter your age: abc
That is not a valid number. Please try again.
Enter your age: -5
Please enter a realistic age (0-130).
Enter your age: 28
Your age is 28.Dieses Muster — Schleife, try/except, Bereichsprüfung, break — deckt die große Mehrheit der realen Eingabevalidierungsanforderungen ab.
Weitere Informationen zur Schleifensteuerung finden Sie unter Python While Loops.
Leerzeichen entfernen
Benutzer fügen häufig versehentlich ein führendes oder abschließendes Leerzeichen hinzu. Rufen Sie bei Texteingaben immer .strip() auf, bevor Sie sie vergleichen oder speichern:
username = input("Username: ").strip()
if username == "admin":
print("Welcome, administrator!")
else:
print(f"Welcome, {username}!").lower() oder .upper() hilft bei Vergleichen ohne Berücksichtigung der Groß- und Kleinschreibung:
city = input("Enter your city: ").strip().lower()
if city == "new york":
print("You are in the Big Apple!")Eingabevalidierung mit Bedingungen
Bei Auswahlmöglichkeiten oder Mustern prüfen Sie den Wert direkt nach dem Bereinigen und Normalisieren:
color = input("Choose a color (red/green/blue): ").strip().lower()
valid_colors = {"red", "green", "blue"}
if color not in valid_colors:
print(f"'{color}' is not a valid choice. Pick red, green, or blue.")
else:
print(f"You chose {color}.")Validierung mit regulären Ausdrücken
Das Modul re ermöglicht es zu prüfen, ob eine Eingabe einem bestimmten Muster entspricht:
import re
email_pattern = r"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$"
email = input("Enter your email address: ").strip()
if re.match(email_pattern, email):
print("Valid email address.")
else:
print("Invalid email address. Please include '@' and a domain.")Enter your email address: [email protected]
Valid email address.Hinweis: Der obige reguläre Ausdruck ist zur Veranschaulichung vereinfacht. Produktionssysteme verwenden typischerweise eine dedizierte Bibliothek (wie
email-validator) oder serverseitige Validierung für E-Mail-Adressen.
Passwörter sicher lesen
Die Standard-input()-Funktion gibt Zeichen im Terminal aus, während der Benutzer tippt. Für Passwörter und andere Geheimnisse verwenden Sie getpass.getpass() aus der Standardbibliothek — es verbirgt die eingegebenen Zeichen:
import getpass
password = getpass.getpass("Enter your password: ")
print("Password received (length:", len(password), "characters).")getpass.getpass() akzeptiert denselben optionalen Aufforderungsstring wie input(). Das Terminal unterdrückt die Zeichen; der zurückgegebene Wert ist ein einfacher string.
Formatierte Ausgabe aus Eingaben
Sobald Sie die Daten des Benutzers haben, machen es Pythons f-Strings einfach, sie übersichtlich darzustellen. Weitere Details finden Sie im Kapitel Format Strings.
name = input("Name: ").strip().title()
birth_year = int(input("Birth year: "))
current_year = 2025
age = current_year - birth_year
print(f"\n--- Profile ---")
print(f"Name : {name}")
print(f"Born : {birth_year}")
print(f"Age : {age}")Name: alice smith
Birth year: 1995
--- Profile ---
Name : Alice Smith
Born : 1995
Age : 30Python 2 vs Python 3
Wenn Sie älteren Python-2-Code antreffen, beachten Sie, dass die entsprechende Funktion raw_input() hieß. In Python 2 wertete input() den vom Benutzer eingegebenen Ausdruck aus (ähnlich wie eval()), was ein Sicherheitsrisiko darstellte. In Python 3 gibt input() immer einen einfachen string zurück, und raw_input() existiert nicht mehr.
# Python 2 (legacy — do not use)
# name = raw_input("Your name: ")
# Python 3 (correct)
name = input("Your name: ")Häufige Fallstricke
| Fehler | Was schiefläuft | Lösung |
|---|---|---|
age = int(input(...)) ohne try/except | Absturz bei nicht-numerischer Eingabe | In try/except ValueError einwickeln |
.strip() vergessen | " admin" ist nicht gleich "admin" | Texteingaben immer bereinigen |
| Roheingabe mit einem Integer vergleichen | input() == 5 ist immer False | Zuerst umwandeln: int(input(...)) == 5 |
input() für Passwörter verwenden | Zeichen auf dem Bildschirm sichtbar | getpass.getpass() verwenden |
Erwarten, dass bool(input(...)) funktioniert | Jeder nicht-leere string ist truthy | Den string parsen: == "yes" |
Kurzreferenz
# String input
name = input("Name: ").strip()
# Integer input with validation
while True:
try:
n = int(input("Enter a number: "))
break
except ValueError:
print("Integers only, please.")
# Float input
price = float(input("Price: "))
# Multiple values on one line
x, y = map(int, input("Enter x y: ").split())
# Password (hidden input)
import getpass
pwd = getpass.getpass("Password: ")
# Choice validation
choice = input("(yes/no): ").strip().lower()
if choice not in ("yes", "no"):
print("Please type yes or no.")Verwandte Themen
- Python Variables — Werte speichern und benennen
- Python Data Types — strings, Integer, Floats und mehr
- Python Casting — zwischen Typen konvertieren
- Python Strings — Methoden wie
.strip(),.lower(),.split() - Python Try Except — Ausnahmen abfangen und behandeln
- Python While Loops — wiederholen bis eine Bedingung erfüllt ist
- Format Strings — Ausgabestrings mit f-Strings erstellen