Задача 1. Квадраты чисел
Пользователь вводит число N. Напишите программу, которая генерирует последовательность из квадратов чисел от 1 до N (1 ** 2, 2 ** 2, 3 ** 2 и так далее). Реализацию напишите тремя способами: класс-итератор, функция-генератор и генераторное выражение.
Python
Помогите пожалуйста с заданием на python
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()
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()



""" Решение задачи 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=' ')
Похожие вопросы
- Помогите пожалуйста сделать задание в Яндекс.практикум Python. Завис на задании.
- Помогите ответить на задание в Python
- Помогите пожалуйста с задачей по python!
- Помогите пожалуйста с задачей на Python.
- Помогите пожалуйста с задачей на Python.
- Помогите пожалуйста с задачей на Python
- Помогите пожалуйста с задачей по python!
- Помогите пожалуйста с задачей на python!
- Помогите пожалуйста с задачей по python!
- Помогите пожалуйста с задачкой на Python