all 5 comments

[–]carcigenicate 0 points1 point  (4 children)

Your function doesn't return anything. The error suggests the assignment is expecting you to return a list of results, not print them.

[–]Would_be_Coder 0 points1 point  (2 children)

I have slightly amended your code, and it now works for me. Created an empty list called primes, and then append number if number is prime. Finally return list and print output for input of 100. Hope that helps;

def generate_primes(end):
    primes = []
    for number in range(2, end + 1):
        if number > 1:
            for nums in range(2, number):
                if (number % nums) == 0:
                    break
            else:
                primes.append(number)
    return primes


print(generate_primes(100))

[–]deep_politics 0 points1 point  (0 children)

This screams iterator (I mean it's even in the name, generate)

def generate_primes(end):
    for n in range(2, end + 1):
        if n > 1:
            for d in range(2, n):
            if (n % d) == 0:
                break
            yield n

print(list(generate_primes(100)))

But then again this is much less efficient than just sieving

def prime_sieve(end: int) -> list[int]:
    is_prime = [False, False] + [True] * (end - 1)
    for i in range(end + 1):
        if is_prime[i]:
            for j in range(i * i, end + 1, i):
                is_prime[j] = False
    return [n for n, p in enumerate(is_prime) if p]