在 python 中编写一个过程,在列表中找到素数,并将它们存储在一个空列表中
Writing a procedure in python that finds primes in a list, and stores them in an empty list
我目前在 class:
做这项作业时遇到一些问题
"编写一个过程 primes_only(input_list,prime_list) 以两个列表作为参数,一个 input_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))
(我没有测试代码)
我不知道你的教学大纲中有什么,你可以使用什么,你不能使用什么,
所以我写了一个非常简单的。
我已经使用注释(语句后跟# 符号)描述了我在程序中所做的事情。
而且我保持 is_prime 功能不变。(尽管你可以像 Javier 所说的那样以更奇特的方式做到这一点)
另外,作为输入给出的数字必须用逗号分隔,并且必须一次输入。
代码如下:
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
def primes_only(input_list, prime_list):
# Iterates over each number and checks whether the
# number is prime or not, if so then it is appended
# to the prime list
for n in input_list:
# Check if the number is prime and whether it
# has already been entered into the list.
# This checks that the same element is not appended
# twice
if is_prime(n) and prime_list.count(n) == 0:
prime_list.append(n)
# Take input from the user with numbers separated by commas
# and split the input into numbers in the form of a string
input_list = input("Enter the elments->").split(",")
# Convert the numbers from string to int
for i in range(len(input_list)):
input_list[i] = int(input_list[i])
prime_list = []
primes_only(input_list, prime_list)
print(prime_list)
示例输入和输出:
Enter the elments->1,5,3,2,4,7,3,19
[5, 3, 2, 7, 19]
我目前在 class:
做这项作业时遇到一些问题"编写一个过程 primes_only(input_list,prime_list) 以两个列表作为参数,一个 input_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))
(我没有测试代码)
我不知道你的教学大纲中有什么,你可以使用什么,你不能使用什么, 所以我写了一个非常简单的。 我已经使用注释(语句后跟# 符号)描述了我在程序中所做的事情。 而且我保持 is_prime 功能不变。(尽管你可以像 Javier 所说的那样以更奇特的方式做到这一点) 另外,作为输入给出的数字必须用逗号分隔,并且必须一次输入。
代码如下:
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
def primes_only(input_list, prime_list):
# Iterates over each number and checks whether the
# number is prime or not, if so then it is appended
# to the prime list
for n in input_list:
# Check if the number is prime and whether it
# has already been entered into the list.
# This checks that the same element is not appended
# twice
if is_prime(n) and prime_list.count(n) == 0:
prime_list.append(n)
# Take input from the user with numbers separated by commas
# and split the input into numbers in the form of a string
input_list = input("Enter the elments->").split(",")
# Convert the numbers from string to int
for i in range(len(input_list)):
input_list[i] = int(input_list[i])
prime_list = []
primes_only(input_list, prime_list)
print(prime_list)
示例输入和输出:
Enter the elments->1,5,3,2,4,7,3,19
[5, 3, 2, 7, 19]