Предлагаются задачки разной сложности.
Для большинства задач я добавил еще задачи «напишите то же самое, но без ифов и циклов». Это задачи «на сообразительность», я их отметил звездочкой, они не обязательные.
- Напишите функцию
max_2(a, b)
, возвращающую максимум из двух объектов (без встроеннойmax
, естественно). Считайте, что единственная операция, определенная над объектами — сравнение '>' и приведение к логическому типу, то есть можно писатьa > b
,bool(a)
, но ничего другого сa
иb
делать нельзя. - (*) Сделайте то же самое, но без ифов (в т. ч. тернарных).
- Напишите функцию
max_list(l)
, которая вернет первый максимальный элемент из спискаl
. - Напишите функцию
max_any([a, [b, [...]]])
, которая принимает на вход сколько угодно объектов и возвращает первый максимальный объект. Подсказка: вам поможет*args
. - (**) Напишите функцию max(l), возвращающую первый максимум массива, без ифов и циклов (а лучше и без ключевого слова def)
-
Напишите функцию
map_(f, l)
, которая принимает на вход функциюf
и списокl
, после чего возвращает новый список, полученый из спискаl
путем применения функцииf
к каждому жлементу списка.Пример:
def sq(x): return 2 ** x print(map_(sq, [1, 2, 3, 4, 5])) # [2, 4, 8, 16, 32]
2. Перепишите функцию `map_` так, чтобы она не использовала прямое обращение к индексам списка `l`.
3. Напишите функцию `reduce(f, l)`, которая принимает на вход вход функцию `f` и список `l`, после чего
возвращает число `f(l[0], f(l[1], f(l[2], ...)))`
Пример:
def add(x, y): return x + y
print(reduce(add, [1, 2, 3, 4])) # add(1, add(2, ...)) == 1 + 2 + ... == 10
3. Перепишите функцию `reduce` так, чтобы она не использовала прямое обращение к индексам списка `l`.
4. Напишите функции `map_any(f, a, [b, [c, [...]]])` и `reduce_any(f, a, [b, [c, [...]]])`, которые
принимают на вход функцию `f` и несколько списков.
5. Можете почитать документацию к библиотеке functools.
6. (**) Перепишите функции `map_` и `reduce` без ифов и циклов (а еще лучше — без ключевого слова `def`).
## Chain, Flat
1. Напишите функцию `chain(a, [b, [c, [...]]])`, которая принимает на вход несколько списков и возвращает их конкатенацию.
2. Сделайте это без ифов и циклов (а еще лучше — без ключевого слова `def`).
3. Напишите функцию `flat(l)`, которая принимает на вход список, внутри которго могут быть другие списки, и
возвращает «плоский» список, т. е., к примеру, `[1, 2, [3, 4, [5, 6], 7], 8, [9]]` станет `[1, 2, 3, 4, 5, 6, 7, 8, 9]`.
5. Перепишите функции так, чтобы они не использовали прямое обращение к индексам списка `l`.
6. Можете почитать документацию к библиотеке itertools.