3953
Комментарий: Правка даты
|
← Версия 6 от 2021-12-01 03:27:40 ⇥
4125
|
Удаления помечены так. | Добавления помечены так. |
Строка 2: | Строка 2: |
{{{#!wiki note |
|
Строка 8: | Строка 10: |
}}} | |
Строка 10: | Строка 13: |
Просто итераторы | === Просто итераторы === |
Строка 19: | Строка 23: |
Немного об [[py3doc:itertools]]: | === Немного об `itertools` === * [[py3doc:itertools]] |
Строка 22: | Строка 28: |
* Комбинаторика Зачем нужен `yield from` |
* Комбинаторика-+ === Зачем нужен `yield from` === |
Строка 25: | Строка 32: |
* <!> Задача_2, на `yield from`: Скользящее окно | * <!> '''Задача_2: Скользящее окно''' (на `yield from`) |
Строка 41: | Строка 48: |
* <!> Задача_3 — на [[py3doc:itertools]] (на комбинаторику, с естественной формулировкой): '''Священные Надписи''' * поклонники бога Тора используют в своих надписях три буквы: T, O, R. Надпись считается священной, если имя бога (подстрока "TOR") входит в неё ровно два раза |
* <!> '''Задача_3: Священные надписи''' ([[py3doc:itertools]]; на комбинаторику, с естественной формулировкой): * поклонники бога Тора используют в своих надписях три буквы: '''T''', '''O''', '''R'''. Надпись считается священной, если имя бога (подстрока ''"TOR"'') входит в неё ровно два раза |
Строка 45: | Строка 52: |
* пример: * вход: `6` * выход: `TORTOR` * вход: `7` * выход: `OTORTOR`, `RTORTOR`, `TOROTOR` … и т.п. |
'''Input (1):''' {{{ 6 }}} '''Output (1):''' {{{ TORTOR }}} '''Input (2):''' {{{ 7 }}} '''Output (2):''' {{{ OTORTOR, RTORTOR, TOROTOR, TORRTOR, TORTORO, TORTORR, TORTORT, TORTTOR, TTORTOR }}} |
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
Д/З
Ещё раз посмотреть как оформляются тесты к заданию типа «написать функцию»
- Оформить решения и не менее трёх тестов для каждой задачи