/ / Wie kann ich Eingaben als Ganzzahlen lesen? - Python, Python-2.7, Python-3.x, int

Wie kann ich Eingaben als Ganzzahlen lesen? - Python, Python-2.7, Python-3.x, int

Warum gibt dieser Code keine Ganzzahlen ein? Alles, was im Internet steht, bedeutet zu gebrauchen raw_input(), aber ich habe bei Stack Overflow (bei einem Thread, der sich nicht mit Integer-Eingaben befasste) gelesen, dass raw_input() wurde umbenannt in input() in Python 3.x.

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

Antworten:

202 für die Antwort № 1

Python 2.x

Es gab zwei Funktionen, um Benutzereingaben zu erhalten input und raw_input. Der Unterschied zwischen ihnen ist raw_input wertet die Daten nicht aus und gibt sie als String zurück. input bewertet, was Sie eingegeben haben, und das Ergebnis der Bewertung wird zurückgegeben. Zum Beispiel,

>>> 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 wird ausgewertet und das Ergebnis ist 22. Wenn es den Ausdruck auswertet 5 + 17erkennt es, dass Sie zwei Zahlen addieren, und dass das Ergebnis auch das gleiche ist int Art. Die Typumwandlung erfolgt also kostenlos und 22 wird als Ergebnis von zurückgegeben input und gespeichert in data Variable. Sie können sich vorstellen input als die raw_input komponiert mit einem 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 verwenden input in Python 2.x. Ich erklärte, warum man bei der Verwendung vorsichtig sein sollte diese Antwort.

Aber, raw_input Die Eingabe wird nicht ausgewertet und als String zurückgegeben.

>>> 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 "s input und Python 2.x "s raw_input sind ähnlich und raw_input ist 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, da Python 3.x den Datentyp nicht auswertet und konvertiert, müssen Sie explizit in konvertieren ints, mit int, so was

x = int(input("Enter a number: "))
y = int(input("Enter a number: "))

Sie können Nummern jeder Basis akzeptieren und diese mit der direkt in Basis-10 umwandeln int Funktion wie diese

>>> 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 kann sie intern umwandeln. Wenn die eingegebenen Daten falsch sind, wird ein Fehler ausgegeben 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"

Abgesehen davon kann Ihr Programm so verändert werden

while True:
...
...
if input("Play again? ") == "no":
break

Sie können die loswerden play Variable mit break und while True.

PS: Python erwartet nicht ; am Ende der Zeile :)


28 für die Antwort № 2

In Python 3.x raw_input wurde umbenannt in input und der Python 2.x input wurde entfernt.

Das bedeutet, genau wie raw_input, input In Python 3.x gibt immer ein String-Objekt zurück.

Um das Problem zu beheben, müssen Sie diese Eingaben explizit in Ganzzahlen eingeben, indem Sie sie einfügen int:

x = int(input("Enter a number: "))
y = int(input("Enter a number: "))

Außerdem benötigt / verwendet Python keine Semikola zum Beenden von Zeilen. Sie haben also nichts Positives.


18 für die Antwort № 3

Für mehrere Integer in einer einzelnen Zeile Karte könnte besser sein.

arr = map(int, raw_input().split())

Wenn die Zahl bereits bekannt ist (z. B. 2 Ganzzahlen), können Sie verwenden

num1, num2 = map(int, raw_input().split())

13 für die Antwort № 4

input() (Python 3) und raw_input() (Python 2) immer Strings zurückgeben. Konvertieren Sie das Ergebnis explizit mit Integer int().

x = int(input("Enter a number: "))
y = int(input("Enter a number: "))

Pro-Tipp: In Python werden keine Semikolons benötigt.


8 für die Antwort № 5

Mehrere Fragen erfordern die Eingabe mehrerer Ganzzahlen in einer Zeile. Am besten geben Sie die gesamte Zahlenfolge eine Zeile ein und teilen Sie sie in Ganzzahlen auf.

 p=raw_input()
p=p.split()
for i in p:
a.append(int(i))

4 für die Antwort № 6

In ganze Zahlen konvertieren:

my_number = int(input("enter the number"))

Ähnlich für Fließkommazahlen:

my_decimalnumber = float(input("enter the number"))

4 für die Antwort № 7

Int als Eingabe in Python nehmen: Wir nehmen eine einfache Zeichenfolgeingabe mit:

input()

nun wollen wir int als input.so schreiben wir diese Zeichenfolge in int. einfach mit:

int(input())

3 für die Antwort № 8

