0

我有这个小函数,它接受两个整数ab检查是否a提升b到某个指数。这是代码。

def is_power(a,b):

    if not a%b==0:
        return a%b==0

    elif a/b==1:
       return a/b==1

    else:
        a = a/b
        is_power(a,b)

print is_power(,) 

None问题是无论我输入什么,这总是返回。

但是如果我用打印替换所有返回,那么它们会给出正确的结果,即Trueor False

def is_power(a,b):

    if not a%b==0:
        print a%b==0

    elif a/b==1:
       print a/b==1

    else:
        a = a/b
        is_power(a,b)

is_power(,) 

为什么会这样?这可能是一个菜鸟问题,但我仍然想不出来。谢谢

4

2 回答 2

8

您忽略了递归调用的返回值,在return此处添加:

else:
    a = a/b
    return is_power(a,b)

如果没有return那里的语句,您的函数只会结束并返回None。否则将忽略递归调用的返回值。

使用该return语句,您的代码可以工作:

>>> def is_power(a,b):
...     if not a%b==0:
...         return a%b==0
...     elif a/b==1:
...        return a/b==1
...     else:
...         a = a/b
...         return is_power(a, b)
... 
>>> print is_power(10, 3)
False
>>> print is_power(8, 2)
True
于 2013-07-04T14:54:34.657 回答
5

您忘记返回最后一个 else 子句。

于 2013-07-04T14:55:36.737 回答