📝 Практические задания

⚡ Задания в двух словах

  • Проверьте понимание итераторов, StopIteration и генераторных выражений.
  • Решите практическую задачу по генерации безопасных паролей.
  • Дополнительно: перепишите фильтрацию чисел через генератор.

Задание 1. Утверждения об итераторах

Условие: какие утверждения о итераторах верны?

  • a. Итератор можно использовать многократно.
  • b. Итератор хранит все элементы в памяти.
  • c. Итератор использует методы __iter__() и __next__().
  • d. Итератор можно создать с помощью iter(iterable).

Что должно получиться: выбор одного или нескольких верных вариантов.

Задание 2. Утверждения о StopIteration

Условие: какое из утверждений о StopIteration верное?

  • a. StopIteration вызывается, когда итератор не может вернуть новый элемент.
  • b. StopIteration вызывается при каждом вызове next().
  • c. StopIteration можно перехватить с помощью try-except.
  • d. StopIteration никогда не вызывается автоматически.

Задание 3. Результат выполнения кода

Условие: какой результат будет у следующего кода?

numbers = [5, 10, 15]
iterator = iter(numbers)

for num in iterator:
    print(num)

for num in iterator:
    print(num)
  • a. 5, 10, 15, 5, 10, 15
  • b. 5, 10, 15
  • c. 5, 10
  • d. 5, 10, 15, Ошибка StopIteration

Задание 4. Результат itertools.cycle

Условие: какой результат выдаст код?

import itertools

letters = ["A", "B", "C"]
cycled = itertools.cycle(letters)

print(next(cycled))
print(next(cycled))
print(next(cycled))
print(next(cycled))
  • a. A, B, C, A
  • b. A, B, C, C
  • c. A, B, C, Ошибка StopIteration

Задание 5. Утверждения о генераторных выражениях

Условие: какие утверждения о генераторных выражениях верны?

  • a. Генераторное выражение использует круглые скобки.
  • b. Генератор хранит все элементы в памяти.
  • c. Генератор можно использовать только один раз.
  • d. Генераторное выражение сразу создаёт список.

Задание 6. Генерация безопасных паролей ★

Условие: напишите программу, которая генерирует все возможные пароли длиной 4 символа по следующим правилам:

  • пароль содержит хотя бы одну заглавную букву, одну строчную букву и одну цифру;
  • символы не повторяются;
  • соседние символы не могут быть расположены подряд в таблице символов (разница ord() не равна 1);
  • все подходящие пароли записываются в файл valid_passwords.txt.

Данные:

from string import ascii_lowercase, ascii_uppercase, digits

Подсказка: используйте itertools.permutations для перебора и генераторное выражение для фильтрации, чтобы не хранить все перестановки в памяти одновременно.

Задание 7. Сумма квадратов чётных чисел (дополнительно)

Условие: напишите генераторное выражение, которое возвращает квадраты чётных чисел из range(20), и выведите их сумму.

Что должно получиться: одно число — сумма квадратов 0, 2, 4, ..., 18.

Проверка понимания

Выберите один вариант ответа. После клика правильный ответ подсветится зелёным.

Вопрос 1

Что такое декоратор?

Вопрос 2

Что делает yield?

Вопрос 3

Какой стиль имён переменных обычно рекомендует PEP 8?

Вопрос 4

Зачем использовать f-strings в современном Python?

Вопрос 5

Когда полезен ранний возврат из функции?

Вопрос 6

Что делает аннотация типа в Python?

Вопрос 7

Как лучше обрабатывать ожидаемую ошибку преобразования?