尝试使用嵌套函数搜索后代,但遇到错误

时间:2019-02-06 10:45:27

标签: python python-3.x recursion

我有两个类,它们的对象分别包含有关一个人和一个家庭的信息。如果给定的人是后代,则人类中有一个函数应返回true。我可以找到答案,但是在进行了几次嵌套函数调用后,如何返回它的值我感到茫然。

这是我的两个函数,分别在不同的类中

最初被调用以查看后代是否存在的函数。如果存在,我希望它返回true。

def checkIfDesc(self, person):
    for family in self.marriages:
        return families[family].famDescendant(person)

另一个类的函数,其中包含有关家庭的信息。即孩子们。

def famDescendant(self, person):
    for child in self.children:
        if person == child:
           return True
        else:
            return persons[child].checkIfDesc(person)

现在,我认为我的问题出在checkIfDesc函数及其返回语句之内。如果在第一次迭代中找不到后代,它将停止搜索。如果我删除return语句并基本上只是遍历所有家庭,那么从输出中可以看到我输入了person == child语句。

任何帮助或提示都将不胜感激。

2 个答案:

答案 0 :(得分:1)

此功能

def checkIfDesc(self, person):
    for family in self.marriages:
        return families[family].famDescendant(person)
正如您所发现的,

不会做您想要的事情,因为如果self有多次婚姻,并且person不是第一次婚姻的后代,则该函数将返回{{1 }},而无需检查其他婚姻。您可以这样做:

False

一旦找到后代,它将立即停止检查。

答案 1 :(得分:0)

通过实现以下更改来解决:

def checkIfDesc(self, person):
return any(families[family].famDescendant(person) for family in self.marriages)

def famDescendant(self, person):
    for child in self.children:
        if person == child:
           return True
        else:
            if (persons[child].checkIfDesc(person))
                return True
            else:
                continue: