Генераторы и итераторы · 8 из 16
Конвейер
На участке несколько станков, и каждый что-то делает с потоком: один снимает недовес, другой переводит граммы в килограммы, третий берёт первые сколько-то штук. Порядок станков меняют чуть ли не каждую смену, и переписывать из-за этого программу Сан Саныч не намерен.
Что сделать
Соберите конвейер из станков так, чтобы порядок станков можно было менять хоть каждую смену.
Что приходит
potok— исходный потокstanki— список станков: каждый принимает поток и возвращает поток
Что вернуть
Поток, пропущенный через все станки по порядку; ни один станок не работает, пока у конвейера не попросили первое значение; станков нет — исходный поток.
Допишите функцию cepochka в редакторе справа.
Результат верните через return — то, что
напечатано, на проверку не влияет.
Станки: «без лёгких» убирает всё меньше 400, «в килограммах» делит на 1000. Поток 380, 400, 450 выходит как [0.4, 0.45].
Функция принимает поток и список станков.
Станок — это функция: принимает поток и возвращает поток.
Возвращает поток, пропущенный через все станки по порядку: первый станок получает исходный поток, второй — то, что вышло из первого, и так далее. Если станков нет, возвращается исходный поток без изменений. Ни один станок не должен сработать, пока у собранного конвейера не попросили первое значение.
Образцовый тест целиком
def bez_legkih(potok):
return (ves for ves in potok if ves >= 400)
def v_kilogrammah(potok):
return (ves / 1000 for ves in potok)
list(cepochka([380, 400, 450], [bez_legkih, v_kilogrammah]))
[0.4, 0.45]
Обсуждение
Вопросов пока нет.
Войдите, чтобы спросить.