显示 python 列表中的素数。说出不受支持的操作数时出错

Display prime numbers from a list in python. Error saying unsupported operands

我正在尝试创建一个程序,从用户那里获取一个整数,然后创建一个从 1 开始到用户输入的整数的整数列表。例如,如果用户输入“8”,则会创建一个列表 [2, 3, 4, 5, 6, 7, 8]。之后,我希望它遍历列表中的每个整数并仅显示用户输入(或包括)用户输入的质数。

def main():
    #get user input of integer
    user_integer = int(input('Please enter an integer greater than 1: '))
    #call function that creates list of numbers up to user input
    integer_list = create_list(user_integer)
    #call function that returns prime numbers
    prime_numbers = prime_number(integer_list)
    #display prime numbers
    print('The prime numbers up to the integer you entered are:', prime_numbers)

def create_list(x):
    integer_list = []
    numbers = 2
    while numbers != x:
        integer_list.append(numbers)
        numbers += 1
    return integer_list

def is_prime_number(num):
    for i in range(2,num):
        if num%i==0:
             return False
        else:
             return True

def prime_number(x):
    prime_numbers = []
    for i in (x):
        if is_prime_number(i):
            prime_numbers.append(i)

    return (prime_numbers)

main()

编辑:我编辑了代码以包含一个函数,该函数单独测试每个数字是否为质数。但是,它似乎只返回奇数而不是质数。例如,如果我输入“13”,它 returns 列表 [3, 5, 7, 9, 11]。显然9不是质数。

我做错了什么?

问题是您正试图通过数字查找列表的剩余部分。这就是您收到错误的原因:% 是类型列表和 int 不支持的操作数。我建议打破逻辑以确定数字是否为素数,然后在您的 for 循环中调用该方法。如果它 returns 为真,则将其添加到质数列表中。

def is_prime_number(num):
    for i in range(2, num):
        if num % i == 0:
            return False
    return True

def prime_number(x):
    prime_numbers = []
    for i in (x):
        if is_prime_number(x):
            prime_numbers.append(i)
    return prime_numbers

您不需要在列表周围加上括号,并且由于您没有使用合数列表,因此您不需要跟踪它。将逻辑拉入其自身的功能有助于使代码更清晰、更易于查看。也可以随意对质数函数进行优化

我认为您的代码可以通过消除模计算来改进,并且 looping.It 也最好使用一种久经考验的算法来生成素数,称为 Sieve of Eratosthenes

def main():
    user_integer = int(input('Please enter an integer greater than 1: '))
    integer_list = list(range(2,user_integer))
    prime_numbers = prime_number(integer_list)

    #display prime numbers
    print('The prime numbers up to the integer you entered are:', prime_numbers)

def prime_number(nums):
    highest = nums[-1] + 1
    sieve = [True] * (highest)
    sieve[0:1] = [False, False]

    for i in range(2, highest):
        if sieve[i]:
            for j in range(2 * i,highest,i):
                sieve[j] = False
    primes = []
    for i in range(2, highest):
        if sieve[i]:
            primes.append(i)
    return primes


if __name__ == "__main__":
    main()