W3docs

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/except validieren
  • 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:

  1. Der Aufforderungsstring wird ohne Zeilenumbruch im Terminal ausgegeben — der Cursor steht direkt nach dem ?.
  2. Der Rückgabewert ist immer ein str, auch wenn der Benutzer 42 eingibt.

Wenn Sie input() ohne Argument aufrufen, wird keine Aufforderung angezeigt, aber die Funktion wartet dennoch auf eine Eingabe:

value = input()  # silent prompt

Eingaben 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 35

Float-Eingabe

price = float(input("Enter the price: "))
tax = price * 0.08
print(f"Tax: ${tax:.2f}")
Enter the price: 19.99
Tax: $1.60

boolean-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: 13

Sie 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: 23

Ungü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       : 30

Python 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

FehlerWas schiefläuftLösung
age = int(input(...)) ohne try/exceptAbsturz bei nicht-numerischer EingabeIn try/except ValueError einwickeln
.strip() vergessen" admin" ist nicht gleich "admin"Texteingaben immer bereinigen
Roheingabe mit einem Integer vergleicheninput() == 5 ist immer FalseZuerst umwandeln: int(input(...)) == 5
input() für Passwörter verwendenZeichen auf dem Bildschirm sichtbargetpass.getpass() verwenden
Erwarten, dass bool(input(...)) funktioniertJeder nicht-leere string ist truthyDen 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

Übungen

Übung
Which of the following are valid ways to get user input in Python?
Which of the following are valid ways to get user input in Python?
Was this page helpful?