2013-06-24 7 views
2

모두왜 내 재귀 함수가 "None"을 반환합니까?

사전 중 파이썬으로 사전 목록을 가지고 있습니다. 이것은 부모 - 자식 관계를 나타냅니다. 주어진 한 아이, 나는 부모님을 돌려주고 싶습니다. 당신이 "하나", "오", "이"이 아이 "세"어린이 "이"을 가지고 볼 수 있듯이 "네", "세"

tree = { u'one' : [ { u'two' : [ { u'three' : [] }, { u'four' : [] } ] }, { u'five' : [ { u'six' : [] } ] } ] } 

: 여기

내 모음입니다 자녀가없는 등등.

def find_parent(search_term,collection,parent=None): 
    if isinstance(collection,dict): 
    for key,value in collection.iteritems(): 
     if key.lower() == search_term.lower(): 
     print "the parent of %s is %s" % (key,parent) 
     return parent 
     if isinstance(value,list): 
     for v in value: 
      find_parent(search_term,v,key) 

my_child = "two" 
my_parent = find_parent(my_child,tree) 

그 함수의 인쇄 문은 항상 올바른 값을 인쇄합니다

다음 코드는 올바르게 지정된 아이의 부모를 밖으로 작동합니다. 하지만 my_parent에 액세스하려고하면 해당 값은 항상 "없음"입니다. 뭔가가 여기에서 벗어나야합니다. 나는 그것을 고치는 법을 고칠 수 없다.

감사합니다.

+2

가 "find_parent"재귀 호출에는 "반환"없습니다. – Sailesh

답변

4

당신은 재귀 호출 값이 너무 반환해야합니다. return

데모 추가 :

>>> def find_parent(search_term,collection,parent=None): 
... if isinstance(collection,dict): 
...  for key,value in collection.iteritems(): 
...  if key.lower() == search_term.lower(): 
...   print "the parent of %s is %s" % (key,parent) 
...   return parent 
...  if isinstance(value,list): 
...   for v in value: 
...   parent = find_parent(search_term,v,key) 
...   if parent is not None: return parent 
... 
>>> my_child = "two" 
>>> tree = { u'one' : [ { u'two' : [ { u'three' : [] }, { u'four' : [] } ] }, { u'five' : [ { u'six' : [] } ] } ] } 
>>> find_parent(my_child,tree) 
the parent of two is one 
u'one' 
+0

첫 번째 반복에서'return'을하면'for' 루프의 핵심은 무엇입니까? –

+0

@Newb :별로 중요하지 않은 점; 조정. –

3

find_parent(search_term,v,key)을 재귀 호출하지만 반환 값은 무시합니다. 좋은 파이썬 IDE를 찾고 디버깅 기능을 사용하는 방법을 배우는 것이 좋습니다. 이것은 크게 당신이 같은 논리 오류를 추적하는 데 도움이됩니다. return 당신이 폐기, 무시, 재귀 검색 반환 값없이

if isinstance(value,list): 
    for v in value: 
     parent = find_parent(search_term,v,key) 
     if parent is not None: return parent 

:

관련 문제