Как преобразовать числа в слова Python 3 - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть проблема при попытке преобразовать числа в слова: сбой при вводе 80 или при вводе 100 выдает «сто двести».Может кто-нибудь помочь мне исправить мой код.

number = input("Enter a value: ")
ones = ["", "one ", "two ","three ", "four", "five ", "six ", "seven ", 
"eight ", "nine "]
teens = ["ten ", "eleven ", "twelve ", "thirteen ", "fourteen ", "fifteen ", 
"sixteen ", "seventeen ", "eighteen ", "nineteen "]
decades = ["", "twenty ", "thirty ", "forty ", "fifty ", "sixty ", "seventy 
", "eighty ", "ninety "]
hundreds = ["", "one hundred ", "two hundred ", "three hundred ", "four 
hundred ", "five hundred", "six hundred ", "seven hundred", "eight hundred", 
"nine hundred"]

word = ""
change = len(number)

while change > 0:
    if number == "0":
        word ="zero"
        break
    elif change > 1 and number[change - 2] == "1":
        for i in range(0,10):
            if number[change - 1] == str(i):
                word = teens[i] + word
    else:
        for i in range(0,10):
            if number[change - 1] == str(i):
                word = ones[i] + word
    if change > 1:
        for i in range(0,10):
            if number[change - 2] == str(i):
                word = decades[i] + word
    if change > 2:
        for i in range(0,10):
            if number[change - 3] == str(i):
                word = hundreds[i] + word
    change = change - 3
print(word)

Ответы [ 5 ]

0 голосов
/ 15 ноября 2018

Для этой реализации у вас всегда должно быть 10 элементов в списках.Например, через десятилетия у вас должна быть какая-то строка, представляющая значения между 10-20, даже если она не используется, так как в противном случае индексация массива была бы неправильной.

Тем не менее в этом коде много ошибок.Попробуйте это.

number = input("Enter a value: ")
ones = ["", "one ", "two ","three ", "four", "five ", "six ", "seven ", "eight ", "nine "]
teens = ["ten ", "eleven ", "twelve ", "thirteen ", "fourteen ", "fifteen ", "sixteen ", "seventeen ", "eighteen ", "nineteen "]
decades = ["", "onety", "twenty ", "thirty ", "forty ", "fifty ", "sixty ", "seventy ", "eighty ", "ninety "]
hundreds = ["", "one hundred ", "two hundred ", "three hundred ", "four hundred ", "five hundred", "six hundred ", "seven hundred", "eight hundred", "nine hundred"]

word = ""
change = len(number)

while change > 0:
    if number == "0":
        word ="zero"
        break
    elif change > 1 and number[change - 2] == "1":
        for i in range(0,10):
            if number[change - 1] == str(i):
                word = teens[i] + word
        if change == 2:
            break
    else:
        for i in range(0,10):
            if number[change - 1] == str(i):
                word = ones[i] + word
    if change > 1 and number[change-2]!="1":
        for i in range(0,10):
            if number[change - 2] == str(i):
                word = decades[i] + word
    if change > 2:
        for i in range(0,10):
            if number[change - 3] == str(i):
                word = hundreds[i] + word
    change = change - 3
print(word)
0 голосов
/ 15 ноября 2018

Я думаю, что для того, чтобы ваш пример работал, вам просто нужно убедиться, что каждая цифра change имеет правильное значение в ваших списках. Это не относится к вашим decades спискам, где вы пропустили пустую строку для подростков, что вы правильно рассматриваете как отдельный случай.

Итак, чтобы ваш код работал, просто измените:

decades = ["", "twenty ", "thirty ", "forty ", "fifty ", "sixty ", "seventy", "eighty ", "ninety "]

к этому:

decades = ["", "", "twenty ", "thirty ", "forty ", "fifty ", "sixty ", "seventy", "eighty ", "ninety "]
0 голосов
/ 15 ноября 2018

Вы пропустили запятую между "семьдесят" и "восемьдесят" в течение десятилетий. Вы должны изменить десятилетия на следующее:

decades = ["", "twenty ", "thirty ", "forty ", "fifty ", "sixty ", "seventy", "eighty ", "ninety"]

Та же ошибка есть и в списке сотен. Используйте этот новый список:

hundreds = ["", "one hundred ", "two hundred ", "three hundred ", "four hundred ", "five hundred", "six hundred ", "seven hundred", "eight hundred", "nine hundred"]

Тем не менее, ваша реализация имеет много ошибок.

0 голосов
/ 15 ноября 2018

Просто, если операторы будут работать (обратите внимание, это все, что вам нужно, чтобы это работало):

if len(number)==1:
   print(ones[int(number)])
elif len(number)==2 and number[0]=='1':
   print(teens[int(number[-1])])
elif len(number)==2 and number[0]!='1':
   print(decades[int(number[0])-1])
elif len(number)==3:
   print(hundreds[int(number[0])])

Обратите внимание, что нужно добавить запятые в decades и hundreds, поэтому скопируйте ниже, а затем заменить на буфер обмена:

decades = ["", "twenty ", "thirty ", "forty ", "fifty ", "sixty ", "seventy", "eighty ", "ninety "]
hundreds = ["", "one hundred ", "two hundred ", "three hundred ", "four hundred ", "five hundred", "six hundred ", "seven hundred", "eight hundred", 
0 голосов
/ 15 ноября 2018

Это должно работать: word2number

И пример из их документов: print(w2n.word_to_num('one hundred thirty-five'))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...