Python-сообщество
Здравствуйте, есть программа которая выводит число прописью до 999999 (и то не точно на единицу в конце (выводит 142322 как стосорокдветысячитристадвадцатьтри)), как ее можно переделать, чтобы она считала до 99.999.999 и если вводятся число прописью, то переделывала его в число?
Прикреплённый файлы:
test1.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)
Прикреплённый файлы:
test1.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)
Прикреплённый файлы:
numbers.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