10.22 Итераторы

  1. Задача_1, просто на итератор.
    • числа Фибоначчи - последовательность, начинающаяся с 1, 1, и продолжающаяся так, что очередной элемент равен сумме двух предшествующих элементов.
    • написать итератор fib(m,n), возвращающий числа Фибоначчи, начинаю с m-го и заканчивая n-м (m>=n), в нумерации с 1

    • пример:
      • вход: 3, 5
      • выход: 2, 3, 5
  2. Задача_1a, на параметризованный итератор.
    • написать параметризованный итератор fib_pow(m,n,p), отличающийся от fib(m,n) тем, что возвращает числа Фибоначчи, возведённые в степень p (p - натуральное число); fib_pow должен поддерживать изменение значения p "на ходу" через send()
  3. Задача_2, на yield from: Скользящее окно

    • написать итератор even(), получающий на вход числовую последовательность длины не менее 3 и возвращающий её элементы, являющиеся чётными числами
    • написать итератор slide(), получающий на вход числовую последовательность длины не менее 3, и возвращающий:
      • чётные элементы в подпоследовательности с 1-го по 3-й элемент ("окне" размером в 3 элемента)
      • чётные элементы в подпоследовательности с 2-го по 4-й элемент ("окно" сдвинулось на 1 элемент вправо)
      • далее по аналогии, пока правая граница "окна" не достигнет конца последовательности (понятно, что если в последовательности только 3 элемента, то окно сдвигать некуда)
    • итератор slide() должен использовать итератор even(), обращаясь к нему при помощи yield from

  4. Задача_3 — на itertools (на комбинаторику, с естественной формулировкой): Священные Надписи

    • поклонники бога Тора используют в своих надписях три буквы: T, O, R. Надпись считается священной, если имя бога (подстрока "TOR") входит в неё ровно два раза
    • напишите программу-однострочник, которая при помощи itertools и filter формирует все священные надписи заданной длины, причём в алфавитном порядке