【问题标题】:Short Form Number into Words Python将短形式数字转换为单词 Python
【发布时间】:2016-02-18 04:02:06
【问题描述】:

在更改数字输入并将其转换为短形式单词方面寻求帮助:

for instance 4,000,000,000 -> 4 Trillion, 
ones = ["", "one ","two ","three ","four ", "five ", "six ","seven ","eight ","nine "]
tens = ["ten ","eleven ","twelve ","thirteen ", "fourteen ", "fifteen ","sixteen ","seventeen ","eighteen ","nineteen "]
twenties = ["","","twenty ","thirty ","forty ", "fifty ","sixty ","seventy ","eighty ","ninety "]
thousands = ["","thousand ","million ", "billion ", "trillion ", "quadrillion ", "quintillion ", "sextillion ", "septillion ","octillion ", "nonillion ", "decillion ", "undecillion ", "duodecillion ", "tredecillion ", "quattuordecillion ", "quindecillion", "sexdecillion ", "septendecillion ",  "octodecillion ", "novemdecillion ", "vigintillion "]

def wordNumber(number):
    number = int(number)  

number = str(input("Enter the digits: "))    
print(wordNumber(number))

我完全不知道下一步该去哪里,而且我查看了很多在线程序,它们用完整的数字 (10)--> 10 来做精确的事情。

【问题讨论】:

    标签: python numbers short


    【解决方案1】:

    Humanize 库将为您做到这一点:

    >>> humanize.intword(12345591313)
    '12.3 billion'
    

    【讨论】:

    • 从未听说过人性化图书馆。谢谢。我看看这个能不能导入。
    【解决方案2】:

    如果您需要手动执行此操作,这里是一种方法的部分示例。

    def f(number):
        ones    =   [
                        "",
                        "one",
                        "two",
                        "three",
                        "four",
                        "five",
                        "six",
                        "seven",
                        "eight",
                        "nine",
                    ]
        teens   =   {
                        10:"ten",
                        11:"eleven",
                        12:"twelve",
                        13:"thirteen",
                        14:"fourteen",
                        15:"fifteen",
                        16:"sixteen",
                        17:"seventeen",
                        18:"eighteen",
                        19:"nineteen",
                    }
        tens    =   [
                        "",
                        "teen",
                        "twenty",
                        "thirty",
                        "fourty",
                        "fifty",
                        "sizty",
                        "seventy",
                        "eighty",
                        "ninety",
                    ]
        hundred =   [ "%shundred" % one for one in ones ]
        place_value   = {1:ones,2:tens,3:hundred}
        number_string = ""
        number        = list(str(number))
        number.reverse()
        number        = [(place+1, int(digit)) for place, digit in enumerate(number)]
        number.reverse()
        number_iter = number.__iter__()
        for place, digit in number_iter:
            print place, digit
            if place == 2 and digit == 1:
                place, digit = number_iter.next()
                number_string += teens[10 + digit]
            else:
                number_string += place_value[place][digit]
            print number_string
    

    【讨论】:

    【解决方案3】:

    这需要很多代码。你可以这样做: https://stackoverflow.com/a/19506803/3260314

    或者只使用模块。示例:num2words

    >>> from num2words import num2words
    >>> num2words(42)
    forty-two
    >>> num2words(42, ordinal=True)
    forty-second
    >>> num2words(42, lang='fr')
    quarante-deux
    

    【讨论】:

    • 这可能有效,但问题是 num2words 并非在所有 python 实例中都可用。
    猜你喜欢
    • 2013-03-13
    • 1970-01-01
    • 2013-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多