Python: 输出值不一致

Python: Discrepancy in output values

我正在关注 3Blue1Brown 在此处找到的在线 Youtube 视频:Youtube:3Blue1Brown 我正在使用他的查找素数实现。您可以在视频中看到该程序和他的第一组输出@1:10。

现在,他使用 Python v.3.7.0,我使用 Python v.3.7.4。我安装了 Numpy,我的解释器集成到 Window 的命令提示符中。我没有创建实际的 Python 文件,我只是 运行 直接在 Python 的解释器中的代码。

这是程序和我的结果的整个命令提示输出的副本...

C:\Users\skilz99>python
Python 3.7.4 (tags/v3.7.4:e09359112e, Jul  8 2019, 20:34:20) [MSC v.1916 64 bit
(AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> import math
>>>
>>> def get_primes(n_min, n_max):
...     result = []
...     for x in range(max(n_min, 2), n_max):
...         has_factor = False
...         for p in range(2, int(np.sqrt(x)) + 1):
...             if x % p == 0:
...                 has_factor = True
...                 break
...             if not has_factor:
...                 result.append(x)
...     return result
...
>>> get_primes(0,50)
[5, 7, 9, 11, 11, 13, 13, 15, 17, 17, 17, 19, 19, 19, 21, 23, 23, 23, 25, 25, 25
, 27, 29, 29, 29, 29, 31, 31, 31, 31, 33, 35, 35, 35, 37, 37, 37, 37, 37, 39, 41
, 41, 41, 41, 41, 43, 43, 43, 43, 43, 45, 47, 47, 47, 47, 47, 49, 49, 49, 49, 49
]
>>>

为什么我得到的结果和他的完全不一样?不知道是不是Python的版本不一样,还是他用的Numpy的版本和我的不一样。但我想像这样一个简单的程序应该会产生相同的结果。

我认为您要编写的代码是:

import numpy as np
import math
def get_primes(n_min, n_max):
    result = []
    for x in range(max(n_min, 2), n_max):
        has_factor = False
        for p in range(2, int(np.sqrt(x)) + 1):
            if x % p == 0:
                has_factor = True
                break
        if not has_factor:
            result.append(x)
    return result
get_primes(0,50)

问题是第二个 if 语句,它决定 x 是否应该附加到 result 列表。

x 每次迭代只应附加一次,因此 if 语句应在外循环中,它的值在此处确定。