TLDR
- Python 3 wertet die mit der
inputFunktion empfangenen Daten nicht aus, die Funktion von Python 2 inputjedoch (lesen Sie den nächsten Abschnitt, um die Auswirkungen zu verstehen).
- Das Äquivalent von Python 2 zu Python 3
inputist die raw_inputFunktion.
Python 2.x.
Es gab zwei Funktionen zum Abrufen von Benutzereingaben: inputund raw_input. Der Unterschied zwischen ihnen besteht darin, raw_inputdass die Daten nicht ausgewertet werden und wie sie sind in Zeichenfolgenform zurückgegeben werden. Es inputwird 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 + 17werden 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 intTyp ist. Die Typkonvertierung erfolgt also kostenlos und 22wird als Ergebnis einer Variablen zurückgegeben inputund in dieser gespeichert data. Sie können uns vorstellen , inputwie das raw_inputmit einem zusammengesetzten evalAnruf.
>>> 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 inputPython 2.x verwenden. In dieser Antwort habe ich erklärt, warum man bei der Verwendung vorsichtig sein sollte .
Aber, raw_inputwertet 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 inputund Python 2.x raw_inputsind ähnlich und raw_inputin 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 ints konvertierenint
x = int(input("Enter a number: "))
y = int(input("Enter a number: "))
Sie können Zahlen jeder Basis akzeptieren und mit dieser intFunktion 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 floateher 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 playVariable mit breakund entfernen while True.