2016-10-24 3 views
-1

Здравствуйте, я создал эту программу, чтобы проверить, является ли число простым числом. Он работает, но почему-то говорит, что 999 - простое число. Где моя ошибка. Было бы здорово, если бы кто-то объяснил. Спасибо!Программа, которая проверяет, является ли число простым числом

Вот моя программа:

number = raw_input('Enter a Number: ') 
nnumber = int(number) 
prime_range = range(2, nnumber) 

for x in prime_range: 

    if nnumber % x == 0: 
     print 'Not a Prime Number!' 
     break 

    else: 
     print 'Prime Number!' 
     break 
+1

Вашей программы на самом деле тестирование для четных чисел, так как он называет 'break' после первого' if' проверить. Вы можете это увидеть, проверив 9 - что объявляет как простое, так как это странно. – davejagoda

ответ

6

Отслеживать его. x начинается с 2, затем тесты 999 % 2; это 1, поэтому else выполнен, «Prime number!» печатается, и цикл прерывается. Программа заканчивается.

Вместо этого вам необходимо напечатать «Prime number!». только когда вы проверили все возможности для x. Самый простой способ сделать это состоит в Unindent else: (и удалить break есть):

for x in prime_range: 

    if nnumber % x == 0: 
     print 'Not a Prime Number!' 
     break 

else: 
    print 'Prime Number!' 

Python выполняет else из forfor, когда завершается withoout нарушаются: именно то, что вы хотите.

+0

Отличный пункт. Else также может использоваться во многих других ситуациях на python, например, в цикле и обработке исключений. Вы можете прочитать больше на странице http://python-notes.curiousefficiency.org/en/latest/python_concepts/break_else.html. –

+0

Огромное вам спасибо! :) –

+0

Однако сэр, почему мой код работает для других целых чисел? –

1

Если число является простым, это означает, что никакое число равномерно не разделяет его, кроме 1 и самого себя. Это означает, что вам нужно проверить каждое число ниже, прежде чем говорить, что число является простым.

В вашем коде вы выходите из цикла на первой итерации - независимо от того, насколько велика цифра.

0

Решение имеет проблему, может быть только 1 или простое число делится само по себе. Вы считаете, что только 2 из целого не является простым числом, вы должны использовать двойную петлю для выполнения условий суждения

0

вы проверяете только 1-ю итерацию. Независимо от того, является ли он простым или нет, он выходит из цикла, поскольку один из разделов i.e будет выполняться либо «if», либо «else», заставляя цикл прерываться. Логикой будет проверка всего диапазона чисел от 2 до (число/2), и если он делит число в какой-то точке, это не будет простое число. Если цикл завершается после итерации по всему циклу, то это простое число. Надеюсь, вы сможете это сделать сейчас. Благодаря!.

0

Ваш существующий код содержит только те тесты, если введенное вами число делится на 2, а затем выходит из цикла, в зависимости от того, каким образом. Вы должны проверить все значения ниже и единственным выходом, если он действительно находит, что это не простое:

number = raw_input('Enter a Number: ') 
nnumber = int(number) 
prime_range = range(2, nnumber) 

prime = True 

for x in prime_range: 
    if nnumber % x == 0: 
     prime = False 
     break 

if prime: 
    print 'Prime Number!' 
else: 
    print 'Not a Prime Number!' 
Смежные вопросы