我想循环遍历一个列表并找到所有质数
arr = [1,2,3]
for i in range(len(arr)):
if arr[i] > 1:
for j in range(2, int(arr[i]/2)+1):
if (arr[i] % j) == 0:
print(arr[i], "is not prime")
else:
print(arr[i], "is prime")
else:
print(arr[i], "is not prime")
这只打印出&;1不是质数。&;我猜这与for循环的范围(len())有关。
您的代码的问题如下
int(arr[i]/2)+1)小于2,则此后range(2, int(arr[i]/2)+1)没有元素。for循环对2和3不执行。这两种情况需要分开处理。
第二个问题是,对于更大的数字,您需要在内循环的每次迭代中决定该数字是否是素数。
这里是你的代码应该工作的一个小修改:
arr = range(20)
for i in range(len(arr)):
if arr[i] > 3:
is_prime = True
for j in range(2, int(arr[i]/2)+1):
if (arr[i] % j) == 0:
is_prime = False
break
else:
continue
print(arr[i], "is prime" if is_prime else "is not prime")
elif arr[i] in [2,3]:
print(arr[i], "is prime")
else:
print(arr[i], "is not prime")
arr = list(range(20))
def is_prime(n):
if n < 2:
return False
for i in range(2, int(n**0.5)+1):
if n % i == 0:
return False
return True
def find_primes(array):
return list(filter(is_prime, array))
print(find_primes(arr))
返回:[2,3,5,7,11,13,17,19]