2016-05-10 3 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

Пожалуйста реорганизовать с помощью кода углублений. –

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

Вы можете также использовать pprint встроенную библиотеку довольно-печать объектов

Смежные вопросы