March 21

Итераторы. Генераторы

# Итераторы

class myIterator:
	def __init__(self, max_num: int) -> None:
		self.max_num = max_num

	def __iter__(self) -> 'myIterator':
		self.current_num = 0
		return self

	def __next__(self) -> int:
		if self.current_num < self.max_num:
			self.current_num += 1
			return self.current_num
		else:
			raise StopIteration


def main():
	a = myIterator(5)

	print(a.__iter__().__next__())
	print(a.__next__())
	print(a.__next__())
	print(a.__next__())
	print(a.__next__())

	print()

	print(next(iter(a)))
	print(next(a))
	print(next(a))
	print(next(a))
	print(next(a))

	print()

	for number in a:
		print(number)


if __name__ == '__main__':
	main()
# Генераторы

def my_generator(max_num: int):
	current_num = 0

	while current_num < max_num:
		current_num += 1
		yield current_num


def main():
	a = my_generator(5)
	print(next(a))
	print(next(a))


if __name__ == '__main__':
	main()
# Создайте генератор, который генерирует числа Фибоначчи по мере запросов

def fibonacci_generator():
	a, b = 0, 1
	while True:
		yield a
		a, b = b, a + b


def main():
	a = fibonacci_generator()

	for i in range(1, 11):
		print(f'Число {i} последовательности чисел Фибоначчи:\t{next(a)}')

	for i in range(11, 21):
		print(f'Число {i} последовательности чисел Фибоначчи:\t{a.__next__()}')


if __name__ == '__main__':
	main()
# Создайте генератор, который генерирует случайные целые числа в заданном диапазоне

import random


def generate_random_number(start: int, end: int):
	while True:
		yield random.randint(start, end)


def main():
	a = generate_random_number(1, 20)
	b = generate_random_number(20, 40)

	# 10 случайных чисел в диапазоне [1, 20]
	for _ in range(10):
		print(a.__next__())

	print()

	# 10 случайных чисел в диапазоне [20, 40]
	for _ in range(10):
		print(next(b))


if __name__ == '__main__':
	main()