我正在尝试修改我的程序以创建两个空列表:prime和non_prime。 并测试列表中的随机数是素数还是素数。如果数字是素数,我想将它附加到素数列表。如果没有,我希望能够将它添加到non_prime列表中。 我试图从随机数列表中找到素数和非素数,但我得到素数和非素数的相同输出。任何人都可以帮助我吗?
import random
def main():
num = [random.randint(1,100) for _ in range (20)]
print(num)
lowest = min(num)
print("The lowest number is: ", lowest)
highest = max(num)
print("The highest number is: ", highest)
total = 0.0
for value in num:
total += value
average = total / len(num)
print("The average is: " , average)
prime = [num]
for a in range (1, 101):
for b in range(2, a):
if a % b == 0:
break
else:
prime.append(a)
print("The prime numbers are: " , prime)
nonprime = [num]
for x in range (1, 101):
for y in range(2, x):
if x % y == 0:
break
else:
nonprime.append(x)
print("The non prime numbers are: " , nonprime)
答案 0 :(得分:1)
你可以使用我方便的单线质检查器!
def is_prime (x): return True if x in [2,3] else not any (x % n == 0 for n in range (2, int (x ** 0.5) + 1))
现在,您在for循环中使用此函数:
for num in range (1, 101):
if is_prime (num): prime.append (x)
else: nonprime.append (x)
顺便说一句,如果有人想帮助我改进这个功能(或者只是想了解它),请在下面评论!它几乎会列出所有因子,然后根据列表的长度返回true或false(如果num为2或3,则返回True)
答案 1 :(得分:-3)
只是一个优化提示。在第一个循环中,您可以计算非素数和素数。
def isPrime(x):
for i in range (sqrt (x)): # from i=2 till sqrt(x)
if x % i == 0: return False
return True
if isPrime (x): prime.append (x)
else: non_prime.append (x)
以上是筛选算法