Python

Помогите пожалуйста с заданием на python

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

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

class SquaresNumbers:

def __init__(self, limit: int) -> None:
self.__limit = limit
self.__first_elem = 0
self.__counter = 0

def __iter__(self):
self.__first_elem = 0
self.__counter = 0
return self

def __next__(self) -> int:
self.__counter += 1
if self.__limit <= 0:
raise StopIteration
elif self.__limit >= 1:
if self.__counter > self.__limit:
raise StopIteration
self.__first_elem += 1
return self.__first_elem * self.__first_elem

def square_func(nums: int) -> Iterable[int]:
for num in range(1, nums + 1):
yield num ** 2

def main():
number_user = int(input('Введите пожалуйста число от 1 до N:'))
squares_numbers = SquaresNumbers(limit=number_user)
print('\nВывод калсс-итератор')
for num_i in squares_numbers:
print(num_i, end=' ')

print('\n\n\nВывод функция генератор')
for x in square_func(number_user):
print(x, end=' ')

print('\n\n\nВывод генераторное выражение')
square_gen = (num ** 2 for num in range(1, number_user + 1))
for i_num in square_gen:
print(i_num, end=' ')

if __name__ == '__main__':
main()
Виктор Панчук
Виктор Панчук
165
Лучший ответ
 """ Решение задачи 1. Квадраты чисел. """ 

from typing import Generator


# Способ реализации: класс-итератор
class MyIterator:
"""
Пользовательский итератор, генерирующий квадраты чисел до заданного предела.

Parameters:
number (int): Предел, до которого генерируются квадраты.

Attributes:
number (int): Предел, до которого генерируются квадраты.
i_number (int): Текущий номер итерации.

Methods:
__iter__(): Возвращает сам объект итератора.
__next__(): Возвращает следующее в итерации значение числа в квадрате.

Example:
my_iterator = MyIterator(10)
for number_squares in my_iterator:
print(f'{my_iterator.i_number} ** 2 = {number_squares}')
"""

def __init__(self, number: int) -> None:
""" Инициализирует объект MyIterator с указанным пределом. """
self.number = number
self.i_number = 0

def __iter__(self):
""" Возвращает сам объект итератора. """
return self

def __next__(self) -> int:
"""
Создает следующее значение числа в квадрате.

:return (int): Квадрат текущего числа в итерации.

Raises:
StopIteration: Если текущее число превышает указанный предел.
"""
self.i_number += 1
if self.i_number < self.number:
return self.i_number ** 2
else:
raise StopIteration


my_iterator = MyIterator(10)
print('Способ реализации: класс-итератор.')
for number_squares in my_iterator:
print(f'{my_iterator.i_number} ** 2 = {number_squares}')


# ----------------------------------------------------------------------------

# Способ реализации: функция-генератор
def my_generator_func(number: int = 10) -> Generator[int, None, None]:
"""
Генерирует квадраты чисел до заданного предела с помощью генератора.

Parameters:
number (int): Предел, до которого генерируются квадраты. По умолчанию равен 10.

Yields:
int: Квадрат каждого числа в итерации.

Example:
for number_squares in my_generator:
print(number_squares, end=' ')
"""
for i_number in range(1, number):
yield i_number ** 2


my_generator = my_generator_func()
print('\nСпособ реализации: функция-генератор.')
for number_squares in my_generator:
print(number_squares, end=' ')

# ----------------------------------------------------------------------------

# Способ реализации: генераторное выражение
generator_expression_squares_of_numbers = (number ** 2 for number in range(1, 10))
print('\n\nСпособ реализации: генераторное выражение.')
for number_squares in generator_expression_squares_of_numbers:
print(number_squares, end=' ')