如何将输入读取为数字?

问题描述 投票:0回答:10

为什么在下面的代码中是

x
y
字符串而不是整数?

(注意:在 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
python python-3.x python-2.7 input int
10个回答
391
投票

解决方案

自 Python 3 起,

input
返回一个字符串,您必须将其显式转换为
int
s,使用
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

有两个函数可以获取用户输入,称为

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'>)

注意: 在 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
相似,
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'>)

53
投票

在 Python 3.x 中,

raw_input
被重命名为
input
并且 Python 2.x
input
被删除。

这意味着,就像

raw_input
一样,Python 3.x中的
input
总是返回一个字符串对象。

要解决此问题,您需要通过将这些输入放入

int
:

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

34
投票

对于一行中的多个整数,

map
可能会更好。

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

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

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

19
投票

input()
(Python 3)和
raw_input()
(Python 2)总是 返回字符串。使用
int()
.

将结果显式转换为整数
x = int(input("Enter a number: "))
y = int(input("Enter a number: "))

13
投票

多个问题需要在一行中输入多个整数。最好的方法是将整串数字逐行输入,然后拆分成整数。这是 Python 3 版本:

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

您还可以使用列表理解:

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

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

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

列表元素应以直线打印。


7
投票

转换为整数:

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

与浮点数类似:

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

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

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


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
作为整数。


2
投票
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

1
投票

虽然在您的示例中,

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

© www.soinside.com 2019 - 2024. All rights reserved.