Здравствуйте, не могли бы помочь разобраться почему выдает ошибку.
Python:
dirs = [
( 'folder1',
[
'file1',
( 'folder2',
[
'file2',
'file3'
]
),
( 'folder3',
[
'file3',
'file4',
('folder4', ['file3'])
]
),
'file5'
]
)
]
# ВАШ КОД ТУТ
def res(func):
def search(dirs, filename, ways = [], ways_now = '/'):
"""
Using a substitution.
"""
result=func(dirs, filename, ways = [], ways_now ='/')
return result
return search
def filter(List, files = [], tuples = []):
"""
Transferring everything that is in the folder.
"""
for i in List:
if isinstance(i, tuple):
tuples.append(i)
else:
files.append(i)
result_1 = files[:]
result_2 = tuples[:]
files.clear()
tuples.clear()
return result_1, result_2
def read_tuple(Tuple):
"""
Returning the name of the folder and content.
"""
lst = list(Tuple)
return lst[0], lst[1:]
def end(dirs, filename, ways = [], ways_now = '/'):
files, tuples = filter(dirs)
for i in files:
if i == filename:
if ways_now == '/':
ways.append(filename)
else:
ways.append(ways_now + '/' + filename)
for i in tuples:
head,lst = read_tuple(i)
if ways_now == '/':
ways_now_real = ways_now + head
else:
ways_now_real = ways_now + '//' + head
end(lst[0], filename, ways, ways_now_real)
return ways
search = res(end)
# ПЕРЕВІРКА
print(search(dirs, 'file1'))
print(search(dirs, 'file2'))
print(search(dirs, 'file3'))
print(search(dirs, 'file4'))
print(search(dirs, 'file5'))
print(search(dirs, 'file6'))
print(search(dirs, 'folder1'))
assert search(dirs, 'file1') == ['/folder1/file1'], 'Failed test for file1'
assert search(dirs, 'file2') == ['/folder1/folder2/file2'], 'Failed test for file2'
assert search(dirs, 'file3') == ['/folder1/folder2/file3', '/folder1/folder3/file3', '/folder1/folder3/folder4/file3'], 'Failed test for file3'
assert search(dirs, 'file4') == ['/folder1/folder3/file4'], 'Failed test for file4'
assert search(dirs, 'file5') == ['/folder1/file5'], 'Failed test for file5'
assert search(dirs, 'file6') == [], 'Failed test for file6'
assert search(dirs, 'folder1') == [], 'Failed test for folder1'
print('All tests good!')