【发布时间】:2020-03-12 07:37:55
【问题描述】:
让我们使用元组和列表来表示家谱。 每个人都表示为一个元组。元组的第一个元素是这个人的名字。元组的第二个元素是一个包含这个人的孩子的列表。每个孩子都表示为一个元组本身。如果一个人没有孩子,他/她的孩子列表是空的。 例如,如果 Mary 没有孩子,则表示为 ('Mary', [])。 如果 Jane 有两个名为 Nick 和 Wendy 的孩子,而 Nick 和 Wendy 都没有孩子,则 Jane 表示为 ('Jane', [('Nick', []), ('Wendy', [])])。 如果 Mary 和 Jane 是 Frank 的孩子,而 Frank 没有其他孩子,则 Frank 表示为 ('Frank', [('Mary', []), ('Jane', [('Nick', [ ]), ('温迪', [])])])。 下图显示了他们的关系:
定义一个名为get_family_members() 的函数,该函数接受一个名为 head 的人的表示,该人表示一个家谱的头部。头部可能有几个孩子、孙子、曾孙等。该函数以列表的形式返回此人家庭的所有成员(包括他/她自己)。成员应按代排序。换句话说,第 n 代的人应该总是出现在第 (n-1) 代的人之后。此外,同一代人应根据他们在原始列表中的顺序进行排序。例如,如果 Nick 和 Wendy 属于同一代,并且 Nick 在原始列表中出现在 Wendy 之前,那么 Nick 在返回列表中应该出现在 Wendy 之前。
这是我所做的:
def get_family_members(head):
# modify the code below
new_dict = {}
return_list = []
new_list = head
#append first ele in
return_list.append(new_list[0])
new_dict[new_list[0]] = new_list[1]
# new_list = new_list[1]
key = new_list[0]
print(new_dict[key])
end = False
j = 0
if new_dict[key] != []:
while end == False:
i = 0
for tuple1 in new_dict[key]:
if tuple1[i] not in return_list:
return_list.append(tuple1[i])
new_dict[tuple1[i]] = tuple1[i+1]
print("element",tuple1[i])
print("new list",new_dict[tuple1[i]])
print("return list",return_list)
if tuple1[i+1] != []:
key = tuple1[i]
else:
end = True
return return_list
print("key",key)
return [key]
但是当我使用这个测试用例时似乎是错误的:
print("Test Case #1:")
print()
family_head = ('Mary', [])
result_list = get_family_members(family_head)
print("Expected: ['Mary']")
print("Actual : " + str(result_list))
print()
print("Expected type of returned value: <class 'list'>")
print("Actual type of returned value : " + str(type(result_list)))
print()
print("====================")
print()
# Test Case 2:
print("Test Case #2:")
print()
family_head = ('Jane', [('Nick', []), ('Wendy', [])])
result_list = get_family_members(family_head)
print("Expected: ['Jane', 'Nick', 'Wendy']")
print("Actual : " + str(result_list))
print()
print("====================")
print()
# Test Case 3:
print("Test Case #3:")
print()
family_head = ('Frank', [('Mary', []), ('Jane', [('Nick', [])])])
result_list = get_family_members(family_head)
print("Expected: ['Frank', 'Mary', 'Jane', 'Nick']")
print("Actual : " + str(result_list))
print()
print("====================")
print()
# Test Case 4:
print("Test Case #4:")
print()
family_head = ('Alan', [('Bob', [('Chris', [])]), ('Eric', [])])
result_list = get_family_members(family_head)
print("Expected: ['Alan', 'Bob', 'Eric', 'Chris']")
print("Actual : " + str(result_list))
print()
print("====================")
print()
# Test Case 5:
print("Test Case #5:")
print()
family_head = ('Alan', [('Bob', [('Chris', []), ('Debbie', [('Cindy', [])])]), ('Eric', [('Dan', []), ('Fanny', [('George', [])])]), ('Hannah', [])])
result_list = get_family_members(family_head)
print("Expected: ['Alan', 'Bob', 'Eric', 'Hannah', 'Chris', 'Debbie', 'Dan', 'Fanny', 'Cindy', 'George']")
print("Actual : " + str(result_list))
print()
print("====================")
print()
【问题讨论】:
标签: python list tuples family-tree