Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我不知道为什么,但是当我运行下面的代码时,它返回9作为素数_Python - Fatal编程技术网

Python 我不知道为什么,但是当我运行下面的代码时,它返回9作为素数

Python 我不知道为什么,但是当我运行下面的代码时,它返回9作为素数,python,Python,我应该做一个函数,它接受一个整数并返回是否为素数,但出于某种原因,它返回9作为素数 def prime(x): if x == 0 or x == 1: return "not prime" elif x == 2: return "prime" else: for numbers in range(2,x): if x % numbers == 0:

我应该做一个函数,它接受一个整数并返回是否为素数,但出于某种原因,它返回9作为素数

def prime(x):
    if x == 0 or x == 1:
        return "not prime"
    elif x == 2:
           return "prime"
    else:
      for numbers in range(2,x):
       if x % numbers == 0:
            return "not prime"
       else:
            return "prime"

for i in range(20):
    print (i, prime(i))

第一个数字不是偶数就是素数

9是代码中真正显示错误的第一个数字

错误是:如果一个测试失败,则返回“prime”。由于
9%2
不是0,因此测试失败

(天真地)重写为:

因此,如果循环结束时没有返回数值,则该数值为素数

注意,有更好更快的方法来测试素性。例如,不要循环到
x-1
,而是循环到
x
(包括在内)的平方根,因为该值之后不存在除数

 for numbers in range(2,int(x**0.5)+1):

您的代码将在第一次迭代时返回一个答案,此时它将停止迭代:

for numbers in range(2,x):
  if x % numbers == 0:
    return "not prime"
  else:
    return "prime"
这是从2开始的,如果它均匀地进入x,它返回not prime,如果不是,它返回prime,无论哪种方式它都会停止

for numbers in range(2,x):
  if x % numbers == 0:
    return "not prime"
return "prime"
不过,这会起作用,因为只有当所有数字都没有返回“not prime”时,它才会返回“prime”。

否则:在第一次迭代时,当
数字
为2时,才会返回“prime”
。。。
for numbers in range(2,x):
  if x % numbers == 0:
    return "not prime"
return "prime"