2016-05-10 15 views
1

pythonの新機能リストを作成する関数を作成することを学ぶ...例えば、家系を表すことができるものなど。 ...ファミリーツリーのリストの作成方法

def familytree(root): 
     many = int(input('How many children does "' + root[0] + '" have? ')) 
     if many > 0: 
      root.append([[] for y in range(many)]) 
      z = root[1] 
      for j in range(many): 
       name = [input("Give name of one of " + root[0] + "'s children?")] 
       z[j] = name 
       familytree(name) 
     print(root) 

が動作しているようです

['A', [['B', [['D', [['G'], ['H']]], ['E', [['I']]]]], ['C', [['F', [['J'], ['K']]]]]]] 

...しかし、不必要なブラケットと印刷出力結果:ここに私が思い付いたものです。

実装を改善するためのアドバイスはありますか?

次にクラス構造で動作します。

+0

オブジェクトコードのインデントを使用してリファクタリングしてくださいするpprintを利用するかもしれません。 –

+0

リストの印刷方法を変更したいのですか? – direprobs

+0

本当にありません。さらに、上記で入力した最終結果は、この関数は多くの中間ステップを出力します。例: ['f'、[['j']、['k']]] ['c'、[['f'、[['j']、['k']]]] ] – NoPayn

答えて

0

最終結果のみを印刷する方法は次のとおりです。私はもう少し簡潔にするために他のものを単純化しました。

def familytree(root): 
    many = int(input('How many children does "' + root[0] + '" have? ')) 
    if many > 0: 
     z = [] 
     root.append(z) 
     for j in range(many): 
      name = [input("Give name of one of " + root[0] + "'s children?")] 
      z.append(name) 
      familytree(name) 


root = ['A'] 
familytree(root) 
print(root) 
0

あなたのコードを壊すことなく、一つの簡単な方法:

root = ['A'] 
def familytree(root): 
    many = int(input('How many children does "' + root[0] + '" have? ')) 
    if many > 0: 
     root.extend([] for y in range(many)) 
     for j in root[1:]: 
      name = input("Give name of one of " + root[0] + "'s children? ") 
      j.append(name) 
      familytree(j) 

print(familytree(root)) 

また、内蔵のライブラリプリティプリントが

関連する問題