Sha256: bc18ad21f824eedfefecc9f6d071d141eb2d8db81399cbd13d0734649864b2de

Contents?: true

Size: 1.49 KB

Versions: 119

Compression:

Stored size: 1.49 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, True)

    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

119 entries across 119 versions & 1 rubygems

Version Path
trackler-2.0.8.18 tracks/python/exercises/say/example.py
trackler-2.0.8.17 tracks/python/exercises/say/example.py
trackler-2.0.8.16 tracks/python/exercises/say/example.py
trackler-2.0.8.15 tracks/python/exercises/say/example.py
trackler-2.0.8.14 tracks/python/exercises/say/example.py
trackler-2.0.8.13 tracks/python/exercises/say/example.py
trackler-2.0.8.12 tracks/python/exercises/say/example.py
trackler-2.0.8.11 tracks/python/exercises/say/example.py
trackler-2.0.8.10 tracks/python/exercises/say/example.py
trackler-2.0.8.9 tracks/python/exercises/say/example.py
trackler-2.0.8.8 tracks/python/exercises/say/example.py
trackler-2.0.8.7 tracks/python/exercises/say/example.py
trackler-2.0.8.6 tracks/python/exercises/say/example.py
trackler-2.0.8.5 tracks/python/exercises/say/example.py
trackler-2.0.8.4 tracks/python/exercises/say/example.py
trackler-2.0.8.3 tracks/python/exercises/say/example.py
trackler-2.0.8.2 tracks/python/exercises/say/example.py
trackler-2.0.8.1 tracks/python/exercises/say/example.py
trackler-2.0.7.0 tracks/python/exercises/say/example.py
trackler-2.0.6.44 tracks/python/exercises/say/example.py