isinstance() 函数是否不足以检测整数和浮点数?

Is isinstance() function not enough to detect integers and floats?

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

现在,我有一个功能来验证用户输入,这样代码只接受数字和小数点,并且return将输入作为要计算的浮点值。

不过,我想做到这一点,以便代码可以识别用户输入的是整数值还是浮点值,这样像“2+2”这样的简单操作就不会return 浮点数“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

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

要区分整数和浮点数,您有两种选择:

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

  • 将输入验证为文本,检查它是否符合您为计算器设置的规则,可能使用正则表达式;这会让你肯定地断言它符合你的期望,而不是 intfloat 函数接受的任何东西。

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