import time
import hashlib
#######################################################
h = hashlib.md5()
#######################################################

def convert_b16_to_b10(hexdigitchar):

    result = 0
    if(hexdigitchar == "0"):
        result = 0
    elif(hexdigitchar == "1"):
        result = 1
    elif(hexdigitchar == "2"):
        result = 2
    elif(hexdigitchar == "3"):
        result = 3
    elif(hexdigitchar == "4"):
        result = 4
    elif(hexdigitchar == "5"):
        result = 5
    elif(hexdigitchar == "6"):
        result = 6
    elif(hexdigitchar == "7"):
        result = 7
    elif(hexdigitchar == "8"):
        result = 8
    elif(hexdigitchar == "9"):
        result = 9
    elif(hexdigitchar == "a"):
        result = 10
    elif(hexdigitchar == "b"):
        result = 11
    elif(hexdigitchar == "c"):
        result = 12
    elif(hexdigitchar == "d"):
        result = 13
    elif(hexdigitchar == "e"):
        result = 14
    else:
        result = 15

    return result


def randbelow(r):

    pool = ""
    nibble = (r // 16) + 1
    counter = 0
    result = 0

    while(counter < nibble):
        h.update(time.asctime().encode('utf-8'))
        pool = pool + h.hexdigest()
        counter = counter + 1

    counter = 0
    while(counter < nibble):
        result = result + convert_b16_to_b10(pool[counter])
        counter = counter + 1

    #### result now has a random value but not necessarily in range ###########
    result = result % r

    return result


############### Main #############################

rstr = input("Enter an integer range: ")
r = int(rstr)
while(rstr != "Q" and rstr != "q"):
    randnum = randbelow(r)
    print("Random value is: " + str(randnum))
    rstr = input("Enter <q> to quit: ")


