python - 用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
有人会帮忙吗?
解决方案
问题的描述表明同时发生了两件事:
- 检测一个数是否为素数。
- 将号码复制到另一个列表。
在这种情况下,我会编写两个函数: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))
(我没有测试代码)