def toRoman(number): if number < 1 or number > 3999: raise Exception("Number must be >= 1 and <= 3999") onesMap = { "1": "I", "2": "II", "3": "III", "4": "IV", "5": "V", "6": "VI", "7": "VII", "8": "VIII", "9": "IX" } tensMap = { "10": "X", "20": "XX", "30": "XXX", "40": "XL", "50": "L", "60": "LX", "70": "LXX", "80": "LXXX", "90": "XC" } hundredsMap = { "100": "C", "200": "CC", "300": "CCC", "400": "CD", "500": "D", "600": "DC", "700": "DCC", "800": "DCCC", "900": "CM" } thousandsMap = { "1000": "M", "2000": "MM", "3000": "MMM" } result = "" value = number all = [ thousandsMap, hundredsMap, tensMap, onesMap ] i = 1000 for theMap in all: if value >= i: result += theMap[str(value - value % i)] value %= i i //= 10 return(result) # ------------------------------- # Script Begins Here # ------------------------------- for i in range(1, 4000): print("{0} => {1}".format(i, toRoman(i)))