This repository was archived by the owner on Mar 15, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathsay.py
More file actions
46 lines (32 loc) · 1.25 KB
/
Copy pathsay.py
File metadata and controls
46 lines (32 loc) · 1.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
def say(number):
if number < 0 or number > 999_999_999_999:
raise ValueError(r".+")
return say_billion(number)
def say_x(number, x, text, f):
if number < x:
return f(number)
elif number % x == 0:
return f(number // x) + " " + text
else:
return f(number // x) + " " + text + " " + f(number % x)
def say_hundred(number):
return say_x(number, 100, "hundred", say_0_99)
def say_thousand(number):
return say_x(number, 1_000, "thousand", say_hundred)
def say_million(number):
return say_x(number, 1_000_000, "million", say_thousand)
def say_billion(number):
return say_x(number, 1_000_000_000, "billion", say_million)
def say_0_99(number):
nums_le20 = ["zero", "one", "two", "three", "four",
"five", "six", "seven", "eight", "nine",
"ten", "eleven", "twelve", "thirteen", "fourteen",
"fifteen", "sixteen", "seventeen", "eighteen", "nineteen", ]
tens = ["twenty", "thirty", "forty", "fifty",
"sixty", "seventy", "eighty", "ninety"]
if number < 20:
return nums_le20[number]
elif number % 10 == 0:
return tens[number // 10 - 2]
else:
return say_0_99(number // 10 * 10) + "-" + say_0_99(number % 10)