2016-05-10 6 views
1

Neu bei Python. Lernen, eine Funktion zu erstellen, die eine Liste von Listen ergibt ... zum Beispiel etwas, das einen Stammbaum darstellen kann. Hier ist, was ich kam mit:Erstellen einer Liste von Listen für den Stammbaum

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) 

scheint zu funktionieren ...

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

... aber führt unnötige Klammern und Druckausgaben.

Irgendwelche Vorschläge für eine bessere Umsetzung?

Wird als nächstes an einer Klassenstruktur arbeiten.

+0

Bitte Refactoring Code Einbuchtungen verwenden. –

+0

Meinen Sie, dass Sie die Art ändern möchten, wie die Liste gedruckt wird? – direprobs

+0

Nicht wirklich. Zusätzlich zu dem Endergebnis, das ich oben eingegeben habe, druckt die Funktion viele Zwischenschritte. Zum Beispiel: ['f', [['j'], ['k']]]] ['c', [['f', [['j'], ['k']]]]] ] – NoPayn

Antwort

0

So können Sie nur das Endergebnis drucken. Ich habe auch einige andere Dinge vereinfacht, um es ein wenig klarer zu machen.

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

Ein einfacher Ansatz, ohne den Code zu brechen:

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)) 

Sie auch die Verwendung von pprint integrierte Bibliothek machen könnte Pretty-Print-Objekte

Verwandte Themen