Farhan T. Sami - 1 month ago 7

Python Question

Hello I have created this program to check if a number is a prime number. It works but for some reason says that 999 is a prime number. Where is my mistake. It would be great if someone explained. Thank You!

Here is my program:

`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

Answer

Trace it. `x`

starts with `2`

, then tests `999 % 2`

; it is `1`

, so `else`

is executed, "Prime number!" is printed, and loop is broken out of. Program ends.

Instead, you need to print "Prime number!" only when you tested all possibilities for `x`

. The easiest way to do that is to unindent `else:`

(and delete `break`

there):

```
for x in prime_range:
if nnumber % x == 0:
print 'Not a Prime Number!'
break
else:
print 'Prime Number!'
```

Python executes `else`

of a `for`

when `for`

completes withoout being broken: exactly what you want.

Source (Stackoverflow)

Comments