2012-03-27 140 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功能允許我代表名單中列出作爲一個單一的名單,也將回溯通過我的程序。如何在轉換中實現平坦結果?我只能在python shell中做到這一點。

+0

請正確對齊/更正代碼,如果步驟== 0和word!= target:返回None返回holderlist在塊上有兩個return語句。 – avasal 2012-03-27 06:00:55

+0

從頭開始重寫。這是一個難以理解的混亂,這樣一個簡單的任務不應該需要太多的嵌套。 – wim 2012-03-27 06:10:32

回答

1

基本上,

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) 

這樣稱呼它word_chain(['love'], 'hate', your dict)。請告訴我們您是否需要have_one_different_letter()的幫助。