python: converting numbers to words

后端 未结 4 624
无人共我
无人共我 2021-01-13 23:08

I\'m trying to write a code that will convert numbers to words, up to 999 trillion. here is my code so far. it works up to 119, but after that things get messy. I can\'t use

4条回答
  •  长发绾君心
    2021-01-13 23:36

    This can easily be done recursively:

    def as_words(n):
        """Convert an integer n (+ve or -ve) to English words."""
        # lookups
        ones = ['zero', 'one', 'two', 'three', 'four',
                'five', 'six', 'seven', 'eight', 'nine', 
                'ten', 'eleven', 'twelve', 'thirteen', 'fourteen',
                'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen']
        tens = ['zero', 'ten', 'twenty', 'thirty', 'forty',
                'fifty', 'sixty', 'seventy', 'eighty', 'ninety']
        # negative case
        if n < 0:
            return "minus {0}".format(as_words(abs(n)))
        # 1000+
        for order, word in [(10**12, "trillion"), (10**9, "billion"),
                            (10**6, "million"), (10**3, "thousand")]:
            if n >= order:
                return "{0} {1}{2}".format(as_words(n // order), word,
                                           " {0}".format(as_words(n % order))
                                           if n % order else "")
        # 100-999
        if n >= 100:
            if n % 100:
                return "{0} hundred and {1}".format(as_words(n // 100), 
                                                    as_words(n % 100))
            else:
                return "{0} hundred".format(as_words(n // 100))
        # 0-99
        if n < 20:
            return ones[n]
        else:
            return "{0}{1}".format(tens[n // 10],
                                   "-{0}".format(as_words(n % 10)) 
                                   if n % 10 else "")   
    

提交回复
热议问题