Генератор цифры в слово - Python

Узнай цену своей работы

Формулировка задачи:

Работаю в django , нужно превратить число, например 34 000, в словестное выражение: тридцать четыре тысячи. Стандартное django.contrib.humanize не подойдходит. Если кто че знает, буду очень благодарен.

Решение задачи: «Генератор цифры в слово»

textual
Листинг программы
#! /usr/bin/python3.2 
# -*- coding: utf-8 -*-
 
from decimal import Decimal
 
 
 
 
 
def transform(trnsfstr):
    trnsfstr = ' '.join(trnsfstr.split())
    trnsfstr = trnsfstr.capitalize()
    return   trnsfstr
 
def triad(number, mass, sort):
    tens = number % Decimal('100')
    tens = int(tens//Decimal('10'))
    ed = number%Decimal('10')
    word = mass[0]
    if tens == 1:
        if ed == 0:
            third_number = 'десять'
        elif ed == 1:
            third_number = 'одиннадцать'
        elif ed == 2:
            third_number = 'двенадцать'
        elif ed == 3:
            third_number = 'тринадцать'
        elif ed == 4:
            third_number = 'четырнадцать'
        elif ed == 5:
            third_number = 'пятнадцать'
        elif ed == 6:
            third_number = 'шестнадцать'
        elif ed == 7:
            third_number = 'семнадцать'
        elif ed == 8:
            third_number = 'восемьнадцать'
        elif ed == 9:
            third_number = 'девятнадцать'
        else:
            third_number = ''
    else:
        if ed == 1:
            if sort == 'w': 
                third_number = 'одна'
                word=mass[1]
            else:
                third_number = 'один'
                word=mass[1]
        elif ed == 2:
            if sort == 'w':
                third_number = 'две'
                word=mass[2]
            else:
                third_number = 'два'
        elif ed == 3:
            third_number = 'три'
            word=mass[2]
        elif ed == 4:
            third_number = 'четыре'
            word=mass[2]
        elif ed == 5:
            third_number = 'пять'
        elif ed == 6:
            third_number = 'шесть'
        elif ed == 7:
            third_number = 'семь'
        elif ed == 8:
            third_number = 'восемь'
        elif ed == 9:
            third_number = 'девять'
        else:
            third_number = ''
    hundred = int(number//Decimal('100'))
    if hundred == 1:
        first_number = 'сто'
    elif hundred == 2:
        first_number = 'двести'
    elif hundred == 3:
        first_number = 'триста'
    elif hundred == 4:
        first_number = 'четыреста'
    elif hundred == 5:
        first_number = 'пятьсот'
    elif hundred == 6:
        first_number = 'шестьсот'
    elif hundred == 7:
        first_number = 'семьсот'
    elif hundred == 8:
        first_number = 'восемьсот'
    elif hundred == 9:
        first_number = 'девятьсот'
    else:
        first_number = ''
    if tens == 2:
        second_number = 'двадцать'
    elif tens == 3:
        second_number = 'тридцать'
    elif tens == 4:
        second_number = 'сорок'
    elif tens == 5:
        second_number = 'пятьдесят'
    elif tens == 6:
        second_number = 'шестьдесят'
    elif tens == 7:
        second_number = 'семьдесят'
    elif tens == 8:
        second_number = 'восемьдесят'
    elif tens == 9:
        second_number = 'девяносто'
    else:
        second_number = ''
    return  first_number + ' ' + second_number + ' ' + third_number + ' ' + word
 
 
 
 
def summ(sum):
    hundred = ['','','','']
    thousand = ['тысяч','тысяча','тысячи']
    million = ['миллионов','миллион','миллиона']
    billion = ['миллиардов', 'миллиард', 'миллиарда']
    sort1 = ['m']
    sum, kop = divmod(sum, 1)
    sum = int(sum)
    kop = int(round(kop, 2) * 100)
    number1 = sum//Decimal('1000000')
    part1 = int(number1)
    number2 = part1
    number2 = sum - number2 * Decimal('1000000')
    part2 = int(number2)
    billionpart = int(part1//Decimal('1000'))
    if billionpart == 0:
        billion_word = ''
    else:
        billion_word = triad(billionpart,billion,sort1)
    mill = part1 % Decimal('1000')
    if mill == 0:
        mill_word=''
    else: 
        mill_word = triad(mill,million,sort1)
    thous = int(part2//Decimal('1000'))
    sort1 = 'w'
    if thous == 0:
        thous_word = ''
    else:
        thous_word = triad(thous,thousand,sort1)
 
    hundredpart = part2%1000
    if hundredpart == 0:
        hundred_word=''
    else:
        sort1='m'
        hundred_word=triad(hundredpart, hundred ,sort1)
    
    if sum < 1: null_word = 'ноль рублей'
    else:
        null_word = ''
    copeck_word = sum%Decimal('1')
    copeck_word = int(copeck_word*100)
    copeck_word = str(kop)
    trnsfstr = billion_word + ' ' + mill_word + ' ' + thous_word + ' ' + hundred_word + ' ' + null_word + 'руб.' + ' ' + copeck_word + ' ' + 'коп.'
    trnsfstr = transform(trnsfstr)
 
    return trnsfstr

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.231 из 5
Похожие ответы