好的,一个来自assignment的问题说,要创建一个有序的双向链接list...such,每个名称按字典顺序排列较小的对象都位于相同名称的Dictionary...also对象中的其他One...Like名称之前,可以按任何顺序排列...
要链接两个对象,我有setBefore()和setAfter()方法...我已经这样做了,much...but仍然不知道我在哪里做wrong..may,你们的一些指导可以帮助我…
atMe是已经存在于双向链表中的对象,而newFrob是要插入的对象...
def insert(atMe, newFrob):
if newFrob.myName() < atMe.myName():
if atMe.getBefore() == None:
atMe.setBefore(newFrob)
newFrob.setAfter(atMe)
elif atMe.getBefore().myName()<newFrob.myName():
atMe.getBefore().setAfter(newFrob)
newFrob.setBefore(atMe.getBefore)
atMe.setBefore(newFrob)
newFrob.setAfter(atMe)
else:
insert(atMe.getBefore(),newFrob)
elif newFrob.myName() > atMe.myName():
if atMe.getAfter() == None:
atMe.setAfter(newFrob)
newFrob.setBefore(atMe)
elif atMe.getAfter().myName()>newFrob.myName():
atMe.getAfter().setBefore(newFrob)
newFrob.setAfter(atMe.getAfter)
atMe.setAfter(newFrob)
newFrob.setBefore(atMe)
else:
insert(atMe.getAfter(),newFrob)
elif newFrob.myName()==atMe.myName():
if atMe.getAfter() != None:
newFrob.setAfter(atMe.getAfter())
newFrob.setBefore(atMe)
if atMe.getAfter() != None:
atMe.getAfter().setBefore(newFrob)
atMe.setAfter(newFrob)这是将要使用的Frob类。
class Frob(object):
def __init__(self, name):
self.name = name
self.before = None
self.after = None
def setBefore(self, before):
self.before = before
def setAfter(self, after):
self.after = after
def getBefore(self):
return self.before
def getAfter(self):
return self.after
def myName(self):
return self.name其中之前和之后是指向双向链表中的左对象和右对象的链接...此类中的对象将被插入到双向链表中...
示例:
a=Frob('foo')
b=Frob('bar')
c=Frob('frob')
d=Frob('code')
code output
insert(a,b) bar->foo
insert(a,c) bar->foo->frob
insert(b,d) bar->code->foo->frob现在假设
code output
insert(b,Frob('code')) bar->code->code->foo->frob发布于 2013-01-14 23:43:13
问题出在这条线上(当你向另一个方向移动时,也是一个等价的问题):
newFrob.setBefore(atMe.getBefore)atMe.getBefore后面缺少一组圆括号,因此最终要将绑定的方法本身传递给newFrob.setBefore,而不是传递该方法返回的值。这是一个很容易犯的打字错误,所以我不会因为在你的作业中错过它而感到太糟糕。
我通过尝试以下插入序列并检查值发现了这个错误(我已经总结了使用注释可以正常工作的值):
>>> a = Frob("a")
>>> b = Frob("b")
>>> c = Frob("c")
>>> d = Frob("d")
>>> insert(a, b) # list is a<->b
>>> insert(a, d) # list is a<->b<->d
>>> insert(a, c) # list is a<->b<->c->?
>>> c.getAfter()
<bound method Frob.getAfter of <__main__.Frob object at 0x000000000318EBA8>>最后提到的对象是b,它使我找到了代码中的错误。
https://stackoverflow.com/questions/14320257
复制相似问题