Так что я пытаюсь решить это упражнение с мозговым питона:Подумайте Python: Глава 12 Упражнение 6
Упражнение 6 Из главы 12:
Что самое длинное английское слово, что остается в силе Английское слово, , когда вы удаляете его буквы по одному за раз?
Теперь буквы могут быть удалены с любого конца или посередине, но вы не можете изменить любые буквы. Каждый раз, когда вы бросаете письмо, вы получаете с другим английским словом. Если вы это сделаете, вы, в конце концов, получите , чтобы завершить с одной буквой, и это тоже будет Английское слово-одно, которое находится в словаре. Я хочу знать, что такое самое длинное слово и сколько у него букв?
Я расскажу вам немного скромный пример: Sprite. ОК? Вы начинаете со спрайтом, вы берете письмо, один из внутреннего слова , убирайтесь, и мы остаемся со словом «злобный», затем мы с берем с конца, мы осталось слюной, мы возьмем S прочь, мы остались ямы, это, и я
Напишите программу, чтобы найти все слова, которые могут быть уменьшены таким образом, и затем найти самый длинный.
Я начал писать некоторые функции, но я застрял в функции check_dict:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
def word_list(textfile='words.txt'):
res = {}
for word in open(textfile):
word = word.strip()
res[word] = word
return res
def children(s, wl):
i = 0
children = []
while i < len(s):
temp = s[:i] + s[i+1:]
if temp in wl:
children.append(temp)
i += 1
return children
def check_dict(s, wl, res = [], called = 0):
if len(s) == 1 and s in wl:
res.append(s)
return res
else:
for child in children(s, wl):
#print(res,'call number ', str(called), 'with s = ', s, 'whose children are: ', children(s, wl))
res.append(child)
check_dict(child, wl, res, called+1)
wl = word_list()
print(check_dict('at', wl))
У меня есть проблема в том, что она возвращает None вместо возврата содержимого Рез, если я не запустить функцию с базовый случай, который равен s = 'a' или s = 'i'. Я знаю, что эта функция проходит через все возможные пути и, как таковая, должна возвращать несколько разных res, но я не совсем понимаю, как я могу заставить эту функцию печатать только одну res, которая полностью идет от параметра, с помощью которого функция вызывается в 1-буквенную длину s, которая соответствует условию базового случая.
Я знаю, что есть решение в книге, но я хочу знать, что я делаю неправильно, и как я могу исправить свою версию.
В ветке 'else' нет' return'. –
@Rawing Рекурсивная функция –
@BhargavRao: Он все еще ничего не возвращает (aka None), даже если он рекурсивный. –