Квадраты чисел

Что нужно сделать

Пользователь вводит число N. Напишите программу, которая генерирует последовательность из квадратов чисел от 1 до N (1 ** 22 ** 23 ** 2 и так далее). Реализацию напишите тремя способами: класс-итератор, функция-генератор и генераторное выражение.

Что оценивается

  • Результат вычислений корректен.
  • input содержит корректные приглашения для ввода.
  • Модели реализованы в стиле ООП, основной функционал описан в методах классов и в отдельных функциях.
  • При написании классов соблюдаются основные принципы ООП: инкапсуляция, наследование и полиморфизм.
    • Для получения и установки значений у приватных атрибутов используются сеттеры и геттеры.
    • Для создания нового класса на основе уже существующего используется наследование.
  • Сообщения о процессе получения результата осмыслены и понятны для пользователя.
  • Переменные, функции и собственные методы классов имеют значащие имена (не abcd).
  • Классы и методы/функции имеют прописанную документацию.Если вы ищете суперклон Replica Rolex , Super Clone Rolex – это то, что вам нужно! Самая большая коллекция поддельных часов Rolex онлайн!
  • Есть аннотация типов для методов/функций и их аргументов (кроме args и kwargs). Если функция/метод ничего не возвращает, то используется None.
'''Класс-итератор'''
class Square:
    def __init__(self, stop):
        self.stop = stop
        self.count = 0

    def __iter__(self):
        return self

    def __next__(self):
        self.count += 1
        if self.count == self.stop + 1:
            raise StopIteration
        result = self.count ** 2
        return result

print('Метод 1: ')
square = Square(8)
for i in square:
    print(i, end=' ')
print('\n')

'''Функция-генератор'''

def square_func(num):
    count = 1
    for _ in range(num):
        if count <= num:
            yield count ** 2
        count += 1

print('\nМетод 2: ')
sqare_gen = square_func(num=8)
for i in sqare_gen:
    print(i, end=' ')
print('\n')

'''Генераторное выражение'''

print('\nМетод 3: ')

num = 8
res = (x ** 2 for x in range(1, num + 1))
for i in res:
    print(i, end=' ')