Python 如何将输入读取为数字?

Python 如何将输入读取为数字?,python,python-3.x,python-2.7,input,int,Python,Python 3.x,Python 2.7,Input,Int,为什么在下面的代码中是x和y字符串而不是int 注意:在Python2.x中,使用原始输入。在Python3.x中,使用输入。原始输入被重命名为Python3.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)

为什么在下面的代码中是x和y字符串而不是int

注意:在Python2.x中,使用原始输入。在Python3.x中,使用输入。原始输入被重命名为Python3.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
解决方案 从Python3开始,input返回一个字符串,您必须显式地将其转换为int,如下所示

x = int(input("Enter a number: "))
y = int(input("Enter a number: "))
>>> 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
您可以接受任意基数的数字,并使用int函数将其直接转换为base-10,如下所示

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

>>>数据=输入一个数字,2 输入一个数字:1234 回溯最近一次呼叫上次: 文件,第1行,在 ValueError:基为2的int的文本无效:“1234” 对于可以包含分数分量的值,类型应为float而不是int:

Python2和Python3之间的差异 总结

Python2的输入函数对接收到的数据进行求值,将其转换为整数,隐式地读取下一节以理解其含义,但Python3的输入函数不再这样做。 Python2相当于Python3的输入是raw_输入函数。 Python2.x

有两个函数用于获取用户输入,分别称为和。它们之间的区别在于,原始输入不计算数据,而是以字符串形式返回。但是,输入将评估您输入的内容,并返回评估结果。比如说,

>>> 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'>)
注意:在Python2.x中使用输入时应该小心。我解释了为什么一个人在使用它时要小心

但是,raw_输入不计算输入,而是以字符串的形式返回

>>> 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和原始输入Python 2始终返回字符串。使用int显式地将结果转换为整数

在Python3.x中,原始输入被重命名为输入,Python2.x输入被删除

这意味着,就像原始输入一样,在Python3.x中,总是返回字符串对象

要解决此问题,您需要将这些输入显式转换为整数,方法是将它们放入:


我在解决上的一个问题时遇到了一个获取整数输入的问题,其中两个整数(由空格分隔)应从一行中读取

虽然intinput对于单个整数就足够了,但我没有找到直接输入两个整数的方法。我试过这个:

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作为整数。希望这有帮助。

多个问题需要在一行中输入多个整数。最好的方法是将整串数字输入一行,然后将它们拆分为整数。以下是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=' ')

应以直线打印列表元素。

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

arr = map(int, raw_input().split())
如果数字是已知的,例如2个整数,则可以使用

num1, num2 = map(int, raw_input().split())
转换为整数:

my_number = int(input("enter the number"))
类似地,对于浮点数:

my_decimalnumber = float(input("enter the number"))
而在您的示例中,intinput。。。在任何情况下,python future都值得考虑,因为这样可以确保您的代码同时适用于python 2和python 3,并禁用Python2的默认输入行为,试图巧妙地处理输入数据类型内置项。输入的行为基本上与原始输入一样

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

这看起来非常有趣。然而,当for循环退出时,我不是被破坏了吗?@hosch250当循环退出时,这里索引变量的值i仍然存在。我尝试了这一部分,它工作正常。对于这种输入操作,如果您知道将遇到多少整数,可以使用num1,num2=mapint,input.split,如果您不知道,可以使用nums=listmaint,input.split,比如一个函数或其他东西,这样我们就不需要在3.x中转换为int,而只需要显式转换为int???@shryanmehta eval可以工作,但除非你有紧迫的理由,否则不要这样做。@thefourtheye至少可以使用它。它没有eval的安全顾虑。
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"))
n=int(input())
for i in range(n):
    n=input()
    n=int(n)
    arr1=list(map(int,input().split()))