这是我所拥有的。这个函数可以很好地过滤出复合数字,但我不明白为什么它会打印某些数字的重复项:
def prime_filter(list):
prime_list = []
for i in list:
if i == 2:
prime_list.append(i)
if i > 1:
for n in range(2, i):
if(i % n == 0):
break
else:
prime_list.append(i)
print("The total number of prime numbers is: ", len(prime_list))
print(prime_list)下面是我对该函数及其返回的输出的测试:
# test
test_list = [2, 3, 6, 8, 11]
prime_filter(test_list)
The total number of prime numbers is: 11
[2, 3, 11, 11, 11, 11, 11, 11, 11, 11, 11]有人知道我怎么解决这个问题吗?任何帮助都是非常感谢的。
发布于 2020-12-22 11:58:14
您应该检查prime_list是否被所有数字整除。
def prime_filter(list):
prime_list = []
for i in list:
if i == 2:
prime_list.append(i)
if i > 2:
for n in range(2, i):
if(i % n == 0):
break
else:
prime_list.append(i)
print("The total number of prime numbers is: ", len(prime_list))
print(prime_list)发布于 2020-10-29 02:41:48
这可能适用于解决方案,在完成所有检查后,应该将i添加到prime_list中。
def prime_filter(list):
prime_list = []
for i in list:
if i == 2:
prime_list.append(i)
if i > 1:
for n in range(2, i):
if(i % n == 0):
break
if n**2>i:
prime_list.append(i)
break
print("The total number of prime numbers is: ", len(prime_list))
print(prime_list)发布于 2020-10-29 02:51:06
在您的i>1代码中,对于每个奇怪的i值,都被附加为odd no%2==1,这使得程序进入else部分。
此外,当使用for loop no value来划分i时,您只需要添加else部分。
以下是改进后的工作代码
def prime_filter(_list):
prime_list = []
for i in _list:
if i == 2:
prime_list.append(i)
elif i==1:
continue
elif i > 2:
for n in range(2, i):
if(i % n == 0):
break
else:
prime_list.append(i)
print("The total number of prime numbers is: ", len(prime_list))
print(prime_list)
test_list = [2, 3, 6, 8, 11]
prime_filter(test_list)
# output [2,3,11]https://stackoverflow.com/questions/64579285
复制相似问题