Jak mogę odczytać dane wejściowe jako liczby całkowite?

Dlaczego ten kod nie wprowadza liczb całkowitych? Wszystko w sieci mówi, aby używać raw_input(), ale czytałem na Stack Overflow (w wątku, który nie zajmował się integer input), że raw_input() został przemianowany na input() w Pythonie 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
Author: martineau, 2013-12-08

14 answers

Python 2.x

Były dwie funkcje do pobierania danych przez użytkownika, zwane input oraz raw_input. Różnica między nimi jest taka, że raw_input nie ocenia danych i zwraca je w postaci łańcuchów. Ale input oceni to, co wpisałeś, a wynik oceny zostanie zwrócony. Na przykład,

>>> 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'>)

Dane 5 + 17 są oceniane, a wynik jest 22. Podczas oceny wyrażenia 5 + 17 wykrywa, że dodajesz dwa Liczby i tak wynik będzie również tego samego typu int. Tak więc konwersja typu jest wykonywana za darmo, a 22 jest zwracana jako wynik {[8] } i przechowywana w zmiennej data. Można myśleć o input jako o raw_input złożonym z eval sprawdzam.

>>> data = eval(raw_input("Enter a number: "))
Enter a number: 5 + 17
>>> data, type(data)
(22, <type 'int'>)

Uwaga: powinieneś być ostrożny, gdy używasz input w Pythonie 2.x. wyjaśniłem, dlaczego należy być ostrożnym podczas korzystania z niego, w ta odpowiedź .

Ale raw_input nie ocenia danych wejściowych i zwraca jako ciąg znaków.

>>> 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 i Python 2.x {[9] } są podobne i raw_input nie są dostępne w Pythonie 3.x.

>>> 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'>)

Rozwiązanie

Aby odpowiedzieć na twoje pytanie, od Pythona 3.x nie ocenia i nie konwertuje typu danych, trzeba jawnie przekonwertować na int s, z int, like this

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

Możesz akceptować liczby dowolnej bazy i konwertować je bezpośrednio do bazy - 10 za pomocą funkcji int, jak ta

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

Drugi parametr mówi, jaka jest baza wprowadzonych liczb, a następnie wewnętrznie ją rozumie i konwertuje. Jeśli wprowadzone dane są błędne, rzuci 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'

Poza tym, twój program można zmienić trochę, tak jak to]}

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

Możesz pozbyć się zmiennej play używając break i while True.

PS: Python nie oczekuje ; na koniec wiersza:)

 223
Author: thefourtheye,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:38

W Pythonie 3.x, raw_input został przemianowany na input i Python 2.X input został usunięty.

Oznacza to, że podobnie jak raw_input, input w Pythonie 3.x zawsze zwraca obiekt string.

Aby rozwiązać problem, musisz jawnie dodać te dane wejściowe do liczb całkowitych, umieszczając je w int:

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

Python nie potrzebuje / nie używa średników do kończenia linii. Więc posiadanie ich nie robi nic pozytywnego.

 29
Author: iCodez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-08 03:19:30

Dla wielu liczb całkowitych w jednej linii, Mapa może być lepsza.

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

Jeśli liczba jest już znana (np. 2 liczby całkowite), możesz użyć

num1, num2 = map(int, raw_input().split())
 20
Author: user1341043,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-11 00:40:16

input() (Python 3) i raw_input() (Python 2) Zawsze zwracają ciągi znaków. Konwersja wyniku na liczbę całkowitą jawnie za pomocą int().

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

Wskazówka Pro: średniki nie są potrzebne w Pythonie.

 13
Author: Martijn Pieters,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-08 03:09:10

Wiele pytań wymaga wprowadzenia kilku liczb całkowitych w jednej linii. Najlepszym sposobem jest wprowadzenie całego ciągu liczb jeden jeden wiersz, a następnie podzielić je na liczby całkowite.

 p=raw_input()
    p=p.split()      
    for i in p:
        a.append(int(i))
 8
Author: gumboy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-08 00:33:57

Konwertuj na liczby całkowite:

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

Podobnie dla liczb zmiennoprzecinkowych:

my_decimalnumber = float(input("enter the number"))
 5
Author: Hemanth Savasere,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-26 04:28:51

Przyjmowanie int jako danych wejściowych w Pythonie: pobieramy prosty ciąg znaków używając:

input()

Teraz chcemy int jako input.so wpisujemy ten ciąg do int. po prostu użyj:

int(input())
 5
Author: Rohit-Pandey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-16 17:35:19

Python 3.x ma input() funkcję, która zwraca zawsze string.So musisz przekonwertować na int

Python 3.x

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

Python 2.x

W Pythonie 2.funkcje x raw_input() i input() zawsze zwracają ciąg znaków, więc musisz je również przekonwertować na int.

x = int(raw_input("Enter a number: "))
y = int(input("Enter a number: "))
 4
Author: Harun ERGUL,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-23 20:57:34

W Pythonie 3.x. domyślnie funkcja input pobiera dane wejściowe w formacie string . Aby przekonwertować go na liczbę całkowitą, musisz dołączyć int (input ())

x=int(input("Enter the number"))
 4
Author: Madhusudan chowdary,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-13 12:55:21

Napotkałem problem pobierania danych wejściowych integer podczas rozwiązywania problemu na CodeChef , gdzie dwie liczby całkowite - oddzielone spacją - powinny być odczytywane z jednej linii.

Podczas gdy {[1] } jest wystarczająca dla pojedynczej liczby całkowitej, nie znalazłem bezpośredniego sposobu na wprowadzenie dwóch liczb całkowitych. Próbowałem tego:

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:])

Teraz używam num1 i num2 jako liczb całkowitych. Mam nadzieję, że to pomoże.

 2
Author: Aravind,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-23 11:32:22
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
Author: Sanyal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-09 11:47:58

Podczas gdy w twoim przykładzie, int(input(...)) robi sztuczkę w każdym przypadku, python-future's builtins.input warto to rozważyć, ponieważ upewnia się, że Twój kod działa zarówno dla Pythona 2 jak i 3 i wyłącza domyślne zachowanie Python2 input starając się być "sprytnym" co do wejściowego typu danych (builtins.input w zasadzie zachowuje się jak raw_input).

 2
Author: Tobias Kienzler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-23 12:19:52

Tak, w Pythonie 3.x, raw_input zastępuje się input. Aby powrócić do starego zachowania input Użyj:

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

To poinformuje Pythona, że wprowadzone wejście jest liczbą całkowitą

 0
Author: Waseem Akhtar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-21 11:52:32
n=int(input())
for i in range(n):
    n=input()
    n=int(n)
    arr1=list(map(int,input().split()))

Pętla for powinna przebiegać "N" ilość razy . drugie "n" to długość tablicy. ostatnie polecenie mapuje liczby całkowite do listy i pobiera dane wejściowe w postaci oddzielonej spacjami . można również zwrócić tablicę na końcu pętli for.

 0
Author: ravi tanwar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-03 16:30:31