【问题标题】:Python: Discrepancy in output valuesPython:输出值的差异
【发布时间】:2020-05-09 00:02:15
【问题描述】:

我正在关注 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 没有将其检测为错误,因为它仍然是有效的 Python 代码,但执行了错误的缩进...我认为它不正确地解析代码并给我带来了不良结果...我将进行必要的编辑并查看如果它能解决我的问题!
  • 这部分if not has_factor:不应该在内循环之外吗?
  • 我提到了不正确的缩进,我用正确的缩进再次输入了程序,我得到了正确的值。是的,它应该是外循环的一部分,但在内循环之外!直到我发布了这个问题后,它才开始对我产生影响!

标签: python numpy math output primes


【解决方案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 列表中。

x 每次迭代只应附加一次,因此 if 语句应位于确定其值的外部循环中。

【讨论】:

  • 是的,我在发布问题后注意到了不正确的缩进...我盯着它看了超过 15 分钟,它正在接近我...所以我在这里问了,然后在我发布之后它,我注意到不正确的缩进...我只是更习惯于具有范围块的 C/C++ 语言...
  • 即使我在您发布此内容之前就知道了,但我会继续接受您的回答,因为这是正确的解决方案!
  • 我对 Python 有点陌生,大约 6 个月前我才开始学习它,我已经熟悉 C/C++ 超过 20 年......我不使用Python 经常出现,但我有点喜欢这种语言,所以我将它用于简单的事情......如果我想从一个简单函数中快速得到一个值范围内的结果等,但我主要做 3D 图形类型编程,因此,我更喜欢将 C/C++ 与 DirectX、OpenGL 和 Vulkan 一起使用...
  • @FrancisCugler 谢谢!很高兴看到人们冒险使用其他编程语言,这让我们回到了我们不了解那么多并犯了一些愚蠢错误的时代,但这就是学习的意义,犯错误并修复它们,我觉得这是一个学习 Haskell XD 时很多。祝贺你的职业生涯,我是计算机图形学的爱好者,这是一个很棒的领域。继续编码;D
  • 我最近也开始学习 Java - JavaScript,因为我一直在 youtube 上关注 Dan 的编码挑战……来自 Coding Train……我也有点熟悉 Assembly,但我很少使用它,除非我出于性能原因试图通过编写内联汇编来使特定的 C++ 代码块尽可能高效......我不只是使用 3D 图形,我还在学习硬件仿真、编译器设计和 ISA 架构一直到逻辑级和电子元件级。我数学很好,但我也喜欢物理!
猜你喜欢
  • 1970-01-01
  • 2020-11-30
  • 1970-01-01
  • 1970-01-01
  • 2018-05-02
  • 1970-01-01
  • 2019-08-14
  • 2013-12-25
相关资源
最近更新 更多