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 语句应在外循环中,它的值在此处确定。
我正在关注 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 语句应在外循环中,它的值在此处确定。