Как я могу читать входные данные как числа?

Почему в приведенном ниже коде строки 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, которая преобразует любой тип данных в целое число.