Python 3.x hat input() Funktion, die immer String zurückgibt. So müssen Sie in konvertieren int

Python 3.x

x = int(input("Enter a number: "))
y = int(input("Enter a number: "))

Python 2.x

In Python 2.x raw_input() und input() Funktionen geben immer einen String zurück, daher müssen Sie sie auch in int konvertieren.

x = int(raw_input("Enter a number: "))
y = int(input("Enter a number: "))

3 für die Antwort № 9

In Python 3.x. Standardmäßig nimmt die Eingabefunktion die Eingabe im String-Format vor. Um es in eine Ganzzahl zu konvertieren, müssen Sie int (input ()) einschließen.

x=int(input("Enter the number"))

2 für die Antwort № 10

Ich habe ein Problem mit der Eingabe einer Ganzzahl während der Lösung eines Problems festgestellt CodeChef, wo zwei durch Leerzeichen getrennte Ganzzahlen aus einer Zeile gelesen werden sollen.

Während int(input()) ist für eine einzelne ganze Zahl ausreichend, ich habe keinen direkten Weg gefunden, zwei ganze Zahlen einzugeben. Ich habe das versucht:

num = input()
num1 = 0
num2 = 0

for i in range(len(num)):
if num[i] == " ":
break

num1 = int(num[:i])
num2 = int(num[i+1:])

Jetzt benutze ich num1 und num2 als ganze Zahlen. Hoffe das hilft.


2 für die Antwort № 11
def dbz():
try:
r = raw_input("Enter number:")
if r.isdigit():
i = int(raw_input("Enter divident:"))
d = int(r)/i
print "O/p is -:",d
else:
print "Not a number"
except Exception ,e:
print "Program halted incorrect data entered",type(e)
dbz()

Or

num = input("Enter Number:")#"input" will accept only numbers

2 für die Antwort № 12

Während in Ihrem Beispiel int(input(...)) macht den Trick auf jeden Fall python-future"s builtins.input Es ist eine Überlegung wert, da dadurch sichergestellt wird, dass Ihr Code für Python 2 und 3 funktioniert und Deaktiviert Python2s Standardverhalten von input versuchen, über den Eingabedatentyp "klug" zu sein (builtins.input verhält sich im Grunde nur wie raw_input).


1 für die Antwort № 13

Standardmäßig nimmt die Eingabefunktion die Eingabe als Zeichenfolgenformat an

Für andere Datentypen müssen Sie die Benutzereingabe umsetzen

In Python 2 verwenden wir raw_input () Funktion. Es wartet, bis der Benutzer etwas eingibt und die Eingabetaste drückt, und wir müssen den Wert in einer Variablen speichern, indem wir ihn als gewünschten Datentyp verwenden. Seien Sie vorsichtig bei der Verwendung von Typguss

x = raw_input("Enter a number: ") #String input
x = int(raw_input("Enter a number: ")) #integer input
x = float(raw_input("Enter a float number: ")) #float input
x = eval(raw_input("Enter a float number: ")) #eval input

In Python 3 verwenden wir Eingang() Funktion, die einen Benutzereingabewert zurückgibt

x = input("Enter a number: ") #String input

Wenn Sie eine Zeichenfolge (int, float, eval) eingeben, wird sie als Zeichenfolgeingabe verwendet

x = int(input("Enter a number: ")) #integer input

Wenn Sie einen String für int cast eingeben ValueError: ungültiges Literal für int () mit Basis 10:

x = float(input("Enter a float number: ")) #float input

Wenn Sie einen String für Float-Umwandlung eingeben, kann ValueError: String nicht in Float konvertieren

x = eval(input("Enter a float number: ")) #eval input

wenn Sie eine Zeichenfolge für den Eval Cast eingeben

NameError: Name "" ist nicht definiert

Dieser Fehler gilt auch für Python 2


0 für die Antwort № 14

Ja, in Python 3.x raw_input wird durch ersetzt input. Um auf das alte Verhalten von zurückzugreifen input benutzen:

eval(input("Enter a number: "))

Dies lässt Python wissen, dass die eingegebene Eingabe eine Ganzzahl ist


0 für die Antwort № 15
n=int(input())
for i in range(n):
n=input()
n=int(n)
arr1=list(map(int,input().split()))

Die for-Schleife soll "n" oft ausgeführt werden. das zweite "n" ist die Länge des Arrays. Die letzte Anweisung ordnet die Ganzzahlen einer Liste zu und nimmt die Eingabe in durch Leerzeichen getrennte Form vor. Sie können das Array auch am Ende der for-Schleife zurückgeben.