首页 > 解决方案 > isinstance() 函数是否不足以检测整数和浮点数?

问题描述

我正在制作一个非常基本的计算器作为我的第一个项目(我正在学习 Python,并且想要一些东西来展示我到目前为止所学的东西),并且现在它运行良好。

就像现在一样,我有一个函数来验证用户输入,以便代码只接受数字和小数点,并将输入作为要计算的浮点值返回。

但是,我想让代码可以识别用户输入的是整数还是浮点值,这样“2+2”之类的简单操作就不会返回浮点“4.0”结果,并且只是一个“4”。

我现在工作的功能如下:

def valid_num():
    number = ''
    valid = True
    while valid:
        try:
            number = float(input('───→ '))
            break
        except ValueError:
            print('')
            print('Invalid input (numbers and decimal points only).')
    return number

为了能够区分整数和浮点值,我查找了方法并找到了 isinstance() 函数,我可能没有正确应用它......这是我正在尝试使用的函数:

def valid_num():
    number = ''
    valid = True
    while valid:
        number = input('───→ ')
        check_int = isinstance(number, int)
        if check_int:
            number = int(number)
            break
        check_float = isinstance(number, float)
        if check_float:
            number = float(number)
            break
        if not check_int and not check_float:
            print('Invalid input (numbers and decimal points only).')
    return number

抱歉,如果我没有看到明显的错误,我才刚刚开始编写代码...在此先感谢您提供的任何帮助 =D

标签: pythonfloating-pointintegercalculatorisinstance

解决方案


正如@tim-roberts 所指出的,isinstance(number, int)检查 的类型number,它是一个字符串。

要区分整数和浮点数,您有几个选择:

  • 尝试将其转换为int,如果失败尝试转换为float; 这将使用一对try/except子句。

  • 将输入验证为文本,检查它是否遵循您为计算器设置的规则,可能使用正则表达式;这会让您积极断言它符合您的期望,而不是intandfloat函数接受的任何内容。

  • 您也可以在float(或Decimal)中始终工作,然后转换4.04输出;这意味着您还将为“0.5 * 8”获得“4”(这可能比获得“4.0”更好或更差;这取决于您的用户体验设计)。


推荐阅读