Создание генератора при помощи 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)
→ Ссылка