TLDR
- Python 3 wertet die mit der
input
Funktion empfangenen Daten nicht aus, die Funktion von Python 2 input
jedoch (lesen Sie den nächsten Abschnitt, um die Auswirkungen zu verstehen).
- Das Äquivalent von Python 2 zu Python 3
input
ist die raw_input
Funktion.
Python 2.x.
Es gab zwei Funktionen zum Abrufen von Benutzereingaben: input
und raw_input
. Der Unterschied zwischen ihnen besteht darin, raw_input
dass die Daten nicht ausgewertet werden und wie sie sind in Zeichenfolgenform zurückgegeben werden. Es input
wird jedoch ausgewertet, was auch immer Sie eingegeben haben, und das Ergebnis der Bewertung wird zurückgegeben. Beispielsweise,
>>> import sys
>>> sys.version
'2.7.6 (default, Mar 22 2014, 22:59:56) \n[GCC 4.8.2]'
>>> data = input("Enter a number: ")
Enter a number: 5 + 17
>>> data, type(data)
(22, <type 'int'>)
Die Daten 5 + 17
werden ausgewertet und das Ergebnis ist 22
. Wenn der Ausdruck ausgewertet wird 5 + 17
, wird festgestellt, dass Sie zwei Zahlen hinzufügen, sodass das Ergebnis ebenfalls vom gleichen int
Typ ist. Die Typkonvertierung erfolgt also kostenlos und 22
wird als Ergebnis einer Variablen zurückgegeben input
und in dieser gespeichert data
. Sie können uns vorstellen , input
wie das raw_input
mit einem zusammengesetzten eval
Anruf.
>>> data = eval(raw_input("Enter a number: "))
Enter a number: 5 + 17
>>> data, type(data)
(22, <type 'int'>)
Hinweis: Sie sollten vorsichtig sein, wenn Sie input
Python 2.x verwenden. In dieser Antwort habe ich erklärt, warum man bei der Verwendung vorsichtig sein sollte .
Aber, raw_input
wertet nicht die Eingabe und kehrt wie es ist, als String.
>>> import sys
>>> sys.version
'2.7.6 (default, Mar 22 2014, 22:59:56) \n[GCC 4.8.2]'
>>> data = raw_input("Enter a number: ")
Enter a number: 5 + 17
>>> data, type(data)
('5 + 17', <type 'str'>)
Python 3.x.
Python 3.x input
und Python 2.x raw_input
sind ähnlich und raw_input
in Python 3.x nicht verfügbar.
>>> import sys
>>> sys.version
'3.4.0 (default, Apr 11 2014, 13:05:11) \n[GCC 4.8.2]'
>>> data = input("Enter a number: ")
Enter a number: 5 + 17
>>> data, type(data)
('5 + 17', <class 'str'>)
Lösung
Um Ihre Frage zu beantworten, müssen Sie, da Python 3.x den Datentyp nicht auswertet und konvertiert, explizit wie folgt in int
s konvertierenint
x = int(input("Enter a number: "))
y = int(input("Enter a number: "))
Sie können Zahlen jeder Basis akzeptieren und mit dieser int
Funktion direkt in Basis-10 konvertieren
>>> data = int(input("Enter a number: "), 8)
Enter a number: 777
>>> data
511
>>> data = int(input("Enter a number: "), 16)
Enter a number: FFFF
>>> data
65535
>>> data = int(input("Enter a number: "), 2)
Enter a number: 10101010101
>>> data
1365
Der zweite Parameter gibt an, auf welcher Basis die eingegebenen Zahlen basieren, und versteht sie dann intern und konvertiert sie. Wenn die eingegebenen Daten falsch sind, wird a ausgelöst ValueError
.
>>> data = int(input("Enter a number: "), 2)
Enter a number: 1234
Traceback (most recent call last):
File "<input>", line 1, in <module>
ValueError: invalid literal for int() with base 2: '1234'
Für Werte, die eine Bruchkomponente haben können, wäre der Typ float
eher als int
:
x = float(input("Enter a number:"))
Abgesehen davon kann Ihr Programm ein wenig geändert werden
while True:
...
...
if input("Play again? ") == "no":
break
Sie können die play
Variable mit break
und entfernen while True
.