Python 我的质数查找程序陷入无限循环

Python 我的质数查找程序陷入无限循环,python,Python,我为我的班级做了一个节目有一段时间了。它应该是一个素数查找器,其中def is_prime(num)函数循环并不断要求用户输入更多的数字,检查它们是否为素数,并打印它们是否为素数。如果输入负数,则应退出 def is_prime (num): while num >= 0: if num % 1 == num or num % num == 0: print(num, "is a prime") elif num % 2 == 0: print(

我为我的班级做了一个节目有一段时间了。它应该是一个素数查找器,其中def is_prime(num)函数循环并不断要求用户输入更多的数字,检查它们是否为素数,并打印它们是否为素数。如果输入负数,则应退出

def is_prime (num):
  while num >= 0:
    if num % 1 == num or num % num == 0:
      print(num, "is a prime")
    elif num % 2 == 0:
      print(num, "is not a prime")
      continue
    elif num < 0:
      print("Done. Thanks for using the program!")
      break
  return 0


if __name__ == "__main__":
  print("This program checks if a given number is a prime number\n")
  num1 = int(input("Please enter a positive number (or a negative number to exit):\n"))
  is_prime(num1)
def为素数(num):
当num>=0时:
如果num%1==num或num%num==0:
打印(num,“是素数”)
elif num%2==0:
打印(num,“不是素数”)
持续
elif num<0:
打印(“完成。感谢您使用该程序!”)
打破
返回0
如果名称=“\uuuuu main\uuuuuuuu”:
打印(“此程序检查给定的数字是否为素数\n”)
num1=int(输入(“请输入一个正数(或一个负数以退出):\n”))
is_素数(num1)
然而,它只有部分权利。它读取并确定素数…但它不是循环回到函数开头,而是无休止地打印它是否是素数的语句。我很确定这是我把while循环放在哪里的问题,但我不完全确定如何解决这个问题。
如果有任何帮助,我们将不胜感激。

您还没有描述您想要的算法;从你的代码中根本不清楚。您的第一个
if
检查输入数字是可被1整除还是可被自身整除。。。它们都是代数重言式


然后,只要输入仍然为正,就重复此操作。由于从不更改
num
的值,因此这是一个非常直接的无限循环。

在if阶梯中,无法使用不同的if测试每个候选因子的可除性

你需要把你在列表中找到的每一个素数都隐藏起来

例如:

搜刮它的想法,但不要逐字复制。顺便说一句,使用math.sqrt()可以大大加快速度


HTH

num
永远不会更改。请解决此条件:
num%num==0
对每个数字都满意算法看起来很奇怪。它现在显然不起作用,但它似乎应该检查一个数字是否可以被2整除。但是一个数字
a
可以被小于或等于
sqrt(a)
的任何数字整除,这就是您应该检查的内容。
继续
是无用的。如果函数在python中找到一个素数,它应该返回
True
def sieve_primes(stop=100000):
    """Yield primes below stop."""
    primes = [2]
    for candidate in range(3, stop + 1, 2):
        if not any(candidate % prime == 0 for prime in primes):
            primes.append(candidate)
            yield candidate


for prime in sieve_primes():
    print(prime)