def parse_uk_postcode(postcode):
    postcode = postcode.replace(' ', '').upper()
    if len(postcode) <= 4:
        return postcode, ''
    else:
        return postcode[:-3], postcode[-3:]

if __name__ == '__main__':
    # Self test
    test_data = [
                 ('cr0 2yr' , ('CR0',  '2YR')),
                 ('cr02yr'  , ('CR0',  '2YR')),
                 ('dn16 9aa', ('DN16', '9AA')),
                 ('dn169aa' , ('DN16', '9AA')),
                 ('ec1a 1hq', ('EC1A', '1HQ')),
                 ('ec1a1hq' , ('EC1A', '1HQ')),
                 ('m2 5bq'  , ('M2'  , '5BQ')),
                 ('m25bq'   , ('M2'  , '5BQ')),
                 ('m34 4ab' , ('M34' , '4AB')),
                 ('m344ab'  , ('M34' , '4AB')),
                 ('sw19 2et', ('SW19', '2ET')),
                 ('sw192et' , ('SW19', '2ET')),
                 ('w1a 4zz' , ('W1A' , '4ZZ')),
                 ('w1a4zz'  , ('W1A' , '4ZZ')),
                 ('cr0'     , ('CR0' , ''   )),
                 ('sw19'    , ('SW19', ''   )),
                ]
    failures = 0
    for postcode, required_result in test_data:
        actual_result = parse_uk_postcode(postcode)
        if actual_result != required_result:
            failures += 1
            print 'Failed:', repr(actual_result), '!=', repr(required_result), \
                  'for input postcode =', repr(postcode)
    if failures:
        print failures, "failures"
    else:
        print "Passed!"