Python: Расхождение в выходных значениях - PullRequest
1 голос
/ 09 мая 2020

Я слежу за онлайн-видео 3Blue1Brown на Youtube, которое можно найти здесь: Youtube: 3Blue1Brown и я использую его реализацию поиска простых чисел. Вы можете увидеть программу и первый набор его выходов @ 1:10 на видео.

Теперь он использует Python v.3.7.0, а я Python v.3.7.4. У меня установлено Numpy, и мой интерпретатор интегрирован в командную строку Windows. Я не создаю фактический файл 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 отличается от моей. Но мне хотелось бы думать, что такая простая программа должна давать такие же результаты.

1 Ответ

1 голос
/ 09 мая 2020

Я считаю, что код, который вы пытаетесь написать, выглядит следующим образом:

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. list.

x следует добавлять только один раз за итерацию, поэтому оператор if должен находиться на внешнем l oop, где определяется его значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...