2017-12-02 4 views
0

私は特定の "深さ/レベル"までファミリツリーを出力する再帰関数に苦労しています。特定のレベルまでのファミリーツリーの印刷| Python 3

私はクラス「人」を定義していると、一人一人が、いくつかの子孫(複数可)を持っているので、言うことができます:

>>> george.children 
[<__main__.Person object at 0x000002C85FB45A58>] 
>>> george.name 
'George' 

そして、私は、各世代が4で分離されているような方法で家系図を印刷したいです空白、例えば:

>>> family_tree(george, level = 2) 
George 
    Michael 
     Juliet 
    Peter 
     Mary 

ジョージでレベル0、その後、彼の二人の息子は、あなたがどのようにこの使用して再帰を書くために、任意のアイデアを持っていてくださいくださいなど

、レベル1ですか?私は大いに感謝します。

答えて

0

再帰を使用できます。より深いレベルの再帰では、さらに4つのスペースを作成する必要があります。そのためには、すべての再帰呼び出しで増加する引数depthを渡すことができます。ここで

は、あなたがそれを行うことができる方法である:

# You'll have a class like this: 
class Person: 
    def __init__(self, name): 
     self.name = name 
     self.children = [] 
    def addChild(self, child): 
     self.children.append(child) 
     return self # to allow chaining 

# The function of interest: 
def family_tree(person, level = 2): 
    def recurse(person, depth): 
     if depth > level: return 
     print (" " * (4 * depth) + person.name) 
     for child in person.children: 
      recurse(child, depth+1) 
    recurse(person, 0) 

# Sample data 
george = Person("George").addChild(
    Person("Michael").addChild(
     Person("Juliet").addChild(
      Person("don't show me") 
     ) 
    ) 
).addChild(
    Person("Peter").addChild(
     Person("Mary") 
    ) 
) 

# Call the function 
family_tree(george) 
+0

はどうもありがとうございました!その深い議論は私の心にも来たものでしたが、私はそれを増やすことは決してできませんでした。今は正しくあり、魅力的です! – clifer4

+0

歓迎します;-) – trincot