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!"