コード例 #1
1
ファイル: forms.py プロジェクト: danila-panteleev/pantext
    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
コード例 #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
コード例 #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'пять миллиардов')
コード例 #4
0
ファイル: views.py プロジェクト: pathfindermind/docfeniks
 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)
コード例 #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)
コード例 #6
0
ファイル: views.py プロジェクト: pathfindermind/docfeniks
 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)
コード例 #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'восемьсот девяносто один')
コード例 #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'три тысячи рублей')
コード例 #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
コード例 #10
0
ファイル: romans.py プロジェクト: aksenof/itmo
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
コード例 #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')
コード例 #12
0
ファイル: utils.py プロジェクト: pavlushkin/bs_invoice_maker
def get_sum_as_text(decimal):
    male_units = ((u'рубль', u'рубля', u'рублей'), 'm')
    text = num2text(decimal, male_units).capitalize()
    return f'{text} 00 копеек'
コード例 #13
0
 def test_hundreeds(self):
     self.assertEqual(num2text(100), u'сто')
     self.assertEqual(num2text(900), u'девятьсот')
コード例 #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")
コード例 #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()
コード例 #16
0
ファイル: Laba3.py プロジェクト: AlexeyMosolov/laba3
    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")
コード例 #17
0
 def test_negative(self):
     self.assertEqual(num2text(-12345),
                      u"минус двенадцать тысяч триста сорок пять")
     self.assertEqual(
         decimal2text('-123.45'),
         u'минус сто двадцать три сорок пять')
コード例 #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)
コード例 #19
0
 def test_units(self):
     self.assertEqual(num2text(0), u'ноль')
     self.assertEqual(num2text(1), u'один')
     self.assertEqual(num2text(9), u'девять')
コード例 #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'два миллиона')
コード例 #21
0
 def test_teens(self):
     self.assertEqual(num2text(10), u'десять')
     self.assertEqual(num2text(11), u'одиннадцать')
     self.assertEqual(num2text(19), u'девятнадцать')
コード例 #22
0
 def test_tens(self):
     self.assertEqual(num2text(20), u'двадцать')
     self.assertEqual(num2text(90), u'девяносто')