【发布时间】:2014-02-06 15:49:28
【问题描述】:
我正在尝试练习 OOP 和递归,但遇到了一些麻烦。我认为它的递归方面是正确的,但我构建类的方式是错误的。
应该如何工作:
它应该从 6 中减去 1,直到 x = 0。每次将 1 添加到索引。当 x 等于 0 时,函数应该返回索引。
哪里出错了:
下面的代码说我有一个错误,因为 divide 接受三个参数,而我只提供了两个。但我认为 self 并不是一个真正的论点。这只是必须在课堂上完成的事情。
如何使以下代码按预期工作?
class Division(object):
def __init__(self, x, y):
self.index = 0
self.x = x
self.y = y
def divide(self, x, y):
self.index += 1
if self.x <= 0:
return self.index
return divide(self.x-self.y, self.y)
print(Division.divide(6,1))
编辑(修订代码):
现在我收到一个没有定义除法的错误?
class Division(object):
def __init__(self):
self.index = 0
def divide(self, x, y):
self.index += 1
if x <= 0:
return self.index
return divide(x-y, y)
print(Division().divide(6,1))
第二次编辑: 我想我想通了。我不得不在divide方法递归返回上再次添加创建Division的实例。我的输出是错误的。这就是说 self.index 等于一。可能是因为当我创建类的新实例时,索引设置为 0。我该如何克服这个问题?
最终代码:
class Division(object):
def __init__(self):
self.index = 0
def divide(self, x, y):
self.index += 1
if x <= y:
return self.index
return self.divide(x-y, y)
print(Division().divide(6,1))
【问题讨论】:
-
Division(1, 2).divide(6,1),你需要先创建一个实例。 -
请注意,您没有在
divide中使用x和y(不是根本原因,只是对审查设计的提示)。 -
你必须调用
self.divide...没有全局divide方法... -
旁注经验法则:当你的类有两个方法时,其中一个是
__init__,你不应该使用一个类。 -
@JoranBeasley 谢谢。这让我得到了我想要的输出。
标签: python oop loops recursion