Beispiel #1
1
    def numbers_in_words(self, with_cents=False, currency=''):
        if self.is_valid():
            result = self.cleaned_data['input_data']

            if with_cents:
                try:
                    result = decimal2text(decimal.Decimal(result))
                except decimal.InvalidOperation:
                    result = result.replace(',', '.')
                    result = ''.join(
                        list(filter(lambda x: x in '1234567890.', result)))
                    if result.count('.') > 1:
                        result = result.split('.')
                        result_head = ''.join(result[:-1])
                        result = result_head + '.' + result[-1]
                        result = decimal2text(decimal.Decimal(result))
                except IndexError:
                    result = f'Я пока не умею обрабатывать числа больше 999,999,999,999.99 ' \
                             f'({num2text(999999999999.99)}'
            else:
                try:
                    result = num2text(int(result))
                except ValueError:
                    result = (''.join(
                        list(filter(lambda x: x.isnumeric(), result))))
                    result = num2text(int(result))
                except IndexError:
                    result = f'Я пока не умею обрабатывать числа больше 999 999 999 999 ' \
                             f'({num2text(999999999999)}'

            result = result.capitalize()
            if currency:
                pass
            self.cleaned_data['result'] = result
        return self
Beispiel #2
0
def text_price(decimal_price):
    decimal_price = Decimal(round(decimal_price * 100) / 100)
    male_units = ((u'рубль', u'рубля', u'рублей'), 'm')
    female_units = ((u'копейка', u'копейки', u'копеек'), 'f')
    if len(str(decimal_price).split('.')) > 1:
        total_cost_rubles, total_cost_copecks = str(decimal_price).split('.')
        total_cost_copecks = total_cost_copecks[:2]
    else:
        total_cost_rubles = str(decimal_price)
        total_cost_copecks = str(00)
    text_result = num2text(int(total_cost_rubles), male_units)
    text_result += ' ' + num2text(int(total_cost_copecks), female_units)
    return text_result
Beispiel #3
0
 def test_orders(self):
     self.assertEqual(num2text(1000), u'одна тысяча')
     self.assertEqual(num2text(2000), u'две тысячи')
     self.assertEqual(num2text(5000), u'пять тысяч')
     self.assertEqual(num2text(1000000), u'один миллион')
     self.assertEqual(num2text(2000000), u'два миллиона')
     self.assertEqual(num2text(5000000), u'пять миллионов')
     self.assertEqual(num2text(1000000000), u'один миллиард')
     self.assertEqual(num2text(2000000000), u'два миллиарда')
     self.assertEqual(num2text(5000000000), u'пять миллиардов')
Beispiel #4
0
 def form_valid(self, form):
     message = '{product_name} / {quarter} написал: '.format(
         product_name=form.cleaned_data.get('product_name').encode('utf-8'),
         quarter=form.cleaned_data.get('quarter'),
         num_contract=form.cleaned_data.get('num_contract'),
         contract_date=form.cleaned_data.get('contract_date').encode(
             'utf-8'),
         name_provider=form.cleaned_data.get('name_provider').encode(
             'utf-8'),
         boss_provider=form.cleaned_data.get('boss_provider').encode(
             'utf-8'),
         provider_const=form.cleaned_data.get('provider_const').encode(
             'utf-8'),
         sum_contract=form.cleaned_data.get('sum_contract'),
         accepted_sum=form.cleaned_data.get('accepted_sum'),
         sum_cancel=form.cleaned_data.get('sum_cancel'))
     message += "\n\n{0}".format(form.cleaned_data.get('contract_date'))
     template = webodt.ODFTemplate('test.odt')
     context = dict(product_name=form.cleaned_data.get('product_name'),
                    quarter=form.cleaned_data.get('quarter'),
                    num_contract=form.cleaned_data.get('num_contract'),
                    contract_date=form.cleaned_data.get('contract_date'),
                    name_provider=form.cleaned_data.get('name_provider'),
                    boss_provider=form.cleaned_data.get('boss_provider'),
                    provider_const=form.cleaned_data.get('provider_const'),
                    sum_contract=form.cleaned_data.get('sum_contract'),
                    accepted_sum=form.cleaned_data.get('accepted_sum'),
                    sum_cancel=form.cleaned_data.get('sum_cancel'),
                    accepted_sum_word=num2text(
                        form.cleaned_data.get('accepted_sum')))
     #balance=num2text(form.cleaned_data.get('phone')-form.cleaned_data.get('name')))
     document = template.render(Context(context))
     docx = conv.convert(document, format='docx')
     document.close()
     return super(ContactCreateView, self).form_valid(form)
