it-swarm.com.de

Wie kann ich Eingaben als Zahlen lesen?

Warum sind x- und y-Zeichenfolgen anstelle von ints im folgenden Code? Alles im Web besagt, dass raw_input() verwendet werden soll, aber ich habe in Stack Overflow (in einem Thread, der sich nicht mit Integer-Eingaben befasste) gelesen, dass raw_input() in Python 3.x in input() umbenannt wurde.

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
241
Hosch250

TLDR

  • Python 3 wertet die mit input-Funktion empfangenen Daten nicht aus, aber die input-Funktion von Python 2 tut dies (lesen Sie den nächsten Abschnitt, um die Implikation zu verstehen).
  • Das Äquivalent von Python 2 zu input von Python 3 ist die raw_input-Funktion.

Python 2.x

Es gab zwei Funktionen, um Benutzereingaben zu erhalten, genannt input und raw_input . Der Unterschied zwischen ihnen besteht darin, dass raw_input die Daten nicht auswertet und in String-Form zurückgibt. input bewertet jedoch alles, 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 werden ausgewertet und das Ergebnis ist 22. Wenn der Ausdruck 5 + 17 ausgewertet wird, stellt er fest, dass Sie zwei Zahlen hinzufügen, und das Ergebnis wird auch vom selben int-Typ sein. Die Typkonvertierung wird also kostenlos durchgeführt und 22 wird als Ergebnis von input zurückgegeben und in der Variable data gespeichert. Sie können sich input als den raw_input vorstellen, der aus einem eval -Aufruf besteht.

>>> 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 in Python 2.x verwenden. Ich habe in diese Antwort erklärt, warum bei der Verwendung Vorsicht geboten ist.

raw_input wertet die Eingabe jedoch nicht aus und gibt sie als String zurück.

>>> 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.xs input und Python 2.xs 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 ints konvertieren, und zwar mit int

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

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

>>> 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, was die Basis der eingegebenen Zahlen ist und wird dann intern verstanden und konvertiert. Wenn die eingegebenen Daten falsch sind, wird ein ValueError ausgegeben.

>>> 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 gebrochene Komponente enthalten können, wäre der Typ float und nicht int:

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

Abgesehen davon kann Ihr Programm so verändert werden

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

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

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

260
thefourtheye

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

Dies bedeutet, dass input in Python 3.x ebenso wie raw_input immer ein String-Objekt zurückgibt.

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

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

Außerdem benötigt/verwendet Python keine Semikolons, um Zeilen zu beenden. Sie haben also nichts Positives.

38
iCodez

Für mehrere Ganzzahlen in einer einzelnen Zeile ist map möglicherweise besser.

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())
22
user1341043

input() (Python 3) und raw_input() (Python 2) always geben Strings zurück. Konvertieren Sie das Ergebnis explizit mit int() in eine Ganzzahl.

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

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

13
Martijn Pieters

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))
9
gumboy

In ganze Zahlen konvertieren:

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

Ähnlich für Fließkommazahlen:

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

Nehmen wir int als Eingabe in Python: Wir nehmen eine einfache Zeichenfolgeingabe mit folgendem Befehl:

input()

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

int(input())
6
Rohit-Pandey

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"))
5

Python 3.x hat eine input()-Funktion, die immer string zurückgibt. Sie müssen also in int konvertieren.

Python 3.x

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

Python 2.x

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

x = int(raw_input("Enter a number: "))
y = int(input("Enter a number: "))
5
Harun ERGUL
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
3
Sanyal

Ich habe ein Problem mit der Eingabe von Ganzzahlen bei der Lösung eines Problems in CodeChef festgestellt, bei dem zwei durch Leerzeichen getrennte Ganzzahlen aus einer Zeile gelesen werden sollten.

Während int(input()) für eine einzelne ganze Zahl ausreicht, habe ich 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.

3
Aravind
play = True

while play:

    #you can simply contain the input function inside an int function i.e int(input(""))
    #This will only accept int inputs
    # and can also convert any variable to 'int' form

    x = int(input("Enter a number: "))    
    y = int(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
2
uday more
n=int(input())
for i in range(n):
    n=input()
    n=int(n)
    arr1=list(map(int,input().split()))

die for-Schleife soll n-mal ausgeführt werden. Das zweite 'n' gibt die Länge des Arrays an. 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.

2
ravi tanwar

Während int(input(...)) in Ihrem Beispiel den Trick auf jeden Fall macht, ist python-futures builtins.input eine Überlegung wert, da dadurch sichergestellt wird, dass Ihr Code sowohl für Python 2 als auch für 3 funktioniert. Und deaktiviert Python2s Standardverhalten von input Seien Sie "clever" über den Eingabedatentyp (builtins.input verhält sich im Grunde wie raw_input).

2
Tobias Kienzler

Ja, in python 3.x wird raw_input Durch input ersetzt. Um zum alten Verhalten von input zurückzukehren, verwenden Sie:

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

Dadurch wird python mitgeteilt, dass die eingegebene Eingabe eine Ganzzahl ist

1
Waseem Akhtar
play = True

while play:

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

    print(int(x) + int(y))
    print(int(x) - int(y))
    print(int(x) * int(y))
    print(int(x) / int(y))
    print(int(x) % int(y))

    if input("Play again? ") == "no":
        play = False

dadurch wissen Sie, dass die Variablen 'x' und 'y' Ganzzahlen sind und verwenden sie daher als Ganzzahlen. Wenn Sie möchten, dass Dezimalzahlen verwendet werden können, ändern Sie 'int' in 'float'.

die Ausgabe für die erste Funktion 

print(int(x) + int(y))

die Ausgabe, bei der x 3 ist und y 7 ist, ist 10

0
Gregg Morgan

Bei Eingabedaten wird dies immer als Zeichenfolge behandelt. Sie müssen es also explizit in Int konvertieren. Ihr Code sollte wie folgt aussehen:

play = True

while play:

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

  print(int(x) + int(y))
  print(int(x) - int(y))
  print(int(x) * int(y))
  print(int(x) / int(y))
  print(int(x) % int(y))

  if input("Play again? ") == "no":
    play = False `
0
Tarun Singhal

parsen Sie die Eingabe in eine Ganzzahl mit int

x = int(input("What is x?"))
0
Ewanziak

Viele Leute tun gerne int(input("etc")), aber wenn Sie eine Zeichenfolge eingeben, wird dies einen Fehler auslösen.

Was ich gerne mache ist folgendes:

s = input("integer: ")
integer = int(s)

Verwenden Sie jetzt eine Ganzzahl für jeden Zweck !!

Plus, wenn s eine Zeichenkette ist, wirft dies keinen Fehler auf !!!

Zumindest nicht sofort.

0
user11093202