What is wrong with this isPrime function?

Question:

I’m making an isPrime function. Any odd number that I put in (unless it’s 1, 2 or 3, which break it) says that it is prime even when they clearly aren’t.

from even import *

num = input("What number? ")


def isPrime(n):
   n = int(n)
   if isEven(n):
      return False

   i = 2
   while i < n:
      a = n / i
      if isinstance(a, int):
          return False

      else:
          d = n - 2
          if i == d:
              return True

          else:
              i += 1


if isPrime(num) is True:
   print(num + " is a prime number!")

if isPrime(num) is False:
   print(num + " is not a prime number!")

And the code for the isEven function is here:

def isEven(num):
    if num == 0:
        return True

    elif num % 2 == 0:
        return True

    else:
        return False

What am I doing wrong? Also, any general tips for improving my code?

Asked By: iamdeedz

||

Answers:

Here is what you meant to type. This is not the best way, but this is parallel to the approach you were taking:

def isEven(num):
    return num % 2 == 0

def isPrime(n):
    if isEven(n):
        return False

    for i in range(2,n//2):
        if n % i != 0:
            return False
    return True

num = int(input("What number? "))

if isPrime(num):
    print(num, "is a prime number!")
else:
    print(num, "is not a prime number!")
Answered By: Tim Roberts
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.