Beispiel #5
0
def dig_c(word, count, previous):
    stress1, syll1 = one.w_syll(word)
    if count != 0:
        syll1 = syll1 + count - 1
        stress1 = stress1 + count - 1
    buff1 = buff2 = previous
    if syll1 == 1:  #однослоговые числа
        buff1 = random.choice([0, 2, 3, 5, 6, 7, 100])
        if (buff1 == previous):
            buff1 = random.choice([0, 2, 3, 5, 6, 7, 100])
        return (buff1)
    else:
        for number in range(20):  #переборчик (топорно)
            st_num = two.num2text(number)
            stress2, syll2 = one.w_syll(st_num)
            #print(stress1, syll1)
            if stress2 == stress1 and syll2 == syll1 and number != previous:
                return (number)
            else:
                if (syll2 == syll1 and number != previous):
                    buff1 = number
                if (stress2 == stress1):
                    buff2 = number
        if (buff1 != -1):  #Количество слогов важнее! Чтоб не нарушать ритм!
            return (buff1)
        else:
            if buff2 < 0 or buff2 == previous:
                buff2 = random.randint(0, 200)  #Такого не бывало, но вдруг...
            return (buff2)
Beispiel #6
0
 def form_valid(self, form):
     message = '{product_name} / {quarter} написал: '.format(
         product_name=form.cleaned_data.get('product_name').encode('utf-8'),
         quarter=form.cleaned_data.get('quarter'),
         num_contract=form.cleaned_data.get('num_contract'),
         contract_date=form.cleaned_data.get('contract_date').encode('utf-8'),
         name_provider=form.cleaned_data.get('name_provider').encode('utf-8'),
         boss_provider=form.cleaned_data.get('boss_provider').encode('utf-8'),
         provider_const=form.cleaned_data.get('provider_const').encode('utf-8'),
         sum_contract=form.cleaned_data.get('sum_contract'),
         accepted_sum=form.cleaned_data.get('accepted_sum'),
         sum_cancel=form.cleaned_data.get('sum_cancel'))
     message += "\n\n{0}".format(form.cleaned_data.get('contract_date'))
     template = webodt.ODFTemplate('test.odt')
     context = dict(product_name=form.cleaned_data.get('product_name'),
     quarter=form.cleaned_data.get('quarter'),
     num_contract=form.cleaned_data.get('num_contract'),
     contract_date=form.cleaned_data.get('contract_date'),
     name_provider=form.cleaned_data.get('name_provider'),
     boss_provider=form.cleaned_data.get('boss_provider'),
     provider_const=form.cleaned_data.get('provider_const'),
     sum_contract=form.cleaned_data.get('sum_contract'),
     accepted_sum=form.cleaned_data.get('accepted_sum'),
     sum_cancel=form.cleaned_data.get('sum_cancel'),
     accepted_sum_word=num2text(form.cleaned_data.get('accepted_sum')))
     #balance=num2text(form.cleaned_data.get('phone')-form.cleaned_data.get('name')))
     document = template.render(Context(context))
     docx = conv.convert(document, format='docx')
     document.close()
     return super(ContactCreateView, self).form_valid(form)
Beispiel #7
0
 def test_inter_oreders(self):
     self.assertEqual(num2text(1100), u'одна тысяча сто')
     self.assertEqual(num2text(2001), u'две тысячи один')
     self.assertEqual(num2text(5011), u'пять тысяч одиннадцать')
     self.assertEqual(num2text(1002000), u'один миллион две тысячи')
     self.assertEqual(num2text(2020000), u'два миллиона двадцать тысяч')
     self.assertEqual(num2text(5300600), u'пять миллионов триста тысяч шестьсот')
     self.assertEqual(num2text(1002000000), u'один миллиард два миллиона')
     self.assertEqual(num2text(2030000000), u'два миллиарда тридцать миллионов')
     self.assertEqual(num2text(1234567891),
                      u'один миллиард двести тридцать четыре миллиона '
                      u'пятьсот шестьдесят семь тысяч '
                      u'восемьсот девяносто один')
