BASIC_ROMAN_NUMBERS = [ "M", "CM", "D", "CD", "C", "XC",
"L", "VL", "XL", "X", "IX", "V", "IV", "I" ]
BASIC_VALUES = [ 1000, 900, 500, 400, 100, 90,
50, 45, 40, 10, 9, 5, 4, 1 ]
def int2rom(val):
remainder=val
s=''
if val<1 or val>3999: return "ERROR"
for i in range(len(BASIC_VALUES)):
while remainder>=BASIC_VALUES[i]:
s+=BASIC_ROMAN_NUMBERS[i]
remainder -= BASIC_VALUES[i]
return s
def rom2int(s):
index=0
value=0
for i in range(len(BASIC_ROMAN_NUMBERS)):
sRom= BASIC_ROMAN_NUMBERS[i]
lensRom=len(sRom)
while s[index:index+lensRom]==sRom:
value += BASIC_VALUES[i]
index += lensRom
if int2rom(value)!="ERROR":
return value
else: return "%s: ILLEGAL ROMAN NUMBER => %d?"%(s,value)
print '1492 %s' %int2rom(1492) #=> abrege: MCDXCII ok
print '1854 %s' %rom2int('MDCCCLIV') #=> 1854 ok
print '45a %s' %rom2int('VL') #45 abbrege ok
print '1911a %s' %rom2int('MCMXI') #1911 abrege ok