递归函数计算指数而不用“*”

时间:2017-04-07 19:10:55

标签: python-3.x

写一个接受两个参数a和b的函数幂,并计算一个上升到幂b。 例: 功率(2,3)= 8 使用消息引发TypeError如果输入是int或浮动的其他内容,则Argument必须是整数或浮点数。 注意:请勿使用**

下面的代码没有给我我想要的输出。请问有什么不对?

def power(a, b):
    if a == type(int) or a == type(float) and b == type(int) or b == type(float):
        def add(a, b):
            num = a
            for i in range(b):
                num += 1
            return num

        def multiply(a, b):
            num = 0
            for i in range(b):
                num = add(num, a)
            return num

        def power(a, b):
            num = 1
            for i in range(b):
                num = multiply(num, a)
            return num
    else:
        return "Argument must be integer or float"

1 个答案:

答案 0 :(得分:1)

您的代码存在许多问题。

首先,你的类型检查是分形错误的(你看起来越深入就会越来越错误)。您应该使用isinstance(a, (int, float)) and isinstance(b, (int, float))而不是现在的倒退资料。目前,您正在检查ab是否等于班级typeintfloat的类型)。您还有表达式分组错误,因为and运算符比or运算符绑定得更紧密(当您需要a or (b and c) or d时,代码执行(a or b) and (c or d)。)

接下来,您定义的新函数会执行功率计算,但您永远不会从外部power函数调用它们(因此它们永远不会执行任何操作)。如果要保留内部函数,则需要在某处进行return power(a, b)调用。然而,你可以通过摆脱内部函数并直接在一些嵌套循环中进行计算来简化一堆事情。嵌套函数很少需要。

在错误情况下,你也没有做你应该做的事情。你应该raise一个TypeError,而不是返回一个字符串。

最后,我认为你使整个问题变得比必要的复杂得多。您的作业说明不使用**,但我怀疑您仍然可以使用*+运算符。我只是在一个循环中进行一些乘法,而不是从头开始重新定义所有内容(由于add函数需要+=,因此甚至不起作用。)

进一步说明:问题陈述没有说明b(指数)是否总是一个整数,或者它是否可以有一个小数部分。处理小数指数比处理整数指数要困难得多,所以在花费大量时间尝试解决之前,我会问你的导师是否实际上是指派的一部分。您可能需要同时支持intfloat类型,但即使b是浮点数,它仍然是整数。