Beispiel #8
0
    def test_main_units(self):
        male_units = ((u'рубль', u'рубля', u'рублей'), 'm')
        female_units = ((u'копейка', u'копейки', u'копеек'), 'f')
        self.assertEqual(num2text(101, male_units), u'сто один рубль')
        self.assertEqual(num2text(102, male_units), u'сто два рубля')
        self.assertEqual(num2text(105, male_units), u'сто пять рублей')

        self.assertEqual(num2text(101, female_units), u'сто одна копейка')
        self.assertEqual(num2text(102, female_units), u'сто две копейки')
        self.assertEqual(num2text(105, female_units), u'сто пять копеек')

        self.assertEqual(num2text(0, male_units), u'ноль рублей')
        self.assertEqual(num2text(0, female_units), u'ноль копеек')

        self.assertEqual(num2text(3000, male_units), u'три тысячи рублей')
Beispiel #9
0
def insert_numbers(words):
    """Replace numeric words with digital numbers"""
    # todo: strip small letters from numbers, like 5-и, 5м
    ans = []
    for word in words:
        if word.isdigit():
            ans = ans + util.tokenize(num2text(int(word)))
        else:
            ans.append(word)
    return ans
Beispiel #10
0
def anum2text(word, gen, sing_plur, cas):
    anum = None
    num = num2text(int(rom2arab(word)))
    num_lst = num.split()
    if len(num_lst) == 1:
        anum = num2anum(num, gen, sing_plur, cas)
    else:
        anum = " ".join(num_lst[:-1]) + " " + num2anum(num_lst[-1], gen,
                                                       sing_plur, cas)
    return anum
Beispiel #11
0
def separator(f_name):
    f_input = open(f_name, "r")
    f_output = open(f_name[:-4] + '_digitalized.txt', "w")
    list1 = list()
    previous = -1
    number = 0
    connect_count = 0
    for line in f_input:
        list1 = line.split()
        for number in range(len(list1)):
            if list1[number] in '-,.!?;:':  #учет знаков препинания
                f_output.write(list1[number] + ' ')
            else:
                trash, num = two.smth_prove(
                    list1[number])  #узнаем, что за штучечка
                if (num == 1):  #Если числительное
                    f_output.write(list1[number] + ' ')  #выписываем число
                else:
                    if len(list1[number]) < 3 and trash != 0 and (
                            list1[number][0].isupper() == False
                            and list1[number][0] in 'уеоаыэяию'
                    ):  #проверка на частицы (что не влияют на ритмику (не считаем их ударения))
                        connect_count = connect_count + trash
                    else:
                        f_output.write(
                            three.num2text(
                                one.dig_c(list1[number], connect_count,
                                          previous)) + ' '
                        )  #Это обычное слово, просто подберем рифмованное число
                        previous = one.dig_c(list1[number], connect_count,
                                             previous)
                        print(previous)
                        connect_count = 0  #сбрасываем счетчик несчитаемых слогов
        f_output.write('\n')
    f_input.close()
    f_output.close()
    return ('excellent work')
Beispiel #12
0
def get_sum_as_text(decimal):
    male_units = ((u'рубль', u'рубля', u'рублей'), 'm')
    text = num2text(decimal, male_units).capitalize()
    return f'{text} 00 копеек'
Beispiel #13
0
 def test_hundreeds(self):
     self.assertEqual(num2text(100), u'сто')
     self.assertEqual(num2text(900), u'девятьсот')
Beispiel #14
0
            list.append(i)

    ibyte = 0
    cost = 0

    for i in range(len(list)):
        if '192.168.250.27' in list[i]:
            ibyte += float(list[i][12])

    ibyte = ibyte / (2**20)
    cost = ibyte * 1
    return ("%.0f" % cost)


