вот код паскаля, думаю перевести на питон проблемы не будет :)
Function SumToStr(Sum:String):String;
label fin,fik;
var M:Word;
temp,S,fl,dg,sd: string;
begin
S:=Sum;
M:=pos('.',s); dg:=s;fl:='';
if M<>0 then begin fl:=copy(s,M+1,Length(s));dg:=copy(s,1,M-1);end
else
begin
M:=pos(',',s);
if M<>0 then begin fl:=copy(s,M+1,Length(s));dg:=copy(s,1,M-1);end;
end;
if fl='' then fl:='00 ';
if (dg='')or(dg='0') then goto fin;
sd:='';M:=0;s:='';
While length(dg)>0 do
begin
if (length(dg) mod 3)=0 then
begin
case dg[1] of
'1': sd:=sd+'сто ';
'2': sd:=sd+'двісті ';
'3': sd:=sd+'триста ';
'4': sd:=sd+'чотириста ';
'5': sd:=sd+'п''ятсот ';
'6': sd:=sd+'шістсот ';
'7': sd:=sd+'сімсот ';
'8': sd:=sd+'вісімсот ';
'9': sd:=sd+'дев''ятсот ';
'0': inc(M);
end;s:=s+dg[1];dg:=copy(dg,2,length(dg));
end else
if (length(dg)=8)or(length(dg)=5)or(length(dg)=2) then
begin
if dg[1]='1' then
begin
case dg[2] of
'0': sd:=sd+'десять ';
'1': sd:=sd+'одинадцять ';
'2': sd:=sd+'дванадцять ';
'3': sd:=sd+'тринадцять ';
'4': sd:=sd+'чотирнадцять ';
'5': sd:=sd+'п''ятнадцять ';
'6': sd:=sd+'шістнадцять ';
'7': sd:=sd+'сімнадцять ';
'8': sd:=sd+'вісімнадцять ';
'9': sd:=sd+'дев''ятнадцять ';
end;
s:=s+dg[1]+dg[2];
if length(dg)=2 then begin dg:='9';goto fik;end;
dg:='9'+copy(dg,3,length(dg));goto fik;
end else
begin
case dg[1] of
'2': sd:=sd+'двадцять ';
'3': sd:=sd+'тридцять ';
'4': sd:=sd+'сорок ';
'5': sd:=sd+'п''ятдесят ';
'6': sd:=sd+'шістдесят ';
'7': sd:=sd+'сімдесят ';
'8': sd:=sd+'вісімдесят ';
'9': sd:=sd+'дев''яносто ';
'0': inc(M);
end;
s:=s+dg[1];
dg:=copy(dg,2,length(dg));
end;
end else
begin
case dg[1] of
'1': if (length(dg)-1)<>6 then sd:=sd+'одна ' else sd:=sd+'один ';
'2': sd:=sd+'дві ';
'3': sd:=sd+'три ';
'4': sd:=sd+'чотири ';
'5': sd:=sd+'п''ять ';
'6': sd:=sd+'шість ';
'7': sd:=sd+'сім ';
'8': sd:=sd+'вісім ';
'9': sd:=sd+'дев''ять ';
'0': inc(M);
end;
s:=s+dg[1];
fik: if (dg='')or((length(dg)-1)=0) then
begin
case dg[1] of
'1' : sd:=sd+'гривня ';
'2'..'4' : sd:=sd+'гривні ';
else sd:=sd+'гривень ';
end;
dg:='';s:=s+','+fl;
end else
if (length(dg)-1)=3 then
begin
case dg[1] of
'1' : sd:=sd+'тисяча ';
'2'..'4' : sd:=sd+'тисячі ';
else if M<>3 then sd:=sd+'тисяч ';
end;
dg:=copy(dg,2,length(dg));s:=s+'.';
end else
if (length(dg)-1)=6 then
begin
case dg[1] of
'1' : sd:=sd+'мільйон ';
'2'..'4' : sd:=sd+'мільйона ';
else sd:=sd+'мільйонів ';
end;
dg:=copy(dg,2,length(dg));s:=s+'.';
end else dg:=copy(dg,2,length(dg));
end;
end;
fin:
If Length(fl) < 2 then fl:=fl+'0';
Temp:=Sd[1];
Temp:=AnsiUpperCase(Temp);
Sd[1]:=Temp[1];
Result:=sd+fl+' коп.';
end;