我遇到程序问题,程序只需一个单词,一次更改一个字母,将该单词转换为目标单词.虽然,请记住,根据我给出的单词词典,转换后的单词必须是合法的单词.
我无法弄清楚如何使其递归.该程序对必须采取的步骤数量有限制.
输出需要是一个列表.因此,如果函数更改的参数是
更改(“查找”,“丢失”),输出应为:
[“发现”,“精”,“行”,“孤独”,“失去”.
用我当前的代码:
def changeling(word,target,steps):
holderlist=[]
i=0
if steps<0 and word!=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"
holder.list.append(target)
holderlist.append(items)
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)
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)
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
我收到一个混乱的输出:
[‘罚款’,[‘行’,[‘孤独’,[‘失去’,[]]]],’喜欢’,[]]
我得到了我想要的答案,但我不知道如何a)清理它,因为列表中没有列表.并且b)喜欢出现,因为当调用find时它会给出好的和喜欢的,精细的是以目标词结束的那个,并且喜欢失败,但是我不知道如果我追加了它就该如何摆脱它它到持有人名单.
任何帮助,将不胜感激.
干杯.
最佳答案 我并不完全相信使用extend而不是append可以解决你所有的问题,因为看起来这可能无法解决那些不会导致解决问题并需要回溯的改变.
如果事实证明我是正确的,其他答案不会结束,这里有一个递归函数,可以将您当前的结果转换为您要查找的内容:
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
>>> result = ['fine', ['line', ['lone', ['lose', []]]], 'fond', []]
>>> flatten_result(result, 'lose')
['fine', 'line', 'lone', 'lose']