Sha256: 6c639425213ed9a43beec3a8dfa230bbfc0b966bdd33a9324387b4e3566fe2b5

Contents?: true

Size: 1.48 KB

Versions: 167

Compression:

Stored size: 1.48 KB

Contents

def say(number, recursive=False):
    small = dict(enumerate((
        'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight',
        'nine', 'ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen',
        'sixteen', 'seventeen', 'eighteen', 'nineteen', 'twenty')))

    tens = {20: 'twenty', 30: 'thirty', 40: 'forty', 50: 'fifty',
            60: 'sixty', 70: 'seventy', 80: 'eighty', 90: 'ninety'}

    k, m, b, t = 1e3, 1e6, 1e9, 1e12

    if number < 0:
        raise AttributeError('number is negative')
    if number >= t:
        raise AttributeError('number is too large: %s' % str(number))

    if number < 20:
        return small[number] if not recursive else 'and ' + small[number]

    if number < 100:
        if number % 10 == 0:
            return small[number]
        return tens[number // 10 * 10] + '-' + small[number % 10]

    if number < k:
        if number % 100 == 0:
            return small[number // 100] + ' hundred'
        return small[number // 100] + ' hundred and ' + say(number % 100)

    if number < m:
        if number % k == 0:
            return say(number // k) + ' thousand'
        return say(number // k) + ' thousand ' + say(number % k, True)

    if number < b:
        if number % m == 0:
            return say(number // m) + ' million'
        return say(number // m) + ' million ' + say(number % m, True)

    if number % b == 0:
        return say(number // b) + ' billion'
    return say(number // b) + ' billion ' + say(number % b, True)

Version data entries

167 entries across 167 versions & 1 rubygems

Version Path
trackler-2.2.1.68 tracks/python/exercises/say/example.py
trackler-2.2.1.67 tracks/python/exercises/say/example.py
trackler-2.2.1.66 tracks/python/exercises/say/example.py
trackler-2.2.1.65 tracks/python/exercises/say/example.py
trackler-2.2.1.64 tracks/python/exercises/say/example.py
trackler-2.2.1.63 tracks/python/exercises/say/example.py
trackler-2.2.1.62 tracks/python/exercises/say/example.py
trackler-2.2.1.61 tracks/python/exercises/say/example.py
trackler-2.2.1.60 tracks/python/exercises/say/example.py
trackler-2.2.1.59 tracks/python/exercises/say/example.py
trackler-2.2.1.58 tracks/python/exercises/say/example.py
trackler-2.2.1.57 tracks/python/exercises/say/example.py
trackler-2.2.1.56 tracks/python/exercises/say/example.py
trackler-2.2.1.55 tracks/python/exercises/say/example.py
trackler-2.2.1.54 tracks/python/exercises/say/example.py
trackler-2.2.1.53 tracks/python/exercises/say/example.py
trackler-2.2.1.52 tracks/python/exercises/say/example.py
trackler-2.2.1.51 tracks/python/exercises/say/example.py
trackler-2.2.1.50 tracks/python/exercises/say/example.py
trackler-2.2.1.49 tracks/python/exercises/say/example.py