数字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
答案 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)
存在多余行的原因是什么?
答案 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' 的每一个倍数