找出a是否是b的幂

Joh*_*ohn 6 python

我目前正在使用singpath.com来练习我的python,但是我遇到了一个问题:

数字a是b的幂,如果它可被b整除,a/b是b的幂.编写一个名为is_power的函数,它接受参数a和b,如果a是b的幂,则返回True.

def is_power(a,b):
    c = a/b
    if (((a%b) == 0) and ((c%b) == 0)):
        return True
    else:
        return False 
Run Code Online (Sandbox Code Playgroud)

以上是我的解决方案,但系统提示我概括我的解决方案.谁能告诉我我的解决方案有什么问题?

Joc*_*zel 8

您的原始代码不起作用的原因如下:您只需检查(c%b) == 0)aka (a/b) is divisible by b,这比a/b is a power of b定义的部分弱得多.

当你想要解决这样的问题时,你应该始终从琐碎的案例开始.在这种情况下有两种这样的情况:is_power(x,x)is_power(1,x)- 答案都是True,因为x**1==xx**0==1.

一旦涵盖了这些案例,您只需要记下定义的其余部分.编写代码(a is divisible by b) and (a/b is a power of b)并将它们放在一起.

最终的功能如下所示:

def is_power(a,b):
    if <trivial case 1> or <trivial case 2>:
        return True
    # its a recursive definition so you have to use `is_power` here
    return <a is divisible by b> and <a/b is a power of b>
Run Code Online (Sandbox Code Playgroud)

剩下的唯一问题是如何回答<a/b is a power of b>.最简单的方法是使用函数is_power本身 - 这称为递归.


Kei*_*win 0

我不会说要概括它。我想说的是纠正它,因为它是不正确的。使用您的解决方案 is_power(12,2) 与 is_power(18,3) 一样返回 True。

我认为系统说要概括它的原因是它可能对某些测试用例正常工作,但对其他测试用例则不然。如果它以某种方式进行硬编码(例如,仅检查 2 的幂),那么它所适用的测试用例很可能恰好是它所适用的测试用例。