home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Freelog Special Freeware 31
/
FreelogHS31.iso
/
ArgentCompta
/
Bankperfect
/
bp.exe
/
Scripts
/
Numerals
/
numerals.py
< prev
Wrap
Text File
|
2005-09-20
|
4KB
|
126 lines
import BP
def DecToRoman(Value):
vals = [(1000, 'M'), (900, 'CM'), (500, 'D'), (400, 'CD'), (100, 'C'), (90, 'XC'), (50, 'L'), (40, 'XL'), (10, 'X'), (9, 'IX'), (5, 'V'), (4, 'IV'), (1, 'I')]
try:
i = long(Value)
if i < 1 or i > 3999: return ""
Result = ""
for d, r in vals:
while i >= d:
Result += r
i -= d
return Result
except:
return ""
def RomanToDec(Roman):
try:
Dic = {"I": 1, "V": 5, "X": 10, "L": 50, "C": 100, "D": 500, "M": 1000}
Roman = Roman[::-1].upper()
Result = 0
h = Dic[Roman[0]]
for c in Roman:
Current = Dic[c]
if Current >= h:
Result += Current
h = Current
else: Result -= Current
if Result > 3999 or Result < 1: return ""
return str(Result)
except:
return ""
def DecToText(Value):
uni = ['un', 'deux', 'trois', 'quatre', 'cinq', 'six', 'sept', 'huit', 'neuf', 'dix', 'onze', 'douze', 'treize', 'quatorze', 'quinze', 'seize']
diz = ['vingt', 'trente', 'quarante', 'cinquante', 'soixante', '', 'quatre-vingt']
mil = ['cent', 'mille', 'million', 'milliard', 'billion', 'milliers-de-billions', 'trillion']
try:
N = long(Value)
if N < 0: return ""
except:
return ""
if N == 0: return 'ZΘro'
Result = ""
k = 0
while N != 0:
U = N % 10
N = N / 10
D = N % 10
N = N / 10
if D in [1, 7, 9]:
D -= 1
U += 10
s = ''
if D > 1:
s = ' ' + diz[D - 2]
if (D < 8) and ((U == 1) or (U == 11)): s += ' et'
if U > 16:
s += ' ' + uni[9]
U -= 10
if U > 0: s += ' ' + uni[U - 1]
if (Result == '') and (D == 8) and (U == 0): Result = 's'
Result = s + Result
C, N = N % 10, N / 10
if C > 0:
s = ''
if C > 1: s = ' ' + uni[C - 1] + s
s += ' ' + mil[0]
if (Result == '') and (C > 1): Result = 's'
Result = s + Result
if N > 0:
k += 1
I = N % 1000
if (I > 1) and (k > 1): Result = 's' + Result
if I > 0: Result = ' ' + mil[k] + Result
if (I == 1) and (k == 1): N -= 1
return Result.replace('un milliers', 'un millier').replace('llionss', 'llions').strip()
def CloseForm(Sender):
f.Close()
def FChange(Sender):
if Sender.Name == "EditDec":
EditRom.OnChange = None
EditRom.Text = DecToRoman(EditDec.Text)
EditRom.OnChange = FChange
elif Sender.Name == "EditRom":
EditDec.OnChange = None
EditDec.Text = RomanToDec(EditRom.Text)
EditDec.OnChange = FChange
EditTxt.Lines.Text = DecToText(EditDec.Text)
f = CreateComponent("TForm", None)
f.SetProps(Position = "poScreenCenter", Width = 400, Height = 300, Caption = "Conversions numΘriques")
f.Font.Name = "Tahoma"
f.Constraints.MinWidth = 400
f.Constraints.MinHeight = 300
LabelDec = CreateComponent("TLabel", f)
LabelDec.SetProps(Left=20, Top=20, Caption="Chiffres :", Parent=f)
EditDec = CreateComponent("TEdit", f)
EditDec.SetProps(Name="EditDec", Anchors=["akLeft", "akRight", "akTop"], MaxLength=21, Left=20, Top=35, Width=350, Parent=f)
EditDec.Text = ""
LabelRom = CreateComponent("TLabel", f)
LabelRom.SetProps(Left=20, Top=70, Caption="Romains :", Parent=f)
EditRom = CreateComponent("TEdit", f)
EditRom.SetProps(Name="EditRom", CharCase="ecUpperCase", Anchors=["akLeft", "akRight", "akTop"], Left=20, Top=85, Width=350, Parent=f)
EditRom.Text = ""
LabelTxt = CreateComponent("TLabel", f)
LabelTxt.SetProps(Left=20, Top=120, Caption="Lettres :", Parent=f)
EditTxt = CreateComponent("TMemo", f)
EditTxt.SetProps(Left=20, Top=135, Width=350, Height=110, ReadOnly=1, Anchors=["akLeft", "akRight", "akTop", "akBottom"], Parent=f)
EditDec.OnChange = FChange
EditRom.OnChange = FChange
ButtonClose = CreateComponent("TButton", f)
ButtonClose.SetProps(Left=150, Top=260, Width=100, Height=25, Default=1, Cancel=1, Caption="Fermer", Anchors=["akBottom"], OnClick=CloseForm, Parent=f)
f.ShowModal()