Warm tip: This article is reproduced from serverfault.com, please click

python-如何将输入读取为数字?

(python - How can I read inputs as numbers?)

发布于 2013-12-08 03:08:15

为什么在下面的代码中使用xandy字符串代替ints?

(注意:在Python 2.x中使用raw_input()。在Python 3.x中使用input()在Python 3.x中raw_input()被重命名为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
Questioner
user2509848
Viewed
0
9,915 2021-01-28 21:45:16

解决方案

因为Python 3,input返回,你必须明确地转换为字符串intS,与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函数不再这样做。
  • inputraw_input函数相当于Python 2的Python 2

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视为raw_inputeval呼叫组成的

>>> 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.xinput和Python 2.xraw_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'>)