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
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
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'пять миллиардов')
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)
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)
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)
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'восемьсот девяносто один')
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'три тысячи рублей')
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
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
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')
def get_sum_as_text(decimal): male_units = ((u'рубль', u'рубля', u'рублей'), 'm') text = num2text(decimal, male_units).capitalize() return f'{text} 00 копеек'
def test_hundreeds(self): self.assertEqual(num2text(100), u'сто') self.assertEqual(num2text(900), u'девятьсот')
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")
'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()
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")
def test_negative(self): self.assertEqual(num2text(-12345), u"минус двенадцать тысяч триста сорок пять") self.assertEqual( decimal2text('-123.45'), u'минус сто двадцать три сорок пять')
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)
def test_units(self): self.assertEqual(num2text(0), u'ноль') self.assertEqual(num2text(1), u'один') self.assertEqual(num2text(9), u'девять')
def test_gender(self): self.assertEqual(num2text(1000), u'одна тысяча') self.assertEqual(num2text(2000), u'две тысячи') self.assertEqual(num2text(1000000), u'один миллион') self.assertEqual(num2text(2000000), u'два миллиона')
def test_teens(self): self.assertEqual(num2text(10), u'десять') self.assertEqual(num2text(11), u'одиннадцать') self.assertEqual(num2text(19), u'девятнадцать')
def test_tens(self): self.assertEqual(num2text(20), u'двадцать') self.assertEqual(num2text(90), u'девяносто')