10.28 Итераторы
Пример использования Zoom на семинарах ВМК
- Проверяем настройки
- Проверяем layout с демонстрацией преподавателя + работой
- Проверяем самостоятельную работу с демонстрацией экранов
Копипастим пример оформления тестов к заданию типа «написать функцию», заставляем его работать
- Выбираем чат
Итераторы
Просто итераторы
- Циклический конструктор и его использование, зачем нужен
Функция-генератор и yield
Задача_1, просто на итератор.
- числа Фибоначчи - последовательность, начинающаяся с 1, 1, и продолжающаяся так, что очередной элемент равен сумме двух предшествующих элементов.
написать генератор-функцию fib(m, n), возвращающую итератор по числа Фибоначчи, начинаю с m-го и заканчивая n-м (m⩽n), в нумерации с 0
- пример:
вход: 2, 4
выход: 2, 3, 5
Немного об `itertools`
- Удобство и простота
Особенности tee() и islice() и других воспроизводящих итераторов — чудес на свете не бывает
- Комбинаторика-+
Зачем нужен `yield from`
- Пример
Задача_2: Скользящее окно (на yield from)
написать генератор-функцию slide(seq, n), которая получает на вход последовательность A0, A1 … , An, …, а на выходе выдаёт итератор
A0, A1 … , An-1,
A1, A2 … An,
A2, A3 … An+1
- …
и т. д., т. е. выдаёт содержимое «окна» длины не более n, сдвигает его на одну позицию, и снова выдаёт. Итерация заканчивается, когда окно оказывается пустым
Нам помогут itertools.islice(), itertools.tee() и yield from!
- Пример:
1 print(*list(slide(range(5), 3)))
- Вывод:
0 1 2 1 2 3 2 3 4 3 4 4
Задача_3: Священные надписи (itertools; на комбинаторику, с естественной формулировкой):
поклонники бога Тора используют в своих надписях три буквы: T, O, R. Надпись считается священной, если имя бога (подстрока "TOR") входит в неё ровно два раза
- напишите программу-однострочник, которая при помощи itertools и filter формирует все священные надписи заданной длины, причём в алфавитном порядке
Input (1):
6
Output (1):
TORTOR
Input (2):
7
Output (2):
OTORTOR, RTORTOR, TOROTOR, TORRTOR, TORTORO, TORTORR, TORTORT, TORTTOR, TTORTOR
Д/З
Ещё раз посмотреть как оформляются тесты к заданию типа «написать функцию»
- Оформить решения и не менее трёх тестов для каждой задачи