Python:输出值差异

问题描述 投票:0回答:1

[我正在跟踪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版本与我的版本不同。但我想认为像这样的简单程序应能产生相同的结果。

python numpy math output primes
1个回答
1
投票

我相信您要编写的代码是:

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列表中。

© www.soinside.com 2019 - 2024. All rights reserved.