# L-29 MCS 260 Fri 18 Mar 2016 : time_iftry.py

"""
With the time module we investigate the claim
that try-except statements are more costly than
if-else statements.
"""

from random import randint, seed

def ifelse(nbr):
    """
    Does nbr divisions of p by q,
    checks first if q is zero.
    """
    count = 0
    for _ in range(nbr):
        num = randint(-1, 1)
        den = randint(0, 1)
        if den != 0:
            result = num/den
        else:
            count = count + 1
    print('#divisions by zero :', count)

def tryexcept(nbr):
    """
    Does nbr divisions of p by q,
    treats zero q as exception.
    """
    count = 0
    for _ in range(nbr):
        num = randint(-1, 1)
        den = randint(0, 1)
        try:
            result = num/den
        except ZeroDivisionError:
            count = count + 1
    print('#divisions by zero :', count)

def main():
    """
    Compares the efficiency of if-else with
    the try-except to avoid division by zero.
    """
    import time
    nbr = 1000000
    seed(2)
    starttime = time.clock()
    ifelse(nbr)
    stoptime = time.clock()
    elapsed = stoptime - starttime
    print('if-else: %.2f seconds' % elapsed)
    seed(2)
    starttime = time.clock()
    tryexcept(nbr)
    stoptime = time.clock()
    elapsed = stoptime - starttime
    print('try-except: %.2f seconds' % elapsed)

if __name__ == "__main__":
    main()
