想想python练习6.4

时间:2017-12-24 10:48:01

标签: python

数字a是b的幂,如果它可被b整除,a / b是b的幂。编写一个名为is_power的函数,它接受参数a和b,如果a是b的幂,则返回True。注意:您将不得不考虑基本情况。 我找到了代码的和平,因为它是解决方案:

def is_power(a,b):
    if (a % b == 0):
        return True
        if (a/b == 1):
            return True
        else:
            (is_power (a/b, b) )
    else:
        return False

但我想有些线路不是必需的。这是我自己的代码:

def is_power(a,b):
    if (a % b == 0):
        return True
    else:
        return False
  1. 额外线条存在的原因是什么?
  2. 两个代码都不适用于浮点数,例如is_power(2.25,1.5)。两者都返回False。

9 个答案:

答案 0 :(得分:2)

要回答您问题的第 1 部分,我必须提醒您,这里的问题并不要求您检查 a 是否可以被 b 整除,而是要求您确定 'a' 是否可以表示为(+ve) 'b' 的指数,即 a = b^n

对于您问题的第 2 部分,请考虑下面的函数,因为它适用于整数和浮点输入。

def is_power(a,b):
    if a==b:
        return True

    elif (abs(a)>1 and abs(b)>1) or (abs(a)<1 and abs(b)<1):
        return is_power(a/b, b)       
    
    return False

第二个条件语句源于这样一个事实,即绝对值大于(或小于)1 的任何数字的 +ve 指数将始终大于(或小于)1。如果 'a' & 'b 的绝对值' 位于 1 的任一侧,那么你永远找不到一个 +ve 指数使得 a = b^n

上述函数还处理了 'a' 或 'b' 为 1 的情况。在这两种情况下,您都无法找到满足 a = b^n 的 +ve 指数 'n'。

答案 1 :(得分:1)

你的第二个代码不正确,以6和2为例,你的函数将返回true,但6不是2的幂。

def is_power(a, b):
    while a % b == 0:
        if a == b: return True
        a /= b
    return False

print(is_power(6, 2))
print(is_power(8, 2))

对于第二个例子,比较两个双精度是否相等通常是给定的数量,如给定的eps = 0.0000001 a == b =&gt; abs(a-b)&lt; eps。

答案 2 :(得分:0)

@mehdi maick感谢您的正确答案。这是递归版本,借助你的答案,我一直在寻找。

def is_power2(a, b):
if a % b == 0 :
    if a == b:
        return True
    else:
        return is_power(a/b, b)
return False

答案 3 :(得分:0)

  

存在多余行的原因是什么?

  • 该问题要求您考虑“极端案例”。代码“ if(a / b == 1)”的这一部分正在处理边缘情况。
  • 此外,该问题回答“如果a是b的幂,则为真”。通过删除循环的else部分,可以避免这种情况的发生。

答案 4 :(得分:0)

辅助功能

def is_divisible(a, b):
       if a % b == 0:
            return True

      else:   
         return False

主要功能

def is_power(a, b):   
 if a == b:   
      return True
 elif b == 1:   
      return False

 else:
     return is_divisible(a,b) and is_power(a/b, b)

测试案例

print("is_power({0},{1}) returns: {2} ".format(10,2,is_power(10,2)))
print("is_power({0},{1}) returns: {2} ".format(27,3,is_power(27,3)))
print("is_power({0},{1}) returns: {2} ".format(1,1,is_power(1,1)))
print("is_power({0},{1}) returns: {2} ".format(10,1,is_power(10,1)))
print("is_power({0},{1}) returns: {2} ".format(3,3,is_power(3,3)))

输出

is_power(10,2) returns: False
is_power(27,3) returns: True 
is_power(1,1) returns: True 
is_power(10,1) returns: False 
is_power(3,3) returns: True 

答案 5 :(得分:0)

通过使用return函数简单提及条件,我们可以使代码更加简洁。

由于条件本身是 boolean ,我们可以得到一个简单的 True False

def is_divisible(a,b):
    return a%b==0 and (a/b)%b==0
print(is_divisible(121,11))

答案 6 :(得分:0)

/*DEMO*/body{padding:3rem}.form-group{border:1px solid red}

答案 7 :(得分:0)

#with edge conditions and negative value of a and b.

def is_power (a,b): 
    if a==1 or a==b: #always true for power of 0, always true for power of 1 
        return True
    elif (a==0 or b==0 or  b==1) or  (b>a and b>0):
        return False
    else:
        if a%b == 0 and is_power (a/b,b):
            return True
        else:
            return False


Test Cases:
is_power(0, 0) returns:  True
is_power(1, 0) returns:  True
is_power(0, 1) returns:  False
is_power(1, 1) returns:  True
is_power(1, 2) returns:  True
is_power(2, 1) returns:  False
is_power(2, 2) returns:  True
is_power(3, 2) returns:  False
is_power(4, 2) returns:  True
is_power(5, 2) returns:  False
is_power(6, 2) returns:  False
is_power(7, 2) returns:  False
is_power(8, 2) returns:  True
is_power(9, 2) returns:  False
is_power(10, 2) returns:  False
is_power(-1, 0) returns:  False
is_power(-1, -1) returns:  True
is_power(1, -1) returns:  True
is_power(0, -1) returns:  False
is_power(-4, 2) returns:  False
is_power(-8, 2) returns:  False
is_power(4, -2) returns:  True
is_power(8, -2) returns:  False
is_power(-4, -2) returns:  False
is_power(-8, -2) returns:  True
is_power(-2, -2) returns:  True
is_power(-2, -4) returns:  False
is_power(-2, -8) returns:  False

答案 8 :(得分:0)

试试这个代码,但记住它只适用于整数而不适用于浮点数:

def is_power(a,b):
    if a==b:
        return True

    if a%b != 0:
        return False
    
    return is_power(a/b,b)

此外,您使用的代码不仅适用于指数,而且适用于 'b' 的每一个倍数