0

I have a generator function:

def emit_gel() -> Generator[int, int, None]:
    number: int = 50
    step: int = 10
    while True:
        yield number
        number = number + random.randint(0, step)
gel_generator = emit_gel()
for gel in gel_generator:
    print(gel)

It generates numbers from 50 to 100, incrementing it by random number from 0 to step.

How do I use a .send() (and only send) to inverse the step's sign, when a condition is met? For example:

gel_generator = emit_gel()
for gel in gel_generator:
    print(gel)
    if gel > 70:
        gel_generator.send(?)

I've tried to implement second yield like:

yield number
number = number + random.randint(0, step * (yield 1))

But it returns 1 and stops. Moreover, it will always present second yield. Maybe, I should rewrite a generator or leave any hope to change a sign by only .send().

mkrieger1
  • 19,194
  • 5
  • 54
  • 65
Graien
  • 1
  • 1
  • 1
    Does this answer your question? [Python generator send: don't yield a new value after a send](https://stackoverflow.com/questions/22028903/python-generator-send-dont-yield-a-new-value-after-a-send) – mkrieger1 Dec 03 '22 at 13:20

0 Answers0