Ваше первое и самая большая проблема в том, что вам нужно перечислить n
в качестве параметра isprime
, прежде чем использовать его в isprime
, и прежде чем вы можете передать аргумент в main
. Дополнительную информацию см. В руководстве по адресу Defining Functions. Но в принципе, это так:
def isprime(n):
Кроме того, что x = Prime
собирается поднять NameError
, потому что нет ничего по имени Prime
. Учитывая, что он вообще ничего не делает, вы должны просто удалить его.
Конечно, это не сделает эту полную рабочую функцию первичного тестирования, но это то, как исходить из того, где вы находитесь.
Следующим шагом является рассмотрение, что возвращения из функции. Если вы найдете значение, которое делит n
, то, очевидно, n
не является простым, и поэтому isprime
является ложным. Если вы пройдете все возможности и не найдете ничего, что делит n
, то isprime
это правда. Итак, с двумя операциями return
в нужных местах вы можете закончить функцию.
После того, как это по крайней мере, всегда возвращает истину или ложь, у вас есть ошибки, чтобы исправить. *
Посмотрите на какие номера вы получаете от range(1, n+1, 1)
. Два из этих чисел гарантированно делят любые n
. Как избежать этой проблемы?
После того, как вы его заработали, вы можете работать над его оптимизацией. Если вы посмотрите primality test в Википедии, вы можете увидеть действительно простой способ улучшить наивный тест пробного деления. Немного исследований покажут плюсы и минусы различных алгоритмов. Но если то, что у вас есть, достаточно быстро для ваших целей, обычно не стоит прикладывать больше усилий для оптимизации.
* Вы можете рассмотреть вопрос о написании тестовой программы, которая вызывает isprime
на куче цифр и сравнивает полученные результаты с правильными ответами (для ответов, которые вы уже знаете, с верхней частью головы--не prime, 2 - простое, 17 - простое и т. д.). Это называется Test Driven Development, и это отличный способ, чтобы убедиться, что вы охвачены все возможные случаи, в том числе отклоняющихся значений, как 0, 1, 2, -3 и т.д.
Вы знаете, как сделать это на бумаге, и вы просто возникли проблемы положить его в код? Или вы не знаете, как это сделать? Что такое 'x = Prime'? – csmckelvey
@Takendarkk Я не уверен, как это сделать как на бумаге, так и на коде. Я предполагаю, что X = Prime должен быть сообщением, когда он говорит, что это правда (это означает, что введенный номер является простым). –