# Some functions to convert to # and from Roman numerals # for numbers n with # 0 < n < 5000 # # (c) 2/2008 Goetz Schwandtner # # see www.schwandtner.info def rdigit(dig, chrs): "returns digit from chrs-1,5,10" if dig==9: return chrs[0]+chrs[2] if dig==4: return chrs[0]+chrs[1] if dig>4: return chrs[1]+(dig-5)*chrs[0] else: return dig*chrs[0] def toroman(n): "roman numeral string of n<4000" return "M"*(n/1000)+rdigit(n/100%10,"CDM")+rdigit(n/10%10,"XLC")+rdigit(n%10,"IVX") def ddigit(digs, dstr): "first digits value, rest dstr" if dstr[0:2]==digs[0]+digs[2]: return 9,dstr[2:] if dstr[0:2]==digs[0]+digs[1]: return 4,dstr[2:] v,i=0,0 if dstr[0]==digs[1]: v,i=5,1 while dstr[i]==digs[0]: v,i=v+1,i+1 if i<5: return v,dstr[i:] else: return None def todec(s): "decimal value of Roman number s" m,s=ddigit("Mxx",s+".") c,s=ddigit("CDM",s) x,s=ddigit("XLC",s) i,s=ddigit("IVX",s) if s==".": return m*1000+c*100+x*10+i else: return None