we want to convert names like
Jose P. Rizal to Rizal, Jose P.
Jose P. Rizal Jr. to Rizal Jr., Jose P.
Ma. Jose P. Rizal III to Rizal III, Ma. Jose P.
Here is Python code to perform the conversion. I am wondering if one can write a more elegant version, where by elegant, it does the conversion in a faster, shorter way!
""" file lastfirstname.py author Ernesto P. Adorio, PhD. desc Converts name to last name, first name format. version 0.0.1 july 27, 2011 """ def makestr(sarray, lastindex): """ """ output = "" for s in sarray[:lastindex]: output += (" " + s ) return output def surnamefirstname(name): """ Translates a name in firstname surname to surname, firstname format. Complications arise because surname can include "Jr." or romanized numbers "III" """ parts = name.split() n = len(parts) if n == 2: # easiest case return parts[1] + ", " + parts[0] elif n > 2: if parts[-1].lower() in ["jr.", "jr"]: return parts[-2] +" Jr.," + makestr(parts, -2) elif parts[-1].lower() in ["ii", "iii", "iv", "v"]: return parts[-2] + " " +parts[-1].upper()+ "," + makestr(parts, -2) else: return parts[-1] + "," + makestr(parts, -1) print surnamefirstname("Ma. Jose P. Rizal III")
Post you own better version in the comments. We shall learn together to improve our Python skills.