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

odpowiedzi na to pytanie są wysiłkiem społeczności. Edytuj istniejące odpowiedzi, aby poprawić ten post. Obecnie nie przyjmuje nowych odpowiedzi ani interakcji.

Dlaczego x i y zamiast intów w poniżej kodu?

(Uwaga: w Pythonie 2.x Użyj raw_input(). W Pythonie 3.x Użyj input(). {[3] } 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: smci, 2013-12-08

10 answers

Rozwiązanie

Od Pythona 3, input zwraca łańcuch, który musisz 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 to

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

Dla wartości, które może mieć składową ułamkową, Typ będzie float zamiast int:

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

Różnice między Pythonem 2 i 3

Podsumowanie

  • funkcja Pythona 2 input oceniała odebrane dane, konwertując je na liczbę całkowitą (przeczytaj następną sekcję, aby zrozumieć implikację), ale funkcja Pythona 3 input już tego nie robi.
  • odpowiednikiem Pythona 2 input jest funkcja raw_input.

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 oceniania wyrażenia 5 + 17, wykrywa, że dodajesz dwie liczby, a więc wynik będzie również tego samego typu int. Tak więc konwersja typu jest wykonywana za darmo, a 22 jest zwracana jako wynik input 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 wejścia i zwraca tak, jak jest, jako sznurek.

>>> 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 raw_input są podobne i {[18] } 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'>)
 335
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
2021-01-28 13:45:16

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: "))
 48
Author: Georgy,
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
2019-05-17 12:08:00

Dla wielu liczb całkowitych w jednym wierszu, map może być lepiej.

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())
 30
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
2019-05-17 12:11:57

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: "))
 18
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
2019-05-17 12:12:35

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. Oto wersja Pythona 3:

a = []
p = input()
p = p.split()      
for i in p:
    a.append(int(i))

Można również użyć listy

p = input().split("whatever the seperator is")

I aby przekonwertować wszystkie wejścia z string na int wykonujemy następujące

x = [int(i) for i in p]
print(x, end=' ')

Drukuje elementy listy w linii prostej.

 12
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
2020-05-27 09:51:58

Konwertuj na liczby całkowite:

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

Podobnie dla liczb zmiennoprzecinkowych:

my_decimalnumber = float(input("enter the number"))
 6
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
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.

 4
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

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.

 3
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
 3
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
2019-04-04 08:47:19

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