Python中如何将输入数据转换为数字?

发布于 2021-02-02 23:25:01

Python中如何将输入数据转换为数字?

关注者
0
被浏览
922
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    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.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 3.x不会评估和转换数据类型,因此必须使用显式转换为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:"))
    

    除此之外,你的程序可以像这样进行一些更改

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

    你可以使用break和摆脱变量while True



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看