2014-11-24 3 views
-2

Я новичок в Python, и я пытаюсь написать код, который проверяет, является ли число простым. До сих пор я это написал:Python: определение, является ли число простым

def main(): 
    n = input("Enter number:") 
    isprime(n) 

def isprime(): 
    x = Prime 
    for m in range (1,n+1,1) 
     result = n % m 
     print result 


main() 

Я не уверен, как действовать после этого. Я знаю, что должен определить isprime. Любая помощь будет принята с благодарностью. Спасибо!

+0

Вы знаете, как сделать это на бумаге, и вы просто возникли проблемы положить его в код? Или вы не знаете, как это сделать? Что такое 'x = Prime'? – csmckelvey

+0

@Takendarkk Я не уверен, как это сделать как на бумаге, так и на коде. Я предполагаю, что X = Prime должен быть сообщением, когда он говорит, что это правда (это означает, что введенный номер является простым). –

ответ

2

Ваше первое и самая большая проблема в том, что вам нужно перечислить 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 и т.д.

1

Ваш isprime довольно близко. Первая строка x = Prime не нужна, поэтому давайте избавимся от нее.

Теперь давайте посмотрим на то, что вы делаете следующий:
Вы, кажется, хотите, чтобы проверить, есть ли какие-либо цифры, которые делят n отлично. Хотя это правильный подход, вы указываете n и 1 в числах, которые вы тестируете. Это неверно по понятным причинам.

Ошибка: вы используете n, не определяя его (я думаю, вы хотите, чтобы он был параметром вашей функции). Так что давайте все это вместе:

def isprime(n): 
    for m in range(2, n): 
     if not n%m: # m divides n perfectly 
      return False 
    return True # if n were not prime, the function would have already returned 

Но сделать еще один шаг, вы действительно не должны проверять каждое число между 2 и n-1. Вам просто нужно проверить номера между 2 и квадратный корень из n:

def isprime(n): 
    for m in range(2, int(n**0.5)+1): 
     if not n%m: 
      return False 
    return True 
+1

или еще один следующий шаг: 'return all (n% m для m в диапазоне (2, int (n ** 0,5 + 1)))' – ch3ka

Смежные вопросы