Need help making an error message work in a Python script

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • sigkill9
    New Member
    • Jan 2008
    • 15

    Need help making an error message work in a Python script

    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:
    Code:
        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)
  • bvdet
    Recognized Expert Specialist
    • Oct 2006
    • 2851

    #2
    You placed the print statement in the wrong location. You need a loop to get back to the prompt if the number entered was not even. Convention is to place import statements toward the top of the module outside of your functions.
    [code=Python]import math

    def main():

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

    Comment

    • sigkill9
      New Member
      • Jan 2008
      • 15

      #3
      I tried the code you suggested, but it doesnt do the primary function, which is to print out the two prime numbers that sum the input number.

      Here is the result of the code you provided:

      Enter number to test: 4
      Ener number to test: 4
      >>>
      Enter number to test: 25
      Ener number to test: 25
      25 is not even. Please enter only even numbers.
      >>>
      Ener number to test: 36
      >>>
      Enter number to test: 62
      Ener number to test: 62


      The problem here is the program is not issuing a "not even" message for 25 untill you enter it a second time. The first time you enter 25, it returns to the original prompt.

      When I entered 36, it should have at least found that 31 + 5 = 36, but it didnt, it instead returned to the Python prompt.

      Any ideas why it isnt working correctly?

      Bottom line, i'm trying to get it to recognize the two first prime numbers that sum up to the input number (if any primes do). If the input number IS even and if it does NOT have two prime numbers as its sum, it should print a "no primes for this number" message or similar.

      Comment

      • bvdet
        Recognized Expert Specialist
        • Oct 2006
        • 2851

        #4
        I cannot explain why it does not work for you. Add a return statement after the print statement when two prime number are found. Otherwise the return statement is skipped and you can issue a print statement that no primes were found after exiting the for loop.
        [code=Python]
        import math

        def is_prime(p):
        prime = True
        if p%2 == 0:
        prime = False
        else:
        for i in range(3, int(math.sqrt(p/2))+1, 2):
        if p % i == 0:
        prime = False
        break
        return prime

        def main():

        while True:
        n = int(raw_input(' Ener number to test: '))
        if n%2:
        print n,"is not even. 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
        return

        print "No primes for number %d" % n

        main()[/code]

        Comment

        • sigkill9
          New Member
          • Jan 2008
          • 15

          #5
          got it workin, thanks for the help!!!!

          Comment

          Working...