it-roy-ru.com

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

Почему в приведенном ниже коде вместо строк используются целые строки x и y? Все в Интернете говорит об использовании raw_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
241
Hosch250

TLDR

  • Python 3 не оценивает данные, полученные с помощью функции input, но делает функцию input в Python 2 (прочитайте следующий раздел, чтобы понять смысл).
  • В Python 2 эквивалентом Python 3 input является функция 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

Python 3.x's input и raw_input в Python 2.x похожи, и 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 не оценивает и не конвертирует тип данных, вы должны явно преобразовать в ints, используя 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

PS: Python не ожидает ; в конце строки :)

260
thefourtheye

В 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: "))

Кроме того, Python не нуждается в/использовать точки с запятой в конце строки. Таким образом, наличие их не делает ничего положительного.

38
iCodez

Для нескольких целых чисел в одной строке лучше использовать map .

arr = map(int, raw_input().split())

Если число уже известно (например, 2 целых числа), вы можете использовать

num1, num2 = map(int, raw_input().split())
22
user1341043

input() (Python 3) и raw_input() (Python 2) всегда возвращают строки. Преобразуйте результат в целое число явно с помощью int().

x = int(input("Enter a number: "))
y = int(input("Enter a number: "))

Совет от профессионала: точки с запятой не нужны в Python.

13
Martijn Pieters

Несколько вопросов требуют ввода нескольких целых чисел в одной строке. Лучший способ - ввести целую строку чисел в одну строку, а затем разбить их на целые числа.

 p=raw_input()
    p=p.split()      
    for i in p:
        a.append(int(i))
9
gumboy

Преобразовать в целые числа:

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

Аналогично для чисел с плавающей запятой:

my_decimalnumber = float(input("enter the number"))
6
Hemanth Savasere

Принимая int в качестве ввода в python: Мы берем простой ввод строки, используя:

input()

теперь мы хотим использовать int в качестве input.so, мы приведем эту строку к типу int. просто используя:

int(input())
6
Rohit-Pandey

В Python 3.x. По умолчанию функция ввода принимает ввод в строковом формате. Чтобы преобразовать его в целое число, вам нужно включить int (input ())

x=int(input("Enter the number"))
5
Madhusudan chowdary

В 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: "))
5
Harun ERGUL
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
Sanyal

Я столкнулся с проблемой получения целочисленного ввода при решении проблемы на 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 как целые числа. Надеюсь это поможет.

3
Aravind
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
2
uday more
n=int(input())
for i in range(n):
    n=input()
    n=int(n)
    arr1=list(map(int,input().split()))

цикл for должен выполняться n раз. второе 'n' - длина массива . последний оператор отображает целые числа в список и принимает входные данные в разделенной пробелами форме . Вы также можете вернуть массив в конце цикла for.

2
ravi tanwar

В то время как в вашем примере, int(input(...)) добивается цели в любом случае, python-future 's builtins.input заслуживает внимания, поскольку это гарантирует, что ваш код работает как для Python 2, так и для 3 и отключает поведение по умолчанию Python2 для input пытающегося быть " умный "о типе входных данных (builtins.input в основном ведет себя как raw_input).

2
Tobias Kienzler

Да, в python 3.x raw_input заменяется на input. Для возврата к старому поведению input используйте: 

eval(input("Enter a number: "))

Это позволит Python знать, что введенный ввод является целым числом

1
Waseem Akhtar
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))

выход, где х 3 и у 7 7

0
Gregg Morgan

В случае входных данных они всегда рассматриваются как строки. Так что вам нужно явно преобразовать его в 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 `
0
Tarun Singhal

разобрать вход в целое число с int

x = int(input("What is x?"))
0
Ewanziak

Многим нравится делать int(input("etc")), но если вы введете строку, это вызовет ошибку.

Что мне нравится делать, это:

s = input("integer: ")
integer = int(s)

Теперь используйте целое число для любой цели!

Плюс, если s - строка, это не вызывает ошибку !!!

По крайней мере, не сразу.

0
user11093202