# -*- coding: cp1252 -*- def chiffres_romain(n, sep=u"."): s=str(int(n)) l=len(s) def nombre_romain(list_chiffre, res_chiffre, romain, nb_macron, rang, sep): for chiffre_var in list_chiffre: if (4<=res_chiffre<=999 and nb_macron>=1) or (0<=res_chiffre<=999 and nb_macron==0): if rang==0: if 1<=int(chiffre_var)<=3: romain=unicode(("I" + (unichr(772) * nb_macron)) * int(chiffre_var) + romain) rang+=1 elif 4<=int(chiffre_var)<=8: nb=int(chiffre_var)-5 if nb==-1: romain=unicode(("I" + (unichr(772) * nb_macron)) + ("V" + (unichr(772) * nb_macron)) + romain) rang+=1 elif 0<=nb<=3: romain=unicode(("V" + (unichr(772) * nb_macron)) + ("I" + (unichr(772) * nb_macron)) * nb + romain) rang+=1 elif int(chiffre_var)==9: romain=unicode(("I" + (unichr(772) * nb_macron)) + ("X" + (unichr(772) * nb_macron)) + romain) rang+=1 elif int(chiffre_var)==0: romain=unicode(romain) rang+=1 elif rang==1: if 1<=int(chiffre_var)<=3: romain=unicode(("X" + (unichr(772) * nb_macron)) * int(chiffre_var) + romain) rang+=1 elif 4<=int(chiffre_var)<=8: nb=int(chiffre_var)-5 if nb==-1: romain=unicode(("X" + (unichr(772) * nb_macron)) + ((unichr(772) * nb_macron) + "L") + romain) rang+=1 elif 0<=nb<=3: romain=unicode(("L" + (unichr(772) * nb_macron)) + ("X" + (unichr(772) * nb_macron)) * nb + romain) rang+=1 elif int(chiffre_var)==9: romain=unicode(("X" + (unichr(772) * nb_macron)) + ("C" + (unichr(772) * nb_macron)) + romain) rang+=1 elif int(chiffre_var)==0: romain=unicode(romain) rang+=1 elif rang==2: if 1<=int(chiffre_var)<=3: romain=unicode(("C" + (unichr(772) * nb_macron)) * int(chiffre_var) + romain) rang+=1 elif 4<=int(chiffre_var)<=8: nb=int(chiffre_var)-5 if nb==-1: romain=unicode(("C" + (unichr(772) * nb_macron)) + ("D" + (unichr(772) * nb_macron)) + romain) rang+=1 elif 0<=nb<=3: romain=unicode(("D" + (unichr(772) * nb_macron)) + ("C" + (unichr(772) * nb_macron)) * nb + romain) rang+=1 elif int(chiffre_var)==9: romain=unicode(("C" + (unichr(772) * nb_macron)) + ("M" + (unichr(772) * nb_macron)) + romain) rang+=1 elif int(chiffre_var)==0: romain=unicode(romain) rang+=1 elif 1<=res_chiffre<=3 and nb_macron>=1: romain=unicode(sep + ("M" + (unichr(772) * (nb_macron-1))) * res_chiffre + romain) rang=0 return romain nb_macron=0 nc=0 res="" romain=u"" rang=0 for i in range(l-1, -1 ,-1): res=s[i] + res nc+=1 if nc==3: list_chiffre=list(res) list_chiffre.reverse() res_chiffre=int(res) romain=nombre_romain(list_chiffre, res_chiffre, romain, nb_macron, rang, sep) if (4<=res_chiffre<=999 and nb_macron>=1) or (1<=res_chiffre<=999 and nb_macron==0): romain=unicode(sep + romain) elif 1<=res_chiffre<=3 and nb_macron>=1: None nb_macron+=1 nc=0 del res_chiffre del list_chiffre del res res="" try: if 1<=len(res)<=2: list_chiffre=list(res) list_chiffre.reverse() res_chiffre=int(res) romain=nombre_romain(list_chiffre, res_chiffre, romain, nb_macron, rang, sep) del res_chiffre del list_chiffre del res del nc except: None if romain.startswith(sep): romain=romain[1:] if n < 0 and romain[1]==sep: romain=list(romain) del romain[1] romain="".join(romain) return romain