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


Почему этот код не вводит целые числа? Все в интернете говорит, чтобы использовать 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
14 212

14 ответов:

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.х input и Python 2.х 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С int, такой

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

вы можете принимать номера любой базы и конвертировать их непосредственно в базу-10 с помощью

В 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 не нужно/использовать точки с запятой для завершения строк. Так что, имея их ничего не делает положительный.

для нескольких целых чисел в одной строке,карта может быть лучше.

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

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

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

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

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

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

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

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

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

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

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

my_decimalnumber = float(input("enter the number"))

принимая int в качестве входных данных в python: мы берем простой строковый ввод с помощью:

input()

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

int(input())

Python 3.х input() функция, которая возвращает всегда string.So вы должны преобразовать в 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: "))

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

x=int(input("Enter the number"))

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

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

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

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

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

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

n=int(input())
for i in range(n):
    n=input()
    n=int(n)
    arr1=list(map(int,input().split()))

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