Warum sind x
und y
Zeichenfolgen anstelle von Ints im folgenden Code?
(Hinweis: In Python 2.x verwenden raw_input()
. In Python 3.x verwenden input()
. raw_input()
Wurde input()
in Python 3.x umbenannt.)
play = True
while play:
x = input("Enter a number: ")
y = input("Enter a number: ")
print(x + y)
print(x - y)
print(x * y)
print(x / y)
print(x % y)
if input("Play again? ") == "no":
play = False
python
python-3.x
python-2.7
input
int
smci
quelle
quelle
Antworten:
TLDR
input
Funktion empfangenen Daten nicht aus, die Funktion von Python 2input
jedoch (lesen Sie den nächsten Abschnitt, um die Auswirkungen zu verstehen).input
ist dieraw_input
Funktion.Python 2.x.
Es gab zwei Funktionen zum Abrufen von Benutzereingaben:
input
undraw_input
. Der Unterschied zwischen ihnen besteht darin,raw_input
dass die Daten nicht ausgewertet werden und wie sie sind in Zeichenfolgenform zurückgegeben werden. Esinput
wird jedoch ausgewertet, was auch immer Sie eingegeben haben, und das Ergebnis der Bewertung wird zurückgegeben. Beispielsweise,Die Daten
5 + 17
werden ausgewertet und das Ergebnis ist22
. Wenn der Ausdruck ausgewertet wird5 + 17
, wird festgestellt, dass Sie zwei Zahlen hinzufügen, sodass das Ergebnis ebenfalls vom gleichenint
Typ ist. Die Typkonvertierung erfolgt also kostenlos und22
wird als Ergebnis einer Variablen zurückgegebeninput
und in dieser gespeichertdata
. Sie können uns vorstellen ,input
wie dasraw_input
mit einem zusammengesetzteneval
Anruf.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.Python 3.x.
Python 3.x
input
und Python 2.xraw_input
sind ähnlich undraw_input
in Python 3.x nicht verfügbar.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
Sie können Zahlen jeder Basis akzeptieren und mit dieser
int
Funktion direkt in Basis-10 konvertierenDer 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
.Für Werte, die eine Bruchkomponente haben können, wäre der Typ
float
eher alsint
:Abgesehen davon kann Ihr Programm ein wenig geändert werden
Sie können die
play
Variable mitbreak
und entfernenwhile True
.quelle
eval
würde funktionieren, aber machen Sie das nicht, es sei denn, Sie haben dringende Gründe.ast.literal_eval
. Es hat nicht die Sicherheitsbedenken voneval
.int(input()
... oben? Python 2 nähert sich dem Ende seines Lebens und die Python 3-Informationen sind zu begraben IMOIn Python 3.x
raw_input
wurde umbenannt ininput
und Python 2.xinput
wurde entfernt.Dies bedeutet , dass, so wie
raw_input
,input
in Python 3.x immer ein String - Objekt zurückgibt.Um das Problem zu beheben, müssen Sie diese Eingaben explizit in Ganzzahlen umwandeln, indem Sie sie eingeben
int
:quelle
Für mehrere Ganzzahlen in einer einzelnen Zeile ist dies
map
möglicherweise besser.Wenn die Zahl bereits bekannt ist (z. B. 2 Ganzzahlen), können Sie sie verwenden
quelle
input()
(Python 3) undraw_input()
(Python 2) geben immer Zeichenfolgen zurück. Konvertieren Sie das Ergebnis explizit in eine Ganzzahl mitint()
.quelle
Für mehrere Fragen müssen mehrere Ganzzahlen in einer Zeile eingegeben werden. Am besten geben Sie die gesamte Zahlenfolge in einer Zeile ein und teilen sie dann in ganze Zahlen auf. Hier ist eine Python 3-Version:
Auch ein Listenverständnis kann verwendet werden
Und um alle Eingaben von string nach int zu konvertieren, gehen wir wie folgt vor
druckt die Listenelemente in einer geraden Linie.
quelle
In ganze Zahlen konvertieren:
Ähnliches gilt für Gleitkommazahlen:
quelle
Die for-Schleife muss n-mal ausgeführt werden. Das zweite 'n' ist die Länge des Arrays. Die letzte Anweisung ordnet die Ganzzahlen einer Liste zu und nimmt Eingaben in durch Leerzeichen getrennter Form vor. Sie können das Array auch am Ende der for-Schleife zurückgeben.
quelle
Beim Lösen eines Problems in CodeChef ist ein Problem mit der Eingabe von Ganzzahlen aufgetreten , bei dem zwei durch Leerzeichen getrennte Ganzzahlen aus einer Zeile gelesen werden sollten.
Während dies
int(input())
für eine einzelne Ganzzahl ausreicht, habe ich keinen direkten Weg gefunden, zwei Ganzzahlen einzugeben. Ich habe es versucht:Jetzt benutze ich num1 und num2 als ganze Zahlen. Hoffe das hilft.
quelle
i
zerstört, wenn diefor
Schleife verlassen wird?@hosch250
Wenn eine Schleife verlassen wird,i
bleibt der Wert der Indexvariablen (hier ) erhalten. Ich habe dieses Stück ausprobiert und es funktioniert richtig.num1, num2 = map(int, input().split())
festlegen, auf wie viele Ganzzahlen Sie stoßen, odernums = list(map(int, input().split()))
nicht.quelle
Während in Ihrem Beispiel,
int(input(...))
den Trick in jedem Fall tut,python-future
istbuiltins.input
ist eine Überlegung wert , da dies sicher funktioniert sowohl für Python 2 und 3 des Code macht und deaktiviert Python2 Standardverhalten voninput
‚clever‘ über den Eingabedatentyp (zu versuchen ,builtins.input
im Grunde nur verhält sich wieraw_input
).quelle