Создание генератора при помощи yield python
Задача создать функцию-генератор my_range_gen, которая копирует работу range my_range_gen можно запускать, передав ей три параметра start, stop и step
my_range_gen(start, stop, step)
и она должна генерировать последовательность от start включительно до stop не включительно c шагом step
for i in my_range_gen(4, 8, 2):
print(i)
# Будет напечатано
# 4
# 6
for i in my_range_gen(8, 5, -1):
print(i)
# Будет напечатано
# 8
# 7
# 6
Я решил так:
def my_range_gen(*args)->int:
for i in range(*args):
yield i
for i in my_range_gen(8, 5, -1):
print(i)
Но проверка на сайте stepik не проходит пишет:
for i in range(*args):
TypeError: 'NoneType' object is not callable
КАК исправить мою функцию?
Ответы (1 шт):
Автор решения: Василий Калеев
→ Ссылка
from typing import Generator
def my_range_gen(*args) -> Generator[int, None, None]:
if len(args) == 3:
start = args[0]
stop = args[1]
inc = args[2]
elif len(args) == 2:
start = args[0]
stop = args[1]
inc = 1
elif len(args) == 1:
start = 0
stop = args[0]
inc = 1
while (inc > 0 and start < stop) or (inc < 0 and start > stop):
yield start
start += inc
for i in my_range_gen(4,8):
print(i)