1

Тема: Число прописом.

Може кому потрібно буде. Робив для документів. Пише суму прописом.

def chartosrting(razbor) :

    razbor1 = int(razbor)
    str_razbor1 = str(razbor1)
    chisla = ['одна', 'дві', 'три', 'чотири', 'пять', 'шість', 'сім', 'вісім', 'девять', 'десять', 'одинадцять', 'дванадцять', 'тринадцять', 'чотирнадцять', 'пятнадцять', 'шістнадцять', 'сімнадцять', 'вісімнадцять', 'девятнадцять']
    desatki = ['двадцять', 'тридцять', 'сорок', 'пятдесят', 'шістдесят', 'сімдесят', 'вісімдесят', 'девяносто']
    sotni = ['сто', 'двісті', 'триста', 'чотириста', 'пятсот', 'шістсот', 'сімсот', 'вісімсот', 'девятсот']
    tischs = ['гривень', 'тисяч', 'міліонів', 'міліардів']
    #визначаємо кількість триад включая неповні
    len_str = len(str_razbor1)
    kol_mil = len_str/3
    if kol_mil!=int(kol_mil):
        kol_mil += 1
    kol_mil = int(kol_mil)
    marker = 0
    stroka = ''
    while kol_mil>0:
        #обробка сотень, потім їх видаляємо
        kol_mil -=1
        str_min = str_razbor1[marker:marker+len_str-kol_mil*3]
        str_int = int(str_min)
        if str_int>=100:
            str_int_s = int(str_int/100-1)
            stroka += sotni[str_int_s]+' '
            str_int_s += 1
            str_int -= str_int_s*100
    
        #обробка від 20 до 99, потім видаляєто десятки
        if str_int>=20:
            str_int_s = int(str_int/10-2)
            stroka += desatki[str_int_s]+' '
            str_int_s += 2
            str_int -= str_int_s*10
          
        #обробка від 1 до 19
        str_int_s = int(str_int-1)
    
        if int(str_int)==1  and kol_mil>=2 :
            stroka += 'один'+' '
        elif int(str_int)==2 and kol_mil>=2 :
            stroka += 'два'+' '
        else :
            if int(str_int)!=0 :
                stroka += chisla[str_int_s]+' '
    
        marker = marker+len_str-kol_mil*3
        len_str -= len_str-kol_mil*3
        if int(str_min)!=0 :
            if kol_mil==0 and int(str_int)==1 :
                stroka += "гривня"+' '
            elif kol_mil==0 and (int(str_int)==2 or int(str_int)==3 or int(str_int)==4 ) :
                stroka += "гривні"+' '
            elif kol_mil==1 and int(str_int)==1 :
                stroka += "тисяча"+' '
            elif kol_mil==1 and (int(str_int)==2 or int(str_int)==3 or int(str_int)==4 ) :
                stroka += "тисячі"+' '
            elif kol_mil==2 and int(str_int)==1 :
                stroka += "міліон"+' '
            elif kol_mil==2 and (int(str_int)==2 or int(str_int)==3 or int(str_int)==4 ) :
                stroka += "міліони"+' '
            elif kol_mil==3 and int(str_int)==1 :
                stroka += "міліард"+' '
            elif kol_mil==3 and (int(str_int)==2 or int(str_int)==3 or int(str_int)==4 ) :
                stroka += "міліарди"+' '
            else :
                stroka += tischs[kol_mil]+' '

    #обробка копійок
    kop_str = str(int(razbor*100))
    kop_len = len(kop_str)
    kop_str_full = kop_str[kop_len-2:kop_len]
    kop_str = kop_str[kop_len-1:kop_len]
    stroka += kop_str_full + ' '
    if kop_str=='1':
        stroka += 'копійка'
    elif kop_str=='2' or kop_str=='3' or kop_str=='4':
        stroka += 'копійки'
    else:
        stroka += 'копійок'  
    stroka = str.capitalize(stroka)
    return stroka

2

Re: Число прописом.

Орфографія:
правильно не «міліон», «міліард», а «мільйон», «мільярд»;
«п'ять», «п'ятнадцять», «п'ятдесят», «п'ятсот» та «дев'ять», «дев'ятнадцять», «дев'яносто», «дев'ятсот» пишуться через апостроф.

Подякували: koala, Vik_772