Напишите функцию, которая будет определять, является ли переданная ей последовательность линейной («Linear»), квадратичной («Quadratic») или кубической («Cubic»).
Инпутом будет список чисел произвольной длины. Числа в списке будут представлять собой одну из указанных последовательностей.
Функция должна возвращать строки «Linear», «Quadratic» или «Cubic» в соответствии с тем, какая последовательность передана.
Примеры
seq_level(1, 2, 3, 4, 5) ➞ "Linear" seq_level(3, 6, 10, 15, 21) ➞ "Quadratic" seq_level(4, 14, 40, 88, 164) ➞ "Cubic"
Варианты решения
def seq_level(lst): seq = lambda x: [b - a for a, b in zip(x, x[1:])] is_linear = lambda x: len(set(seq(x))) == 1 return 'Linear' if is_linear(lst) \ else 'Quadratic' if is_linear(seq(lst)) \ else 'Cubic'
def seq_level(lst): d, level = {1: 'Linear', 2: 'Quadratic', 3: 'Cubic'}, 0 while len(set(lst)) != 1: lst = [a - b for a, b in zip(lst, lst[1:])] level += 1 return d[level]
def seq_level(lst): dif1 = [j - i for i, j in zip(lst, lst[1:])] dif2 = [j - i for i, j in zip(dif1, dif1[1:])] dif3 = [j - i for i, j in zip(dif2, dif2[1:])] if not sum(dif2): return 'Linear' if not sum(dif3): return 'Quadratic' return 'Cubic'