


Задача на python, срочно!
"Впервые в жизни, – подумал Фердинанд, – я сойду с лестницы как полагается. Я взволнован, я по-настоящему взволнован".
Фердинанд встал на задние лапы, переднюю лапу положил на перила и так, шаг за шагом, не спеша сошел вниз. Все получилось складно, удивительно складно. Правда, с третьего этажа на второй он спускался еще с робостью новичка, зато со второго на первый сходил, как бывалый, завсегдатай самых шикарных лестниц и парадных.
Напишите функцию, выбирающую наибольшую последовательность, строго возрастающую или строго убывающую в зависимости от значения аргумента.
Функция upstairs() принимает произвольное количество чисел – ступеней лестницы – и два именованных аргумента:
start – с какого индекса начинать рассматривать позиционные аргументы (по умолчанию с 0);
order – какая нужна последовательность – возрастающая или убывающая (по умолчанию возрастающая – up).
Функция возвращает найденную последовательность. Если таких несколько, то ту, что ближе к началу.
Пример 1
Ввод:
data = [7, 16, 8, 17, 12, 0, 2, 17, 19, 18]
print(*upstairs(*data, order='down'))
Вывод:
17 12 0
Пример 2
Ввод:
data = [5, 13, 4, 0, 14, 15, 16, 8, 0, 3, 20, 13]
print(*upstairs(*data, start=2))
Вывод:
0 14 15 16
def upstairs(*args, start=0, order='up'):
data = list(args)
max_seq = []
current_seq = []
def compare(a, b):
return a < b if order == 'up' else a > b
for i in range(start, len(data)):
if not current_seq or compare(current_seq[-1], data[i]):
current_seq.append(data[i])
else:
if len(current_seq) > len(max_seq):
max_seq = current_seq
current_seq = [data[i]]
if len(current_seq) > len(max_seq):
max_seq = current_seq
return max_seq
# Примеры использования
data1 = [7, 16, 8, 17, 12, 0, 2, 17, 19, 18]
print(*upstairs(*data1, order='down')) # Вывод: 17 12 0
data2 = [5, 13, 4, 0, 14, 15, 16, 8, 0, 3, 20, 13]
print(*upstairs(*data2, start=2)) # Вывод: 0 14 15 16
и в 1 строчку кода функцию можно записать
def upstairs(*args, start=0, order='up'):
return max((args[i:j] for i in range(start, len(args)) for j in range(i+1, len(args)+1) if all((x < y if order == 'up' else x > y) for x, y in zip(args[i:j], args[i+1:j]))), key=len, default=[])