Dlaczego x
i y
ciągi zamiast ints w poniższym kodzie?
(Uwaga: w Pythonie 2.x użytku raw_input()
. W Pythonie 3.x wykorzystanie input()
. 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
python
python-3.x
python-2.7
input
int
smci
źródło
źródło
Odpowiedzi:
TLDR
input
funkcją, aleinput
robi to funkcja Pythona 2 (przeczytaj następną sekcję, aby zrozumieć konsekwencje).input
jestraw_input
funkcja.Python 2.x
Były dwie funkcje do uzyskania danych wejściowych od użytkownika, nazwane
input
iraw_input
. Różnica między nimi polega na tym,raw_input
że dane nie są analizowane i zwracane są w postaci ciągów znaków. Aleinput
oceni wszystko, co wpisałeś, a wynik oceny zostanie zwrócony. Na przykład,Dane
5 + 17
są oceniane i wynik jest22
. Kiedy ocenia wyrażenie5 + 17
, wykrywa, że dodajesz dwie liczby, więc wynik będzie również tego samegoint
typu. Tak więc konwersja typu jest wykonywana za darmo i22
jest zwracana w wynikuinput
i przechowywana wdata
zmiennej. Możesz myśleć o tym,input
jakraw_input
skomponowany zeval
połączeniem.Uwaga: należy zachować ostrożność podczas korzystania
input
z języka Python 2.x. W tej odpowiedzi wyjaśniłem, dlaczego należy zachować ostrożność podczas jego używania .Ale
raw_input
nie ocenia danych wejściowych i zwraca jako taki ciąg znaków.Python 3.x
Python 3.x
input
i Python 2.xraw_input
są podobne iraw_input
nie są dostępne w Python 3.x.Rozwiązanie
Aby odpowiedzieć na to pytanie, ponieważ Python 3.x nie ocenia i konwersji typu danych, trzeba jawnie przekonwertować
int
s, zint
, jak toMożesz zaakceptować liczby dowolnej bazy i przekonwertować je bezpośrednio na bazę-10 za pomocą takiej
int
funkcjiDrugi parametr mówi, jaka jest podstawa wprowadzonych liczb, a następnie wewnętrznie go rozumie i konwertuje. Jeśli wprowadzone dane są błędne, wyrzuci
ValueError
.W przypadku wartości, które mogą zawierać komponent ułamkowy, typem byłoby
float
raczej niżint
:Poza tym twój program można trochę zmienić, w ten sposób
Możesz pozbyć się
play
zmiennej używającbreak
iwhile True
.źródło
eval
będzie działać, ale nie idź na to, chyba że masz pilne powody.ast.literal_eval
do tego użyj . Nie ma obaw związanych z bezpieczeństwemeval
.int(input()
... na górze? Python 2 zbliża się do końca swojego życia, a informacja o Pythonie 3 jest zbyt pochowana IMOW Pythonie 3.x
raw_input
zmieniono nazwę nainput
i Python 2.xinput
został usunięty.Oznacza to, że, podobnie jak
raw_input
,input
w Pythonie 3.x zawsze zwraca obiekt ciąg.Aby rozwiązać problem, musisz jawnie przekształcić te dane wejściowe w liczby całkowite, umieszczając je w
int
:źródło
Dla wielu liczb całkowitych w jednym wierszu
map
może być lepiej.Jeśli numer jest już znany (np. 2 liczby całkowite), możesz użyć
źródło
input()
(Python 3) iraw_input()
(Python 2) zawsze zwracają ciągi. Bezpośrednio przekonwertuj wynik na liczbę całkowitąint()
.źródło
Wiele pytań wymaga wprowadzenia kilku liczb całkowitych w jednym wierszu. Najlepszym sposobem jest wprowadzenie całego ciągu liczb w jednym wierszu, a następnie podzielenie ich na liczby całkowite. Oto wersja Python 3:
Można również użyć listy
Aby przekonwertować wszystkie dane wejściowe z łańcucha na int, wykonaj następujące czynności
wypisze elementy listy w linii prostej.
źródło
Konwertuj na liczby całkowite:
Podobnie w przypadku liczb zmiennoprzecinkowych:
źródło
pętla for będzie działać „n” razy. drugie „n” jest długością tablicy. ostatnia instrukcja mapuje liczby całkowite na listę i przyjmuje dane wejściowe w postaci oddzielonej spacjami. możesz także zwrócić tablicę na końcu pętli for.
źródło
Podczas rozwiązywania problemu na CodeChef napotkałem problem z wprowadzaniem liczb całkowitych , gdzie dwie liczby całkowite - oddzielone spacją - powinny być odczytywane z jednego wiersza.
Chociaż
int(input())
wystarcza na jedną liczbę całkowitą, nie znalazłem bezpośredniego sposobu na wprowadzenie dwóch liczb całkowitych. Próbowałem tego:Teraz używam num1 i num2 jako liczb całkowitych. Mam nadzieję że to pomoże.
źródło
i
zniszczone pofor
wyjściu z pętli?@hosch250
Po wyjściu z pętli pozostaje wartość zmiennej indeksowej (tutaj,i
). Wypróbowałem ten kawałek i działa poprawnie.num1, num2 = map(int, input().split())
wiedzieć, ile liczb całkowitych napotkasz, albonums = list(map(int, input().split()))
nie.źródło
Podczas gdy w przykładzie,
int(input(...))
wystarcza w każdym raziepython-future
jestbuiltins.input
to warte rozważenia, ponieważ to sprawia, że Twój prace kod dla obu Python 2 i 3 i domyślne zachowanie wyłącza python2 dniainput
stara się być «mądry» o typie danych wejściowych (builtins.input
w zasadzie tylko zachowuje się jakraw_input
).źródło