Script for creating a hierarchy of directories
One of the things I would do is remove the double occurrence of the strings 'project_euler' and 'codechef'. If you ever have to change one of these in TOP, you are bound to miss the repetition in the functions. 

You should at least use TOP[0] in make_euler_folders() and TOP[1] in make_codechef_folders. A better approach however would be to take both definitions out of TOP and change def safe_make_folder():

TOP = ['spoj', 'functions', 'utilities']

def safe_make_folder(i):
    '''Makes a folder (and its parents) if not present'''
    try:  
        os.makedirs(i)
    except:
        pass


The standard function os.makedirs() creates the 'project_euler' resp. 
'codechef', as the first subdirectory of each is created.



The other is that I would create the directory names using os.path.join() (as it prevents e.g. the mistake of providing double path separators), in combination with standard string formatting to get the leading zeros on the subfolder names:

os.path.join('project_euler', '{:03}_{:03}'.format(i, i+49))


the {:03} gives a 3 character wide field with leading zeros. @Josay improvemed function would then become:

def make_euler_folders(highest):
    for i in (os.path.join('project_euler', '{:03}_{:03}'.format(i, i+49)) \
       for i in range(1,highest, 50)):
        safe_make_folder(i)


And the other function would become:

def make_codechef_folders(codechef):
    for i in codechef:
        safe_make_folder(os.path.join('codechef', i))