PDA

View Full Version : Python, need help making error message work


sigkill9
03-14-08, 11:26 PM
I'm trying to create a script that will accept a user entered integer and find only one set of prime numbers that add up to that integer but need some help. The script is supposed to only accept even numbers, and if it encounters an odd number it needs to exit with a "please enter only even numbers" message. I've made some progress on the script, but it still isnt quite rite.

I already tried to code an error message for uneven input numbers, and it sort of works, but see the output below. Instead of displaying one "is not even" message, it displayed several... why?

How can I get it to display just one? (I barely know what i'm doing here... but i'm trying hard to learn)

Heres my code as it is now:

import math
def is_prime(p):
prime = True
if p%2 == 0:
print n,"is not even. Please enter only even numbers."
prime = False
else:
for i in range(3, math.ceil(math.sqrt(p/2)), 2):
if p % i == 0:
prime = False
break
print n,"is not even. Please enter only even numbers."
return prime
n = int(raw_input('Enter number to test: '))

for p in range(3, n/2, 2):
if is_prime(p) and is_prime(n-p):
print n, '= %d + %d' % (p, n-p)
print "Found two prime numbers that sum to",n
break


Here is the output:

Enter number to test: 62
62 = 25 + 37
Found two prime numbers that sum to 62

Enter number to test: 67
67 is not even. Please enter only even numbers.
67 is not even. Please enter only even numbers.
67 is not even. Please enter only even numbers.
67 is not even. Please enter only even numbers.

Thanks! 8)

UnrealEd
03-22-08, 07:54 AM
here's something that might work:
import math
def is_prime(p):
prime = True
if p%2 == 0:
print n,"is not even. Please enter only even numbers."
prime = False
else:
for i in range(3, math.ceil(math.sqrt(p/2)), 2):
if p % i == 0:
prime = False
break
print n,"is not even. Please enter only even numbers."
return prime

n = 1
while True:
n = int(raw_input('Enter an even number to test: '))
if n%2 == 1:
print "Please enter only even numbers"
else:
break;

for p in range(3, n/2, 2):
if is_prime(p) and is_prime(n-p):
print n, '= %d + %d' % (p, n-p)
print "Found two prime numbers that sum to",n
break
I don't really understand why someone is only allowed to enter even numbers. You just need to use the Math.ceil function on n/2 to allow users to use odd numbers