首页 > 解决方案 > 用python编写一个过程,在列表中找到素数,并将它们存储在一个空列表中

问题描述

我目前在课堂上做这项作业时遇到一些问题:

“编写一个程序 primes_only(input_list,prime_list),它接受两个列表作为其参数,一个数字输入列表和一个名为 prime_list 的空列表。该过程必须检查列表 input_list 中的每个数字。如果数字是素数,它应该添加一个将该号码复制到素数列表中。您必须使用之前编写的函数来为您完成大部分工作。

这是我到目前为止尝试做的事情:

input_list = int(input())
prime_list = []

def primes_only(input_list,prime_list):
    for x in range(2,input_list):
        if(input_list%x)==0:
            prime_list.append(x)
        else:
print(prime_list)

    def is_prime(n):
    if (n==1):
        return False
    elif (n==2):
        return True;
    else:
        for x in range(2,n):
            if(n % x==0):
                return False
        return True    

有人会帮忙吗?

标签: pythonpython-3.xlistprimes

解决方案


问题的描述表明同时发生了两件事:

  1. 检测一个数是否为素数。
  2. 将号码复制到另一个列表。

在这种情况下,我会编写两个函数:is_prime和你的primes_only.

def is_prime(n: int) -> bool:
    """Returns whether the given number is prime."""
    assert n > 1, 'The number must be greater than 1'

    for i in range(2, n):  # Could use square root of n as the upper bound.
        if n % i == 0:
            return False
    return True

这个函数应该很容易在 REPL 上手动测试,或者更好的是,创建一些测试用例。

然后:

def primes_only(nums: Iterable[int], primes: List[int]) -> None:
    for n in nums:
        if is_prime(n):
            primes.append(n)

更高级的版本:

def primes_only(nums: Iterable[int], primes: List[int]) -> None:
    primes.extend(n for n in nums if is_prime(n))

(我没有测试代码)


推荐阅读