Skip to content

Instantly share code, notes, and snippets.

@AmatanHead
Last active November 6, 2015 07:41
Show Gist options
  • Save AmatanHead/4b3dc004c1bbd7b38ce6 to your computer and use it in GitHub Desktop.
Save AmatanHead/4b3dc004c1bbd7b38ce6 to your computer and use it in GitHub Desktop.
Python начало

Python начало

Предлагаются задачки разной сложности.

Для большинства задач я добавил еще задачи «напишите то же самое, но без ифов и циклов». Это задачи «на сообразительность», я их отметил звездочкой, они не обязательные.

Min, Max

  1. Напишите функцию max_2(a, b), возвращающую максимум из двух объектов (без встроенной max, естественно). Считайте, что единственная операция, определенная над объектами — сравнение '>' и приведение к логическому типу, то есть можно писать a > b, bool(a), но ничего другого с a и b делать нельзя.
  2. (*) Сделайте то же самое, но без ифов (в т. ч. тернарных).
  3. Напишите функцию max_list(l), которая вернет первый максимальный элемент из списка l.
  4. Напишите функцию max_any([a, [b, [...]]]), которая принимает на вход сколько угодно объектов и возвращает первый максимальный объект. Подсказка: вам поможет *args.
  5. (**) Напишите функцию max(l), возвращающую первый максимум массива, без ифов и циклов (а лучше и без ключевого слова def)

Map, Reduce

  1. Напишите функцию 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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment