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

标签 python python-3.x python-2.7 input int

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

(注意:在 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 3 起,input 返回一个字符串,您必须将其显式转换为 int,其中 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

有两个函数可以获取用户输入,名为 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 视为由 eval 组成的 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 的 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'>)

关于python - 如何将输入读取为数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57928583/

相关文章:

python - 将 numpy.random.get_state() 写入文件

python - 有没有办法使用 cv2.approxPolyDP 来近似开放曲线?

python - 为什么 Python 2 在使用 "import ... as ..."时尝试获取模块作为包属性?

string - 在Python中将多个句子组合成一个文本字符串

python - 如何将不完整和 BC 维基数据日期转换为时间戳?

python - 打印字典保存到文件中,然后复制到py文件中使用?

python - 计算数据帧尾部值的序列

python-2.7 - Python - 如何在一行上显示更新值而不是向下滚动屏幕

python - 如何使用 Python 替换字符串中的成对字符

python - 使用 Python 3.5 的 Rodeo 中的 "Unable to execute"消息