如何将输入读作数字?

2024-04-25 21:20:04 发布

您现在位置:Python中文网/ 问答频道 /正文

为什么在下面的代码中使用xy字符串而不是int?

(注意:在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

Tags: 字符串代码truenumberinputplayrawif
3条回答

对于一行中的多个整数,^{}可能更好。

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

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

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

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

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

要解决此问题,需要通过将这些输入放入^{}来显式地将它们转换为整数:

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

TLDR

  • Python 3不计算用input函数接收的数据,但Python 2的input函数计算(阅读下一节了解其含义)。
  • Python 2相当于Python 3的input函数。

Python 2.x

有两个函数可以获取用户输入,分别称为^{}^{}。它们之间的区别是,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

>>> 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的^{}和Python 2.x的raw_input是相似的,并且raw_input在python3.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'>)

解决方案

要回答您的问题,因为Python 3.x不计算和转换数据类型,您必须显式地转换为ints,使用^{},如下所示

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

除此之外,你的程序可以稍微改变一下,像这样

while True:
    ...
    ...
    if input("Play again? ") == "no":
        break

通过使用breakwhile True,可以去掉play变量。

相关问题 更多 >