Как я могу читать входные данные как числа?
Почему в приведенном ниже коде строки x
и y
вместо целых чисел?
(Примечание: в Python 2.x используйте raw_input()
. В Python 3.x используйте input()
. raw_input()
был переименован в input()
в Python 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
Ответы
Ответ 1
TL;DR
- Python 3 не оценивает данные, полученные с
input
функции, но Python 2 input
функция не имеет (прочитать следующий раздел, чтобы понять последствия). - Эквивалент Python 2 для
input
Python 3 - это функция raw_input
.
Python 2.x
Было две функции для получения пользовательского ввода, называемые input
и raw_input
. Разница между ними в том, что raw_input
не оценивает данные и возвращает их в виде строки. Но input
оценит все, что вы ввели, и результат оценки будет возвращен. Например,
>>> 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'>)
Данные 5 + 17
оцениваются и результат 22
. Когда он вычисляет выражение 5 + 17
, он обнаруживает, что вы добавляете два числа, и поэтому результат также будет иметь тот же тип int
. Таким образом, преобразование типов выполняется бесплатно, а 22
возвращается как результат input
и сохраняется в переменной data
. Вы можете думать о input
как о raw_input
состоящем из вызова eval
.
>>> data = eval(raw_input("Enter a number: "))
Enter a number: 5 + 17
>>> data, type(data)
(22, <type 'int'>)
Примечание: вы должны быть осторожны при использовании input
в Python 2.x. Я объяснил, почему нужно быть осторожным при его использовании, в этом ответе.
Но raw_input
не оценивает входные данные и возвращает их в виде строки.
>>> 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
input
Python 3.x и Python 2.x raw_input
схожи, а raw_input
недоступен в Python 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'>)
Решение
Чтобы ответить на ваш вопрос, так как Python 3.x не оценивает и не конвертирует тип данных, вы должны явно преобразовать его в int
s, используя int
, например, так:
x = int(input("Enter a number: "))
y = int(input("Enter a number: "))
Вы можете принимать числа любой базы и конвертировать их непосредственно в базу-10 с помощью функции int
, например, так:
>>> 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
Второй параметр сообщает, что является основой введенных чисел, а затем внутренне понимает и преобразует их. Если введенные данные неверны, он выдаст ошибку 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'
Для значений, которые могут иметь дробный компонент, тип будет float
а не int
:
x = float(input("Enter a number:"))
Кроме того, ваша программа может быть немного изменена, как это
while True:
...
...
if input("Play again? ") == "no":
break
Вы можете избавиться от переменной play
, используя break
и while True
.
Ответ 2
В Python 3.x, raw_input
был переименован input
и Python 2.x input
был удален.
Это означает, что, как и raw_input
, input
в Python 3.x всегда возвращает строковый объект.
Чтобы решить проблему, вам нужно явно превратить эти входные данные в целые числа, поместив их в int
:
x = int(input("Enter a number: "))
y = int(input("Enter a number: "))
Ответ 3
Для нескольких целых чисел в одной строке map
может быть лучше.
arr = map(int, raw_input().split())
Если число уже известно (например, 2 целых числа), вы можете использовать
num1, num2 = map(int, raw_input().split())
Ответ 4
input()
(Python 3) и raw_input()
(Python 2) всегда возвращают строки. Преобразуйте результат в целое число явно с помощью int()
.
x = int(input("Enter a number: "))
y = int(input("Enter a number: "))
Ответ 5
Несколько вопросов требуют ввода нескольких целых чисел в одной строке. Лучший способ - ввести целую строку чисел в одну строку, а затем разбить их на целые числа. Вот версия Python 3:
a = []
p = input()
p = p.split()
for i in p:
a.append(int(i))
Ответ 6
Преобразование в целые числа:
my_number = int(input("enter the number"))
Аналогично для чисел с плавающей запятой:
my_decimalnumber = float(input("enter the number"))
Ответ 7
Python 3.x
Принимая int
качестве ввода в Python: мы берем простой ввод string
используя:
input()
Теперь мы хотим использовать int
качестве входных данных. Таким образом, мы вводим эту string
в int
просто используя:
int(input())
Ответ 8
Python 3.x имеет функцию input()
, которая всегда возвращает строку. Поэтому вы должны преобразовать в int
python 3.x
x = int(input("Enter a number: "))
y = int(input("Enter a number: "))
python 2.x
В функциях python 2.x raw_input()
и input()
всегда возвращается строка, поэтому вы должны также преобразовать их в int.
x = int(raw_input("Enter a number: "))
y = int(input("Enter a number: "))
Ответ 9
В Python 3.x по умолчанию функция ввода принимает ввод в строковом формате. Чтобы преобразовать его в целое число, вам нужно включить int(input())
:
x=int(input("Enter the number"))
Ответ 10
Я столкнулся с проблемой ввода целочисленного ввода при решении проблемы CodeChef, где должны считываться два целых числа - разделенные пробелом из одной строки.
Пока int(input())
достаточно для одного целого числа, я не нашел прямого способа ввода двух целых чисел. Я пробовал это:
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:])
Теперь я использую num1 и num2 как целые числа. Надеюсь, это поможет.
Ответ 11
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
Ответ 12
В вашем примере int(input(...))
делает трюк в любом случае, python-future
builtins.input
заслуживает внимания, поскольку это делает убедитесь, что ваш код работает как для Python 2, так и для 3 и отключает поведение Python2 по умолчанию input
, пытающееся быть "умным" относительно типа входных данных (builtins.input
в основном ведет себя как raw_input
).
Ответ 13
n=int(input())
for i in range(n):
n=input()
n=int(n)
arr1=list(map(int,input().split()))
цикл for должен выполняться n раз. второе "n" - длина массива. последний оператор отображает целые числа в список и принимает ввод в разделенной пробелами форме. Вы также можете вернуть массив в конце цикла for.
Ответ 14
play = True
while play:
#you can simply contain the input function inside an int function i.e int(input(""))
#This will only accept int inputs
# and can also convert any variable to 'int' form
x = int(input("Enter a number: "))
y = int(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
Ответ 15
Да, в python 3.x, raw_input
заменяется на input
. Чтобы вернуться к старому поведению input
, используйте:
eval(input("Enter a number: "))
Это позволит питону знать, что введенный ввод является целым числом
Ответ 16
По умолчанию функция ввода принимает входные данные в виде формата строки
для другого типа данных вам необходимо ввести пользовательский ввод
В Python 2 мы используем функцию raw_input(). он ждет, когда пользователь наберет какой-то ввод и нажмите "возврат", и нам нужно сохранить значение в переменной путем кастинга в качестве нашего типа данных желания. Будьте осторожны при использовании литья типов
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
В Python 3 мы используем функцию input(), которая возвращает значение пользовательского ввода
x = input("Enter a number: ") #String input
если вы введете строку, int, float, eval, она примет в качестве ввода строки
x = int(input("Enter a number: ")) #integer input
если вы введете строку для int cast ValueError: неверный литерал для int() с базой 10:
x = float(input("Enter a float number: ")) #float input
если вы введете строку для float cast ValueError: не удалось преобразовать строку в float
x = eval(input("Enter a float number: ")) #eval input
если вы введете строку для eval cast
NameError: name '' не определен
Эти ошибки также применимы для python 2
Ответ 17
play = True
while play:
x = input("Enter a number: ")
y = input("Enter a number: ")
print(int(x) + int(y))
print(int(x) - int(y))
print(int(x) * int(y))
print(int(x) / int(y))
print(int(x) % int(y))
if input("Play again? ") == "no":
play = False
Это дает понять, что переменные x
и y
являются целыми числами и поэтому использует их как целые числа.
Если вы хотите, чтобы он мог использовать десятичные дроби, измените int
на float
.
Выход для первой функции:
print(int(x) + int(y))
x = 3
и y = 7
вернул 10
.
Ответ 18
Многим нравится делать int(input("etc"))
, Но если вы введете строку, это вызовет ошибку.
Что мне нравится делать, это:
s = input("integer: ")
integer = int(s)
Теперь используйте целое число для любой цели!
Плюс, если s - строка, это не вызывает ошибку !!!
По крайней мере, не сразу.
Ответ 19
разобрать вход в целое число с int
x = int(input("What is x?"))
Ответ 20
В случае входных данных он всегда обрабатывается как строка. Так что вам нужно явно преобразовать его в Int. Ваш код должен выглядеть примерно так:
play = True
while play:
x = (input("Enter a number: ")
y = input("Enter a number: ")
print(int(x) + int(y))
print(int(x) - int(y))
print(int(x) * int(y))
print(int(x) / int(y))
print(int(x) % int(y))
if input("Play again? ") == "no":
play = False '
Ответ 21
Попробуй это,
x = int(input("Enter a number: "))
y = int(input("Enter a number: ")
int() - это встроенная функция python, которая преобразует любой тип данных в целое число.