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
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:)
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.
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())
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.
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))
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"))
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())
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: "))
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"))
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.
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
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
).
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ą
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.
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