【问题标题】:Two functions in a recursive functions?递归函数中有两个函数?
【发布时间】:2012-03-27 05:50:28
【问题描述】:

我几乎完成了我拥有的特定程序的编码。我只需要最后一件作品的帮助。 该程序获取一个单词并将一个字母更改为更接近目标单词。 更改后的单词必须存在于给我的字典中。

我的功能是这样的:

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 中完成。

【问题讨论】:

  • 请正确对齐/更正代码,if steps==0 and word!=target:return Nonereturn holderlist块中有两条return语句。
  • 从头开始重写。这是一个难以理解的混乱,这么简单的任务不应该需要这么多的嵌套。

标签: python list function recursion


【解决方案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() 的帮助,请告诉我们。

【讨论】:

    猜你喜欢
    • 2021-04-19
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多