0

我正在尝试制作一个计算器,它可以执行 5 个过程,即用户输入的加、减、乘、除和平方根值。我已经完成了所有这些,但是当尝试使值!= float 和 int 时,错误出现在输入值为 float 和 int 时...我尝试了 value == str 然后出现错误,但即使这样也行不通...有人帮帮我吗?

例如

if value[0] != 'float' or value[0] != 'int' or value[1] != 'float' or value[1] != int':
    return 'the input value is not correct

我已经尝试了上面的两个,它似乎不起作用。因为程序无法在浮点数、整数和字符串之间读取。

如果我输入

calculator('+', 3, 4)

结果说错误.....

我之所以有 'print type(value[0], [1]) 是为了确保它们是针对不断发生的错误的类型。`

def calculator(sym, *t):
    value = tuple(t)
    n = len(value)

    print type(value[0])
    print type(value[1])

    if value[0] != 'float' or value[0] != 'int' or value[1] != 'float' or value[1] != int':
        return 'the input value is not correct.'
    else:
        if sym == '+':
            if len(value) != 2:
                return 'The input value is not correct.'
            else:
                return float(value[0] + value[1])
        elif sym == '-':
            if len(value) != 2:
                return 'The input value is not correct.'
            else:
                return float(value[0] - value[1])
        elif sym == '/':
            if len(value) != 2:
                return 'The input value is not correct.'
            elif value[1] == 0:
                return 'The input value is not correct.'
            else:
                return float(value[0] / value[1])
        elif sym == '*':
            if len(value) != 2:
                return 'The input value is not correct.'
            else:
                return float(value[0] * value[1])
        elif sym == 'sqrt':
            if len(value) != 1:
                return 'The input value is not correct.'
            elif value[0] < 0:
                return 'The input value is not correct.'
            else:
                return value[0] ** 0.5
        else:
            return 'The input value is not correct.'

`

4

2 回答 2

4

用于isinstance检查类型:

>>> isinstance(1, int)
True
>>> isinstance(1, float)
False
>>> isinstance('str', int)
False

您可以使用numbers.Number匹配任何类型的数字对象:

>>> import numbers
>>> isinstance(2, numbers.Number)
True
>>> isinstance(2.0, numbers.Number)
True
于 2014-05-07T14:27:06.073 回答
1

您正在尝试将值与字符串进行比较,而不是类型。使用该isinstance()函数来测试类型,它接受一个类型的元组:

if not (isinstance(value[0], (int, float)) and isinstance(value[1], (int, float))):

请注意,floatandint是这里的名称,而不是字符串文字。它们指的是内置类型对象。

于 2014-05-07T14:27:28.073 回答