How can I use Python iter here?

Viewed 109

How can I use python iter here? I want to print prime numbers one by one by using “next” method and set a limit e.g up to 100.

def prime(num):
    i = 2

    while i < num:
        if (num % i == 0):
            return False
        i += 1
    return True


def prime_generator():
    i = 2
    while True:
        if (prime(i)):
            yield i
        i += 1


for num in prime_generator():
    if (num > 100):
        break
    print(num)
3 Answers

for num in prime_generator() is equivalent to and can be written as:

r = prime_generator()
while True:
    try:
        num = next(r)
    except StopIteration:
        break

You don't need last for loop part. Try below code.

# creates iterator from generator
iterator = iter(prime_generator())
# number of calls
times = 11
# if result exceeds the limit, end
limit = 100
for _ in range(times):
    num = next(iterator)
    if(num > limit):
        break
    else:
        print(num)

You can specify the limit as a parameter to the generator method:


def prime_generator(limit: int):
    for i in range(2, limit):
        if is_prime(i):
            yield i
    

Now you can use it in any of the following ways:

gen = prime_generator(100)
print(next(gen))
print(next(gen))
print(next(gen))
for i in prime_generator(100):
    print(i, end=" ")

Or

print(list(prime_generator(100))
Related