У меня проблемы с программой, программа принимает одно слово и меняет одну букву за раз, преобразует это слово в целевое слово. Хотя, имейте в виду, что преобразованное слово должно быть юридическим словом в соответствии со словарем слов, которые мне дали.Рекурсия со списками
У меня возникли проблемы с выяснением того, как сделать это рекурсивным. Программа имеет ограничение на количество шагов, которые она должна выполнить.
EDIT: Я не могу сделать список держателей Global.
Мой код до сих пор:
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
Это поздно здесь, и я не буду читать эту программу сейчас. Но тот факт, что вы вложили его в девять уровней, является сильным индикатором того, что есть что-то принципиально неправильное. –
Ну, спасибо за вход. – Unknown
Как идея: вместо выполнения 'if steps! = -1:', выполните 'if steps == -1: return holderlist', а затем поместите ранее отложенный блок после этого (один отступ сохраняется) , Аналогично, вместо 'if items! = Word: ', do 'if items == word: break'; используя эту стратегию, вы можете легко сократить до трех/четырех уровней вложенности, что позволит вам фактически визуализировать логический поток программы. Кроме того, это не 'owner.list.append (target)' опечатка? –