为什么python不返回布尔值

Mis*_*ito 0 python python-2.7

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

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(,) 
Run Code Online (Sandbox Code Playgroud)

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

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

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(,) 
Run Code Online (Sandbox Code Playgroud)

为什么会这样?这可能是一个菜鸟问题,但我仍然无法想到它.谢谢

Mar*_*ers 8

你忽略了递归调用的返回值,在return那里添加:

else:
    a = a/b
    return is_power(a,b)
Run Code Online (Sandbox Code Playgroud)

如果没有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
Run Code Online (Sandbox Code Playgroud)


Gam*_*iac 5

你忘了回到最后一个条款.