#!/usr/bin/python

def factorial (n):

    def factorial_iter (n): # n > 0
        p = 1
        # INV: n_0! = p * n!
        while n > 0:
            p = p*n
            n = n-1
        return p
    # def factorial_iter ends here
    
    if isinstance(n, int):
        if n < 0:
            print 'Factorial undefined for negative integers'
            return None
        elif n == 0:
            return 1
        else: # n:int > 0
            return factorial_iter (n)
    else: # n is not an integer
        print 'Factorial not defined for reals'
        return None

print factorial (6)
