Итерируйтесь по range(m) и выдавайте value * value через yield. Получатся квадраты от 0 до m−1.
Создать генератор квадратов чисел
Итерируйтесь по range(m) и выдавайте value * value через yield. Получатся квадраты от 0 до m−1.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Реализуйте в Python генератор, который принимает целое n и последовательно выдаёт квадраты чисел от 0 до n‑1.
def generate_squares(m):
# TODO: генератор квадратов чисел
pass
Ответ
Итерируйтесь по range(m) и выдавайте value * value через yield. Получатся квадраты от 0 до m−1.
def generate_squares(m):
for value in range(m):
yield value * value
assert list(generate_squares(5)) == [0, 1, 4, 9, 16]
Граница m не включается, поэтому квадрат самого m отсутствует. При нуле или отрицательном m последовательность пуста; при необходимости запрета отрицательных значений добавьте проверку.
Генератор вычисляет значения по мере запроса и не хранит всю последовательность. Каждый вызов next продвигает его на один элемент, после завершения возникает StopIteration. Полный обход требует O(m) шагов при положительном m.