如何将输入读作数字?

时间:2013-12-08 03:08:16

标签: python python-3.x python-2.7 input int

为什么xy字符串而不是以下代码中的整数?

(注意:在Python 2.x中使用raw_input()。在Python 3.x中使用input()raw_input()在Python 3.x中重命名为input() < / p>

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

10 个答案:

答案 0 :(得分:272)

<强> TLDR

  • Python 3不会评估使用input函数收到的数据,但是Python 2的input函数会这样做(请阅读下一节以了解其含义)。
  • Python 2相当于Python 3的inputraw_input函数。

Python 2.x

有两个函数可以获取用户输入,称为inputraw_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视为由eval电话组成的raw_input

>>> data = eval(raw_input("Enter a number: "))
Enter a number: 5 + 17
>>> data, type(data)
(22, <type 'int'>)

注意:在Python 2.x中使用input时应该小心。我在this answer中解释了为什么要在使用它时要小心。

但是,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的input和Python 2.x的raw_input相似,而且{3.}}在Python 3.x中不可用。

raw_input

<强>解决方案

要回答您的问题,由于Python 3.x不评估和转换数据类型,您必须使用int显式转换为>>> 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'>) ,如此

int

您可以接受任何基数,并使用x = int(input("Enter a number: ")) y = int(input("Enter a number: ")) 函数将它们直接转换为base-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变量。

答案 1 :(得分:40)

在Python 3.x中,raw_input已重命名为input,并删除了Python 2.x input

这意味着,就像{3.}}一样,Python 3.x中的input总是返回一个字符串对象。

要解决此问题,您需要将这些输入显式放入整数int

raw_input

答案 2 :(得分:23)

对于单行中的多个整数,map可能更好。

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

如果已知数字(如2个整数),则可以使用

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

答案 3 :(得分:13)

input()(Python 3)和raw_input()(Python 2)总是返回字符串。使用int()显式将结果转换为整数。

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

答案 4 :(得分:10)

多个问题需要在单行上输入几个整数。最好的方法是将整个数字串输入一行,然后将它们拆分为整数。这是一个Python 3版本:

a = []
p = input()
p = p.split()      
for i in p:
    a.append(int(i))

答案 5 :(得分:6)

转换为整数:

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

类似于浮点数:

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

答案 6 :(得分:3)

我在解决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作为整数。希望这会有所帮助。

答案 7 :(得分:3)

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

答案 8 :(得分:2)

虽然在您的示例中,int(input(...))在任何情况下都可以解决问题,python-future builtins.input值得考虑,因为这样可以确保您的代码适用于Python 2和3 禁用Python2的input的默认行为,试图成为&#34;聪明的&#34;关于输入数据类型(builtins.input基本上只是表现得像raw_input)。

答案 9 :(得分:2)

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

for循环应运行'n'次。第二个“ n”是数组的长度。 最后一条语句将整数映射到列表,并以空格分隔的形式接受输入。 您还可以在for循环的末尾返回数组。