Python 3.x 用于计算指数的递归函数,无需“*”&引用;

Python 3.x 用于计算指数的递归函数,无需“*”&引用;,python-3.x,Python 3.x,编写一个函数power,该函数接受两个参数a和b,并计算提升到幂b的a。 例子: 功率(2,3)=8 如果输入是int或float以外的任何内容,则使用message参数引发TypeError必须是integer或float。 注意:不要使用** 下面的代码没有给出我想要的输出。请问怎么了 def power(a, b): if a == type(int) or a == type(float) and b == type(int) or b == type(float):

编写一个函数power,该函数接受两个参数a和b,并计算提升到幂b的a。 例子: 功率(2,3)=8 如果输入是int或float以外的任何内容,则使用message参数引发TypeError必须是integer或float。 注意:不要使用**

下面的代码没有给出我想要的输出。请问怎么了

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"

你的代码有很多问题

首先,你的类型检查是错误的(你越深入地研究它,错误就越大)。您可能应该使用
isinstance(a,(int,float))和isinstance(b,(int,float))
而不是现在使用的向后的东西。当前,您正在检查
a
b
是否等于类
type
(即
int
float
的类型)。表达式分组也有误,因为
运算符的绑定比
运算符的绑定更紧密(当您需要
(a或b)和(c或d)
时,您的代码执行
a或(b和c)或d

接下来,您将定义新函数来执行功耗计算,但您从未从外部
power
函数调用它们(因此它们永远不会执行任何操作)。如果要保留内部函数,需要在某处调用
返回电源(a,b)
。不过,您可以通过去掉内部函数,直接在一些嵌套循环中进行计算来简化一些事情。嵌套函数很少是必需的

在错误案例中,您也没有做您应该做的事情。您应该
引发
一个
类型错误
,而不是返回字符串

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


还有一点需要注意:问题陈述没有说明
b
(指数)是否总是一个整数,或者它是否可以有一个小数部分。处理分数指数比处理整数指数要困难得多,所以在花大量时间解决之前,我会问你的老师这是否是作业的一部分。您可能需要同时支持
int
float
类型,但即使
b
是一个float,它仍然是一个整数。

因此您不能使用
*
**
?如果输出错误,您需要调试它。您定义了3个内部函数。哪个返回了错误的结果?它没有通过函数运行的if条件检查应该是
if type(a)=type(int)
不是吗?一个数字不等于一个类型。仍然是相同的结果谢谢!将使用*作为另一个版本。但要纠正上述代码;在函数中加入“返回功率(a,b)”时,我遇到了一些问题。您可能希望它位于
else
之上,与内部函数的
def
语句处于相同的缩进级别。内部的
power
函数与外部函数使用相同的名称,这是相当尴尬的,但这并不是一个会阻止代码运行的问题(只是看起来你在做递归,而实际上你没有)。更正后,它工作得很好,你非常出色。