递归与列表
问题描述:
我遇到一个程序有问题,程序需要一个单词,并且一次更改一个字母,将该单词转换为目标单词。虽然,请记住,根据我给出的单词字典,转换后的单词必须是合法的单词。递归与列表
我很难弄清楚如何使它递归。该程序对其必须采取的步骤数量有限制。
编辑:我不能让持有人名单全球。
到目前为止我的代码:
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)
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)
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)
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)
changeling(items,target,steps-1)
else:
changeling(None,None,steps-1)
i+=1
return holderlist
我最大的问题是,我的控股名单holderlist刷新每次我尝试让程序递归。
我可以解决它,如果我手动输入数据。这是我想要的程序来做:
changeling("find","lose",4)
gives me:
['fine','fond']
the program should then do:
changeling('fine','lose',3)
gives me:
['line']
changeling('line','lose',2)
gives me:
['lone']
changeling('lone','lose',1)
gives me:
['lose']
Target Achieved
答
可能像
def distx(w1,w2):
if len(w1) != len(w2):return 100000
score=0
for i in range(len(w1)):
score += int(w1[i] != w2[i])
return score
word_list = ["fine","fond","line","lose","lone"]
def changeling(guess,target,steps):
my_steps = []
print "Guess:",guess
if target == guess:return [guess]
try:word_list.remove(guess)
except:pass
my_steps.append(guess)
if target != guess and steps >= 0:
this_step = []
one_step_away = [w for w in word_list if distx(guess,w) == 1]
for k in one_step_away:
print " %s->"%guess,k
this_step.append(changeling(k,target,steps-1))
my_steps.append(this_step)
return my_steps
tmp = changeling("find","lose",4)
print tmp
现在已经晚了这里,而且我不打算现在看这个节目。但事实上,你已经将它嵌入了九层深,这是一个强有力的指标,表明存在根本性错误。 – 2012-03-21 21:20:01
恩,感谢您的意见。 – Unknown 2012-03-21 21:23:56
就像一个想法:做'如果步骤!= -1:',而不是'如果步骤== -1:返回holderlist',然后放置之前的缩进块(保存一个缩进) 。类似的,不是'如果项目!=单词:',做'if items == word:break';使用这种策略,您可以轻松减少到三个/四个嵌套层次,让您实际可视化程序的逻辑流程。另外,是不是'holder.list.append(target)'一个错字? – 2012-03-21 21:33:48