如何将输入读取为数字?

新手上路,请多包涵

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

(Note: in Python 2.x use raw_input() . In Python 3.x use input() . raw_input() was renamed to input() in Python 3.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

原文由 user2509848 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 410
2 个回答

解决方案

从 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 的 inputraw_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 视为 raw_inputeval 调用组成。

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

原文由 thefourtheye 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

这意味着,就像 raw_inputinput 在 Python 3.x 中总是返回一个字符串对象。

要解决此问题,您需要通过将这些输入放入 int 来明确地将这些输入转换为整数:

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

原文由 user2555451 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题