JustCaptain kod-buduschego
bb03bcdc780611e5fa808dc647b9a71eb07c292d
Перейти к файлу
Код
TASKS.md

Практические задачи: Генераторы и итераторы в Python

Задачи расположены по возрастанию сложности.

Правило:

  • сначала попытаться решить самому
  • только потом смотреть подсказки
  • сначала сделать через цикл
  • потом попробовать через yield

⸻

⸻

Задача 4. Космический телеметрический поток

Предметная область

Космический спутник отправляет температуру двигателя.

Данные идут постоянно.

Нельзя хранить всё в памяти.

⸻

Условие

Создайте генератор температур.

Например:

42
44
43
45
41

Можно сделать список внутри.

Но выдавать значения нужно через yield.

⸻

Пример:

for temp in telemetry():
print(temp)

⸻

Что тренируется

  • потоковая обработка данных
  • реальный use case генераторов

⸻

Усложнение

Если температура больше 80:

вывести предупреждение.

⸻

Задача 5. Netflix: сериал по сериям

Предметная область

Сервис видео не загружает весь сериал сразу.

Серии подгружаются постепенно.

⸻

Условие

Создайте генератор:

episodes()

Данные:

Серия 1
Серия 2
Серия 3

Пример:

show = episodes()
print(next(show))
print(next(show))

⸻

После окончания должен возникнуть:

StopIteration

⸻

Что тренируется

  • одноразовость генератора
  • next()

⸻

Задача 6. Генератор паролей

Предметная область

Система безопасности перебирает возможные PIN-коды.

Она не хранит миллионы комбинаций.

Она создаёт их по мере необходимости.

⸻

Условие

Сделайте генератор PIN-кодов:

0000
0001
0002
0003
...
9999

⸻

Пример:

pins = pin*generator()
for * in range(10):
print(next(pins))

Результат:

0000
0001
0002
...
0009

⸻

Что тренируется

  • генераторы для больших объёмов
  • ленивые вычисления

⸻

Почему это реальный кейс

Так работают brute-force алгоритмы.

Они не создают список:

["0000", "0001", ..., "9999"]

Они генерируют комбинации по одной.

⸻

Задача 7. Свой iterator

Предметная область

Робот доставщик проходит точки маршрута.

Маршрут:

Склад
Улица
Подъезд
Квартира

⸻

Условие

Создайте собственный iterator через класс.

Используйте:

iter()
next()

Пример:

route = DeliveryRoute()
for point in route:
print(point)

⸻

Что тренируется

  • устройство iterator изнутри
  • StopIteration
  • хранение состояния

⸻

Задача 8. Логи сервера (реальная backend-задача)

Предметная область

Сервер генерирует миллионы строк логов.

Нельзя:

readlines()

Это может съесть память.

Нужно читать строку за строкой.

⸻

Условие

Есть файл:

logs.txt

Напишите генератор:

read_logs(filename)

Он должен читать файл построчно через yield.

Пример:

for line in read_logs("logs.txt"):
print(line)

⸻

Что тренируется

  • реальный production-case
  • работа с памятью
  • сильная сторона генераторов

⸻

Задача 9. Бесконечный счётчик опыта персонажа

Предметная область

RPG-игра.

Персонаж получает опыт:

10
20
30
40
50
...

⸻

Условие

Создайте бесконечный генератор опыта.

Каждый следующий уровень:

+10 XP

Пример:

xp = experience*generator()
for * in range(5):
print(next(xp))

Результат:

10
20
30
40
50

⸻

Задача 10. Фильтр подозрительных транзакций

Предметная область

Банк анализирует платежи.

Есть поток платежей:

[100, 250, 10000, 50, 7000]

Подозрительными считаются:

больше 5000

⸻

Условие

Напишите генератор, который возвращает только подозрительные платежи.

Результат:

10000
7000

⸻

Что тренируется

  • генераторы как фильтр
  • потоковая обработка данных
  • практический data engineering case

⸻

Challenge-задача

Сделайте генератор Fibonacci.

Последовательность:

1
1
2
3
5
8
13
21
...

Требование:

генератор должен быть бесконечным.

Рекомендую порядок решения:

1 → 2 → 3 → 5 → 9 → 10 → 7 → 8 → Challenge

Так сложность растёт плавно.