[Python] Wie kann ich Eingaben als Ganzzahlen lesen?


Answers

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 raw_input zurückgibt. Die input bewertet jedoch, was Sie eingegeben haben, und das Ergebnis der Auswertung 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 es den Ausdruck 5 + 17 auswertet, erkennt es, dass Sie zwei Zahlen hinzufügen, und so wird das Ergebnis auch vom gleichen int Typ sein. Daher wird die Typumwandlung kostenlos durchgeführt und 22 wird als Ergebnis der input und in der input gespeichert. Sie können sich die input als raw_input die mit einem eval Aufruf erstellt wurde.

>>> 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 erklärte, warum man in dieser Antwort vorsichtig sein sollte.

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

Die input Python 3.x und die raw_input - input Python 2.x 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, müssen Sie, da Python 3.x den Datentyp nicht auswertet und konvertiert, explizit in int s konvertieren, mit int

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

Sie können Zahlen jeder Basis akzeptieren und diese direkt in base-10 mit der int Funktion 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 sagt aus, was die Basis der eingegebenen Zahlen ist, und dann intern versteht und konvertiert er sie. Wenn die eingegebenen Daten falsch sind, wird ein 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 ein wenig geändert werden

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

Sie können die Spielvariable loswerden, indem Sie break und while True .

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

Question

Warum gibt dieser Code keine ganzen Zahlen ein? Alles im Web sagt raw_input() , aber ich lese auf (in einem Thread, der sich nicht mit Integer-Input beschäftigt), dass raw_input() in input() in Python 3.x 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



Mehrere Fragen erfordern Eingaben für mehrere ganze Zahlen in einer Zeile. Der beste Weg besteht darin, die ganze Zahlenfolge eine Zeile lang einzugeben und sie dann in ganze Zahlen aufzuteilen.

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



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



Für mehrere Integer in einer einzelnen Zeile ist die Karte möglicherweise besser.

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

Wenn die Nummer bereits bekannt ist, (wie 2 ganze Zahlen), können Sie verwenden

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



input() (Python 3) und raw_input() (Python 2) geben immer Strings zurück. Konvertiere das Ergebnis mit int() explizit in int() .

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

Profi-Tipp: Semikolons werden in Python nicht benötigt.




Ja, in Python 3.x wird raw_input durch input . Um zum alten Verhalten der input benutze:

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

Dadurch weiß python, dass die eingegebene Eingabe eine Ganzzahl ist




Python 3.x hat die Funktion input() , die immer einen 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 raw_input() Funktionen raw_input() und input() immer einen String zurück, so dass sie auch in int konvertiert werden müssen.

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



In ganze Zahlen konvertieren:

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

Ähnlich für Gleitkommazahlen:

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



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

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



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

Dies bedeutet, dass die input in Python 3.x wie raw_input immer ein Zeichenfolgenobjekt zurückgibt.

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

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

Außerdem benötigt / benutzt Python keine Semikolons zum Beenden von Zeilen. Also, sie zu haben macht nichts Positives.




Während in Ihrem Beispiel int(input(...)) in jedem Fall den Trick macht, ist python-future builtins.input ' builtins.input eine Überlegung wert, da dies sicherstellt, dass Ihr Code sowohl für Python 2 als auch 3 funktioniert und das Standardverhalten von Python2 deaktiviert der input versucht, "schlau" über den Eingabedatentyp zu sein ( builtins.input verhält sich im Grunde nur wie raw_input ).




Standardmäßig verwendet die Eingabefunktion Eingaben als Zeichenfolgenformat

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

In Python 2 verwenden wir die Funktion raw_input () . Es wartet darauf, dass der Benutzer eine Eingabe eingibt, und drücken Sie die Eingabetaste, und wir müssen den Wert in einer Variablen speichern, indem Sie den gewünschten Datentyp übergeben. Seien Sie vorsichtig beim Typ Gießen

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 die Funktion input () , die einen Benutzereingabewert zurückgibt

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

Wenn Sie einen String eingeben, int, float, eval, wird dies als String-Eingabe 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 der Basis 10:

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

Wenn Sie eine Zeichenfolge für float cast eingeben ValueError: konnte die Zeichenfolge nicht in float konvertieren

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

wenn Sie eine Zeichenfolge für die Eval-Besetzung eingeben

NameError: Name '' ist nicht definiert

Dieser Fehler gilt auch für Python 2




Ich habe ein Problem mit der Integer-Eingabe beim Lösen eines Problems in CodeChef , wo zwei ganze Zahlen - getrennt durch Leerzeichen - 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 es 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.




Int als Eingabe in Python nehmen: Wir nehmen eine einfache String-Eingabe mit:

input()

jetzt wollen wir int als input.so tippen wir diese string in int. einfach verwenden:

int(input())