
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.116.15.98] |
![]() |
|
Сообщ.
#1
,
|
|
|
Здравствуйте. Помогите решить задание на рекурсию.
версия 2.7 Надо написать функцию file_search(folder, filename), на входе 2 аргументиы - список folder и строка filename, результат работы - полный путь к файлу filename в структуре folder структура folder: список - папка с файлами, 0-й элемент - название папки, все остальные - или файлы или вложенные папки, которые так же представляются списками. (1 файл = 1 елемент списка). Имя каждого элемента оригинальное, повторения недопустимы. Например: file_search([ 'D:', ['folder1'], ['folder2', ['folder2_1'], ['folder2_2', 'file1', 'file2', 'file3' ] ], 'file0'], 'file2') результат: D:/folder2/folder2_2/file2 если файл не найден - вывести False. Вот мой набросок. Если файл встречается, все работает как надо. Но если файла нету...вот здесь нужна подсказка ![]() ![]() def file_search(folder, filename): if isinstance(folder,list): link = '' if len(folder) > 1: for item in folder[1:]: if link.find(filename) == -1: link = folder[0] + '/' + file_search(item, filename) return link else: return link elif folder==filename: return filename else: return '' Не прошу сделать за меня, прошу, по возможности, подтолкнуть меня к решению задачи |
Сообщ.
#2
,
|
|
|
Скрытый текст ![]() ![]() def file_search(folder, filename): print 'working with: ', print folder print if isinstance(folder,list): print 'list found', print folder print link = '' n = None if len(folder) > 1: for item in folder[1:]: print 'active element', print item print '>>curr path to file', print link print if link.find(filename) == -1: n = file_search(item,filename) if n != False: link = folder[0] + '/' + n print 'path : ', print link print if link.find(filename) != -1: return link else: return False else: print 'empty folder ', print link print return False #link elif folder==filename: print 'file found!!' print return filename else: print 'unnecessary file' return False |