将Python整数转换为单词

时间:2016-02-20 19:51:31

标签: python

我编写了以下代码,假设将所有数字从1到9999转换为单词,但是我已经超出了111等数字的范围。请帮忙。感谢。

global n2W
n2W = {1: 'one', 2: 'two', 3: 'three', 4: 'four', 5: 'five',\
        6: 'six', 7: 'seven', 8: 'eight', 9: 'nine', 10: 'ten', \
        11: 'eleven', 12: 'twelve', 13: 'thirteen', 14: 'fourteen', \
        15: 'fifteen', 16: 'sixteen', 17: 'seventeen', 18: 'eighteen',\
        19: 'nineteen',20:'twenty', 30:'thirty', 40:'forty', 50:'fifty', 60:'sixty',\
        70: 'seventy', 80:'eighty', 90:'ninety',100:'one hundred', 200:'two hundred',\
        300:'three hundred', 400:'four hundred',500:'five hundred', 600:'six hundred',\
        700:'seven hundred',800:'eight hundred', 900:'nine hundred',\
        1000:'one thousand', 2000:'two thousand', 3000:'three thousand',\
        5000:'five thousand', 6000:'six thousand', 7000:'seven thousand',\
        8000:'eight thousand', 9000:'nine thousand',10000:'ten thousand'}


def num2Word(n):
    try:
        print (n2W[n])
    except KeyError:

        try:
            print (n2W[n-n%10] , n2W[n%10].lower())
        except KeyError:
            print ("Number out of range")

n = eval(input("Please enter a number between 1 and 9999 inclusive: "))
num2Word(n)

5 个答案:

答案 0 :(得分:1)

你只尝试 - 除了一次,这意味着这将适用于最多2位数。尝试递归地做。如果你想要的话,我可以帮你解决问题。 而不是做n2W [n%10] .lower(),而是使用递归调用num2Word。

答案 1 :(得分:0)

只需手动插入一个号码即可看出错误原因

例如,尝试n = 111

(n2W[n-n%10] , n2W[n%10].lower())

111%10=1,所以你有:

n2W[110]n2W[1]

n2W[110]是您的关键错误,只需要通过您的函数进行递归。

答案 2 :(得分:0)

查看这个解决方案,我们在其中从左到右迭代数字,在每次迭代中将value映射到文本,然后放弃最重要的数字。

def num2Word(n):
    try:
        word = ''
        c = 1000
        while n:
            value = (n//c)*c if n > c else None
            n %= c
            c /= 10
            if value is not None:
                word += '%s ' % n2W[value] 
    except KeyError:
        print ("Number out of range")
    return word 

 n = eval(input("Please enter a number between 1 and 9999 inclusive: "))
 print num2Word(n)


例如,对于n = 1234,我们将进行四次迭代,其中value等于:

value = 1000
value = 200
value = 30
value = 4

答案 3 :(得分:-1)

您最好使用num2words库,可以使用以下代码安装:

pip install num2words

然后你可以这样做:

import num2words
num2words.num2words(42) # forty-two

答案 4 :(得分:-1)

您可以使用 inflect 模块将整数值转换为单词。

import inflect 
i=inflect.engine()
i.number_to_words(49)

输出将是:'四十九'