Реализовать генератор, выдающий квадраты чисел в обратном порядке

Итерируйтесь по range(n, 0, -1) и возвращайте i * i через yield. Для n ≤ 0 генератор не выдаёт элементов.

Короткий ответ

Что ответить на собеседовании

Итерируйтесь по range(n, 0, -1) и возвращайте i * i через yield. Для n ≤ 0 генератор не выдаёт элементов.

Подробный разбор

Ответ с пояснениями

Условие

Создайте функцию‑генератор, которая принимает целое число n и последовательно возвращает квадраты всех целых чисел от n до 1 включительно.

Ответ

Итерируйтесь по range(n, 0, -1) и возвращайте i * i через yield. Для n ≤ 0 генератор не выдаёт элементов.

def reverse_squares(n):
    for i in range(n, 0, -1):
        yield i * i

assert list(reverse_squares(4)) == [16, 9, 4, 1]

Правая граница range не включается, поэтому остановка на нуле позволяет получить квадрат единицы. Значения вычисляются только при продвижении генератора; промежуточный список не создаётся. Полный обход занимает O(n) шагов, дополнительная память — O(1), если не учитывать размер самих чисел. Преобразование через list в примере нужно только для демонстрации результата.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее