判断a是否是b的幂
我现在在使用singpath.com来练习我的Python,但我遇到了一个问题:
一个数字a如果能被b整除,并且a/b也是b的幂,那么我们就说a是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
上面是我的解决方案,但系统提示我需要让我的解决方案更通用。 有人能告诉我我的解决方案哪里出问题了吗?
16 个回答
你只是在检查前两个条件:a 能整除 b,和 a/b 也能整除 b。其实 a 可能等于 b 的三次方、四次方(或者一般情况下是 b 的 n 次方),所以真正的解决办法可能需要用到递归或者循环。
在编程中,有时候我们会遇到一些问题,想要找到解决办法。比如在StackOverflow这个网站上,很多人会提问,寻求帮助。这里的内容通常是关于编程的各种问题和解决方案。
有些问题可能涉及到代码的具体写法,或者是某个功能如何实现。对于初学者来说,理解这些内容可能会有点困难,因为里面可能会用到一些专业术语或者复杂的概念。
不过,没关系!只要我们一步一步来,慢慢理解,就能掌握这些知识。记住,编程就像学习一种新的语言,刚开始可能会觉得难,但只要多练习,就会变得越来越容易。
def is_power(a,b):
'''this program checks if number1 is a power of number2'''
if (a<b): # lesser number isn't a power of a greater number
return False
elif (b==0) or (b==1) : # Exception cases
return False
elif a%b == 0 and is_power(a/b, b) == True: # Condition check for is_power (Recursion!)
return True
else:
return False
你原来的代码之所以不工作,原因在于:你只是检查了 (c%b) == 0)
,也就是 (a/b) 能被 b 整除
,这个条件比 a/b 是 b 的幂
要弱得多。
当你想解决这样的问题时,应该先从简单的情况入手。在这个例子中,有两个简单的情况:is_power(x,x)
和 is_power(1,x)
,这两种情况下答案都是 True
,因为 x**1==x
和 x**0==1
。
一旦你处理了这些简单情况,就只需要写出定义的其余部分。写出 (a 能被 b 整除) 且 (a/b 是 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>
剩下唯一的问题是如何判断 <a/b 是 b 的幂>
。最简单的方法是使用 is_power
这个函数本身,这种方法叫做递归。