units = ((u'рубль', u'рубля', u'рублей'), 'm')
callsms_price = int(callsms())
internet_price = int(internet())
full_price = callsms_price + internet_price
ndc = "%.0f" % (full_price * 0.2)
doc = DocxTemplate("empty.docx")
context = {
    'mobilecon': callsms_price,
    'internetcon': internet_price,
    'fullprice': full_price,
    'ndc': ndc,
    'word_price': (num2text(full_price, units))
}
doc.render(context)
doc.save("invoice.docx")
convert("invoice.docx")
Beispiel #15
0
                '3000.00',
                int_units=int_units,
                exp_units=exp_units),
            u'три тысячи рублей ноль копеек')

    def test_negative(self):
        self.assertEqual(num2text(-12345),
                         u"минус двенадцать тысяч триста сорок пять")
        self.assertEqual(
            decimal2text('-123.45'),
            u'минус сто двадцать три сорок пять')

if __name__ == '__main__':
    import sys
    if len(sys.argv) > 1:
        try:
            num = sys.argv[1]
            if '.' in num:
                print(decimal2text(
                    num,
                    int_units=((u'штука', u'штуки', u'штук'), 'f'),
                    exp_units=((u'кусок', u'куска', u'кусков'), 'm')))
            else:
                print(num2text(
                    int(num),
                    main_units=((u'штука', u'штуки', u'штук'), 'f')))
        except ValueError:
            print (sys.stderr, "Invalid argument {}".format(sys.argv[1]))
        sys.exit()
    unittest.main()
Beispiel #16
0
    price = 0

    for i in range(len(list_check)):
        if '192.0.73.2' in list_check[i]:
            ibyt += float(list_check[i][12])

    if ibyt > 200:  # Т. к. общий объём трафика по абоненту меньше заявленного во варианте, было решено рассматривать байты.
        ibyt = ibyt - 200
        price += 0.5 * 200

    price += ibyt * 1
    return ("%.0f" % price)


cases = ((u'рубль', u'рубля', u'рублей'), 'm')
telephonia_price = int(telephonia())
internet_price = int(internet())
total_price = telephonia_price + internet_price
nds = "%.0f" % (total_price * 0.2)
doc = DocxTemplate("blank.docx")
context = {
    'telephonia': telephonia_price,
    'internet': internet_price,
    'total': total_price,
    'nds': nds,
    'word_price': (num2text(total_price, cases))
}
doc.render(context)
doc.save("total.docx")
convert("total.docx")
Beispiel #17
0
 def test_negative(self):
     self.assertEqual(num2text(-12345),
                      u"минус двенадцать тысяч триста сорок пять")
     self.assertEqual(
         decimal2text('-123.45'),
         u'минус сто двадцать три сорок пять')
Beispiel #18
0

if __name__ == '__main__':
    context = Box({
        "order_number": input("Введите номер ЗН: "),
        "contract_number": CONTRACT_NUMBER,
        "today": datetime.today().strftime("%d.%m.%Y"),
        "total": 0,
        "tasks": [],
        "username": USERNAME
    })
    months = ('января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля',
              'августа', 'сентября', 'октября', 'ноября', 'декабря')
    context.contract_sign_at = CONTRACT_SIGN_AT.strftime(
        f"%d {month2str(CONTRACT_SIGN_AT.month, months)} %Y г.")
    for _ in range(int(input("Введите количество задач: "))):
        task = Box({
            "task_number": input("Номер задачи: "),
            "start": input("Начало: "),
            "end": input("Конец: "),
            "time": int(input("Время выполнения: ")),
            "price": PRICE
        })
        task.total = task.time * task.price
        context.tasks.append(task)
        context.total += task.total
    context.str_total = num2text(context.total,
                                 ((u'рубль', u'рубля', u'рублей'), 'm'))

    create_order(context)
Beispiel #19
0
 def test_units(self):
     self.assertEqual(num2text(0), u'ноль')
     self.assertEqual(num2text(1), u'один')
     self.assertEqual(num2text(9), u'девять')
Beispiel #20
0
 def test_gender(self):
     self.assertEqual(num2text(1000), u'одна тысяча')
     self.assertEqual(num2text(2000), u'две тысячи')
     self.assertEqual(num2text(1000000), u'один миллион')
     self.assertEqual(num2text(2000000), u'два миллиона')
Beispiel #21
0
 def test_teens(self):
     self.assertEqual(num2text(10), u'десять')
     self.assertEqual(num2text(11), u'одиннадцать')
     self.assertEqual(num2text(19), u'девятнадцать')
Beispiel #22
0
 def test_tens(self):
     self.assertEqual(num2text(20), u'двадцать')
     self.assertEqual(num2text(90), u'девяносто')