Напишите процедуру которая выводит переданное ей число прописью например 21 двадцать один питон
Перейти к содержимому

Напишите процедуру которая выводит переданное ей число прописью например 21 двадцать один питон

Python-сообщество

Здравствуйте, есть программа которая выводит число прописью до 999999 (и то не точно на единицу в конце (выводит 142322 как стосорокдветысячитристадвадцатьтри)), как ее можно переделать, чтобы она считала до 99.999.999 и если вводятся число прописью, то переделывала его в число?

Прикреплённый файлы:
attachmenttest1.py (2,6 KБ)

#2 Ноя. 3, 2017 03:02:48

вывод числа прописью и наоборот, вывод слова числом

В 2013 году писал такую программу, правда на C дело было

Вот оттуда кусок, отвечающий за тройки цифр

Отредактировано py.user.next (Ноя. 3, 2017 03:14:42)

#3 Ноя. 3, 2017 11:32:55

вывод числа прописью и наоборот, вывод слова числом

py.user.next
разобрался только с неточностью на конце, с миллионами так и не выходит, ладно это пол беды, подскажи как лучше сделать вывод слова числом?(например одинмиллиондвестепятьдесятчетыретысячистосорокодин как 1254141)

Прикреплённый файлы:
attachmenttest1.py (3,0 KБ)

#4 Ноя. 3, 2017 12:25:58

вывод числа прописью и наоборот, вывод слова числом

в свое время я спокойно загуглил решения для перевода числа в строку, обратное думаю менее востребовано и может вполне не иметь готовых общедоступных решений

_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

#5 Ноя. 3, 2017 12:51:56

вывод числа прописью и наоборот, вывод слова числом

Для фразы:
один миллион двести пятьдесят четыре тысячи сто сорок один

Надо сначала разделить всё по словам на группы. Может же быть “один миллион сто” — то есть не быть тысяч.

То есть получить
один миллион | двести пятьдесят четыре тысячи | сто сорок один

Потом это надо почистить от нецифровых слов
один | двести пятьдесят четыре | сто сорок один

А потом каждую часть передавать в функцию преобразования тройки из слов в цифры.

В итоге у тебя получится
1 | 254 | 141

P.S.
А для фразы:
один миллион сто

После разложения будет
один миллион | | сто

После очистки
один | | сто

После преобразования в цифры
1 | 000 | 100

Отредактировано py.user.next (Ноя. 3, 2017 12:55:28)

#6 Ноя. 3, 2017 13:34:17

вывод числа прописью и наоборот, вывод слова числом

#7 Ноя. 3, 2017 22:06:41

вывод числа прописью и наоборот, вывод слова числом

py.user.next
это конечно дико и глупо, но можно ли использовать при переводе слова в число использовать обычный перебор? т.е вводишь число словом, и он в цикле переводит все числа от 1 до 99.999.999 и если находит совпадение то выводит?

может кто подсказать, хотел сделать как написал выше, то есть через перебирание чисел в цикле, но если беру и подставляю число из цикла в вызов функции, то мне выдает “Type ‘int’ doesn’t have expected attribute ‘__len_’ ”

Отредактировано shiroi (Ноя. 3, 2017 23:40:15)

Прикреплённый файлы:
attachmentnumbers.rar (983 байта)

#8 Ноя. 4, 2017 03:31:37

вывод числа прописью и наоборот, вывод слова числом

Можно, но это неверный алгоритм, за такое двойку поставят. Почему? Потому что он вредительский, из-за него будет программа виснуть всё время. Алгоритмическая сложность O(n^2) — одна из самых плохих сложностей. И это ты увидишь на экране, когда тебе в эту функцию подадут миллион таких строчных чисел. Оно просто повиснет и всё.

Как сделать, я тебе сказал: это нужно сделать поэтапно — то есть ты должен подготовить данные, потом подготовить подготовленные данные, потом подготовить подготовленные подготовленные данные и так много раз, а потом уже у тебя получатся удобные данные, которые можно обрабатывать. Так всё программирование устроено. Ты от какой-то неопределённой хрени всё сужаешь-сужаешь-сужаешь и в итоге приходишь к простым данным, которые легко обрабатывать. Это называется борьба со сложностью.

Понимаешь, чтобы скушать пирог, надо разрезать его на кусочки, а ты пытаешься его сначала весь в рот запихнуть, потом режешь на две части и их пытаешься съесть по очереди, потом режешь их на две части и у тебя получается четыре части и они тоже не подходят, потому что слишком большие, и из-за этого всего ты думаешь, что разрезать пирог было неправильным ходом изначально, что нужно было всё-таки его целиком запихивать. Это ты просто не знаешь, как это делается.

То есть вот это число, которое у тебя введено словами, его надо сначала подготовить, его не надо обрабатывать сразу. И в этом твоя проблема — ты не понимаешь этого принципа. У тебя всё равно ничего не получится, поэтому делай это так, как это делают все. Никто не сидит, допустим, и браузер сходу не пишет, потому что это очень сложная система. Его разделяют-разделяют-разделяют и только потом там что-то начинают писать и соединять потихоньку в единую систему типа такого ветвистого трубопровода.

seriyps/ru_number_to_text

Позволяет получить из числа, например, 100500 его «название» (генерация текста из числа, преобразование числа в текст), например «сто пятьсот». Позволяет так же использовать наименование единиц измерения например 100500 (рублей, рубля, рубль) > «сто пятьсот рублей»

Генерация названия int числа

Генерация названия int числа с единицами измерения

Генерация названия дробного числа

Еще больше примеров можно найти в юнит-тестах.

  • Нучиться возвращать не строку а что-то более удобное для дальнейшей обработки.
  • Добваить в PyPi .
  • Отрефакторить
  • Больше комментариев в коде!

About

Преобразует число в текст с учетом plural forms (сумма прописью python). Русский язык.

Как конвертировать числа в слова в Python

Мне нужно превратить цифры от 1 до 99 словами. Вот что я получил до сих пор:

теперь самая большая проблема, которая у меня есть до сих пор, заключается в том, что операторы if, elif и else, похоже, не работают. Выполняется только первая инструкция if.

вторая проблема заключается в создании Строковой версии чисел из 20-99.

пожалуйста, помогите, заранее спасибо.

P. S. Да, я знаю о библиотеке num2word, но мне не разрешают использовать он.

12 ответов

ваша первая логика утверждения неверна. Если Number равно 1 или меньше, это утверждение всегда True; 200 также больше 1.

использовать and вместо этого и включить 1 допустимые значения:

вы также можете использовать цепочку:

для чисел 20 или больше используйте divmod() чтобы получить число десятков и остаток:

затем используйте эти значения, чтобы построить свой номер из частей:

вы можете сделать это намного проще, используя один словарь и предложение try / except, подобное этому:

используйте библиотеку python с именем num2words Ссылка -> здесь

Я также преобразовывал числа в слова для некоторых нечетких процедур сопоставления. Я использовал библиотеку под названием inflect, которую я разветвил pwdyson, которая работала потрясающе:

вы можете использовать другие пакеты? Это работает очень хорошо для меня: Inflect. Он полезен для генерации естественного языка и имеет метод превращения чисел в английский текст.

Я установил его с

это устанавливает исходный каталог для Inflect везде, где вы запускаете вышеуказанную установку pip. Тогда в вашей сессии Python

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *