В задаче нужно реализовать функцию, соответствующую определенному алгоритму.
Условие задачи:
Написать функцию, вычисляющую “глубину” математического выражения.
Например:
•depth('x') => 0
•depth(('expt', ‘x’, 2)) => 1
•depth(('+', ('expt', ‘x’, 2), ('expt', ‘y’, 2))) => 2
•depth(('/', ('expt', ‘x’, 5), ('expt', ('-', ('expt', ‘x’, 2), 1), ('/', 5, 2)))) => 4
Само выражение задано списком, как единственный аргумент функции.
Набросок решения:
Додумался набросать рекурсию. Ноль возвращает, если элемент – не список. Прибавляет 1 и вызывает саму себя, если элемент – список.
# Problem 2.2: Expression depth
def depth(expr):
#how to apply the function to all list members?
if not isinstance(expr, (list, tuple)):
return 0
if isinstance(expr, (list, tuple)):
return 1 + depth(expr)
#raise NotImplementedError
Проверяется только первый элемент списка. Нужно как-то пройтись по всем элементам, для каждого вложенного списка накапливая значение глубины выражения. Препод предложил использовать функции map() и max().