2012-03-27 4 views
0

나는 거의 내가 가진 특정 프로그램에 대한 코딩을 끝냈다. 나는 마지막 부분에 도움이 필요하다. 이 프로그램은 단어를 취해 하나의 문자를 변경하여 대상 단어와 더 유사하게 만듭니다. 변경된 단어는 내가 지정한 사전 내에 존재해야합니다.재귀 함수의 두 함수는 무엇입니까?

def changeling(word,target,steps): 
    holderlist=[] 
    i=0 
    if steps==0 and word!=target: 
     return None 

     return holderlist 
    if len(word)!=len(target): 
     return None 

    if steps!=-1: 
     for items in wordList: 
      if len(items)==len(word): 
       i=0 

       if items!=word: 
        for length in items: 


         if i==1: 


          if items[1]==target[1] and items[0]==word[0] and items[2:]==word[2:]: 
           if items==target: 
            print "Target Achieved" 


           holderlist.append(items) 
           flatten_result(holderlist,target) 



           holderlist.append(changeling(items,target,steps-1)) 


         elif i>0 and i<len(word)-1 and i!=1: 
          if items[i]==target[i] and items[0:i]==word[0:i] and items[i+1:]==word[i+1:]: 
           if items==target: 
            print "Target Achieved" 
           holderlist.append(items) 
           flatten_result(holderlist,target) 

           holderlist.append(changeling(items,target,steps-1)) 



         elif i==0: 
          if items[0]==target[0] and items[1:]==word[1:]: 
           if items==target: 
            print "Target Achieved" 
           holderlist.append(items) 
           flatten_result(holderlist,target) 

           holderlist.append(changeling(items,target,steps-1)) 



         elif i==len(word)-1: 
          if items[len(word)-1]==target[len(word)-1] and items[0:len(word)-1]==word[0:len(word)-1]: 
           if items==target: 
            print "Target Achieved" 

           holderlist.append(items) 

           holderlist.append(changeling(items,target,steps-1)) 

         else: 
          return None 

         i+=1 

    return holderlist 

내 도우미 기능이 있습니다 :

내 기능 등이다

def flatten_result(nested_list, target): 
    if not nested_list: 
     return None 
    for word, children in zip(nested_list[::2], nested_list[1::2]): 
     if word == target: 
      return [word] 
     children_result = flatten_result(children, target) 
     if children_result: 
      return [word] + children_result 
    return None 

flatten_result 기능 저 하나의 목록으로 목록에서 목록을 대표 할 수 있고, 또한을 통해 백 트럭 내 프로그램. 변경하는 동안 병합 된 결과를 구현하려면 어떻게합니까? 파이썬 셸에서만 아직 할 수 있습니다. 기본적으로

+0

'steps == 0 and word! = target :''return none'' return holderlist' 블록에 두 개의 return 문이 있습니다. – avasal

+0

처음부터 다시 작성하십시오. 이것은 읽을 수없는 난장판입니다. 그런 간단한 작업에는 너무 많은 중첩이 필요하지 않습니다. – wim

답변

1

word_chain(['love'], 'hate', your dict) 같은

def word_chain(chain_so_far, target, dictionary): 
    last_word = chain_so_far[-1] 
    if last_word == target: 
     print chain_so_far 
     return True 
    for word in dictionary: 
     if have_one_different_letter(word, last_word) and word not in chain_so_far: 
      word_chain(chain_so_far + [word], target) 

전화를. have_one_different_letter()으로 도움이 필요하면 알려주세요.