如何将输入读取为数字?

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

(注:在Python 2。x使用raw_input()。在Python 3中。x使用input()raw_input()在Python 3.x中被重命名为input())

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
1048923 次浏览

解决方案

从Python 3开始,input返回一个字符串,你必须显式地将其转换为__abc1,使用int,如下所示

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

你可以接受任何进制的数字,并使用int函数将其直接转换为10进制,如下所示

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

Python 2和3之间的区别

总结

  • Python 2的input函数计算接收到的数据,隐式地将其转换为整数(阅读下一节以了解其含义),但Python 3的input函数不再这样做了。
  • Python 2与Python 3的input等价的是raw_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是由220调用组成的raw_input

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

在Python 2.x中使用input时应该小心。我在这个答案中解释了为什么在使用它时应该小心。

但是,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。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'>)

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

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

在Python 3中。x, raw_input被重命名为input和Python 2. x。x input被删除。

这意味着,就像Python 3中的raw_inputinput一样。X总是返回一个字符串对象。

要解决这个问题,你需要显式地将这些输入放入int中,使它们成为整数:

x = int(input("Enter a number: "))
y = int(input("Enter a 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:])

现在我使用num1num2作为整数。

多个问题要求在一行上输入多个整数。最好的方法是一行一行地输入整串数字,然后把它们分割成整数。下面是Python 3的版本:

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

你也可以使用列表推导式:

p = input().split("whatever the seperator is")

要将所有输入从string转换为int,我们执行以下操作:

x = [int(i) for i in p]
print(x, end=' ')

列表元素应该以直线形式打印。

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

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

如果数字已经知道,(比如2个整数),您可以使用

num1, num2 = map(int, raw_input().split())
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

转换为整数:

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

浮点数也类似:

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

虽然在你的例子中,int(input(...))在任何情况下都是有用的,但python-futurebuiltins.input值得考虑,因为它确保你的代码适用于Python2和3 而且禁用Python2的默认行为input,试图在输入数据类型方面变得“聪明”(builtins.input基本上只是表现得像raw_input)。

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

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