HOWTO · Python
Wie man Benutzereingaben als Ganzzahlen in Python einliest
Benutzereingaben in Python 3 als Ganzzahlen einlesen: einen einzelnen Wert mit int(input()) umwandeln, mehrere Ganzzahlen aus einer Zeile mit split() und map() lesen und ungültige Eingaben mit try-except behandeln.
Auf dieser Seite
In Python 3 gibt die Funktion input() immer eine Zeichenkette zurück. Um mit dem eingegebenen Wert als Zahl zu arbeiten, wandeln Sie diese Zeichenkette mit int() um. Dieser Artikel zeigt, wie man eine einzelne Ganzzahl einliest, wie man Eingaben behandelt, die keine gültige Ganzzahl sind, und wie man mehrere Ganzzahlen aus einer einzigen Zeile einliest.
Dieser Artikel behandelt Python 3. Python 2 verwendete für dieselbe Aufgabe raw_input() und erreichte 2020 sein Lebensende, daher verwenden die folgenden Beispiele durchgehend input().
Eine einzelne Ganzzahl mit int(input()) einlesen
Lesen Sie die Eingabe zuerst als Zeichenkette ein und wandeln Sie sie dann um:
user_input = input("Please enter an integer: ")
integer_value = int(user_input)
print("You entered:", integer_value)
print(type(integer_value))
Ausgabe:
Please enter an integer: 42
You entered: 42
<class 'int'>
Die Umwandlung und das Einlesen werden oft in einer Zeile kombiniert, was sich exakt gleich verhält:
integer_value = int(input("Please enter an integer: "))
Wenn der Benutzer etwas eingibt, das keine Ganzzahl ist, etwa hello oder 3.5, löst int() einen ValueError aus und das Programm bricht ab. Der nächste Abschnitt zeigt, wie man diesen Fall behandelt.
Ungültige Eingaben mit try-except behandeln
Schließen Sie die Umwandlung in einen try-except-Block ein, um den ValueError abzufangen und erneut nachzufragen, statt abzustürzen:
while True:
user_input = input("Please enter an integer: ")
try:
integer_value = int(user_input)
print("You entered:", integer_value)
break
except ValueError:
print("That's not a valid integer. Please try again.")
Die Schleife fragt so lange weiter, bis die Umwandlung gelingt. Erst dann beendet break die Schleife.
Ausgabe:
Please enter an integer: hello
That's not a valid integer. Please try again.
Please enter an integer: 10
You entered: 10
Die Eingabe auf diese Weise zu prüfen, ist eine bewährte Praxis für interaktive Programme: Ein Tippfehler sollte den Benutzer nur eine erneute Eingabeaufforderung kosten, nicht den gesamten Programmlauf.
Mehrere Ganzzahlen aus einer Zeile einlesen
Wenn ein Programm mehrere Zahlen auf einmal benötigt, lassen Sie den Benutzer sie in einer Zeile durch Leerzeichen getrennt eingeben. split() zerlegt die Zeile in Zeichenketten-Teile, und map() wandelt jeden Teil mit int() um:
numbers = list(map(int, input("Enter numbers separated by spaces: ").split()))
print(numbers)
print("Sum:", sum(numbers))
Ausgabe:
Enter numbers separated by spaces: 4 8 15 16 23 42
[4, 8, 15, 16, 23, 42]
Sum: 108
Eine List Comprehension erledigt dieselbe Aufgabe und ist genauso verbreitet:
numbers = [int(piece) for piece in input("Enter numbers separated by spaces: ").split()]
Wenn Sie eine feste Anzahl von Werten benötigen, entpacken Sie das Ergebnis direkt. Hier muss der Benutzer genau zwei Ganzzahlen eingeben:
a, b = map(int, input("Enter two numbers: ").split())
print("a =", a)
print("b =", b)
Ausgabe:
Enter two numbers: 3 17
a = 3
b = 17
Werden mehr oder weniger Werte als erwartet eingegeben, löst dies einen ValueError aus; kombinieren Sie dieses Muster daher mit der try-except-Schleife aus dem vorherigen Abschnitt, wenn die Anzahl wichtig ist.
Was int() akzeptiert und was es ablehnt
int() ist nachsichtiger, als viele erwarten. Es ignoriert Leerzeichen am Anfang und Ende, akzeptiert ein optionales +- oder --Vorzeichen und erlaubt Unterstriche zwischen den Ziffern:
print(int(" 42 "))
print(int("+7"))
print(int("1_000"))
Ausgabe:
42
7
1000
Es lehnt alles ab, was kein ganzzahliges Literal in Zeichenkettenform ist, einschließlich "3.5", "12a" und der leeren Zeichenkette "" — all diese lösen einen ValueError aus. Wenn Ihre Eingabe Dezimalwerte enthalten kann, wandeln Sie stattdessen mit float() um, oder verwenden Sie int(float(text)), wenn das Weglassen des Nachkommateils akzeptabel ist.
Fazit
Ganzzahlen in Python 3 einzulesen läuft auf ein Muster hinaus: input() liefert eine Zeichenkette, und int() wandelt sie in eine Ganzzahl um. Verwenden Sie eine try-except-Schleife, damit ungültige Eingaben erneut abgefragt werden, statt das Programm abstürzen zu lassen, und greifen Sie zu split() mit map() oder einer List Comprehension, wenn Sie mehrere Ganzzahlen aus einer einzigen Zeile benötigen.
FAQ
-
Wie lese ich eine Benutzereingabe in Python 3 als Ganzzahl ein?
Verwenden Sieint(input()):input()liest eine Zeile als Zeichenkette ein, undint()wandelt sie in eine Ganzzahl um. -
Wie lese ich mehrere Ganzzahlen aus einer einzigen Zeile ein?
Teilen Sie die Zeile auf und wandeln Sie jeden Teil um, zum Beispiel mitlist(map(int, input().split()))oder[int(x) for x in input().split()]. -
Was passiert, wenn der Benutzer einen Wert eingibt, der keine Ganzzahl ist?
int()löst einenValueErroraus. Fangen Sie ihn mit einemtry-except-Block ab und fragen Sie erneut. -
Warum kann ich nicht direkt mit dem Ergebnis von input() rechnen?
Weilinput()eine Zeichenkette zurückgibt, keine Zahl. Das Addieren einer Zeichenkette und einer Ganzzahl löst einenTypeErroraus, bis Sie die Zeichenkette mitint()umwandeln. -
Was ist der Unterschied zwischen Python 2 und Python 3 beim Einlesen von Eingaben?
Python 2 las Texteingaben mitraw_input(), während Python 3input()verwendet. Die Umwandlung mitint()funktioniert in beiden gleich, aber Python 2 wird nicht mehr gepflegt, daher sollte neuer Code Python 3 verwenden.