Skip to content

Instantly share code, notes, and snippets.

@LeReverandNox
Last active March 25, 2018 16:07
Show Gist options
  • Select an option

  • Save LeReverandNox/da9b0f0fd8dac9095fb547a5604f11c4 to your computer and use it in GitHub Desktop.

Select an option

Save LeReverandNox/da9b0f0fd8dac9095fb547a5604f11c4 to your computer and use it in GitHub Desktop.
digits = {
1: "one",
2: "two",
3: "three",
4: "four",
5: "five",
6: "six",
7: "seven",
8: "eight",
9: "nine",
}
tenthies = {
10: "ten",
11: "eleven",
12: "twelve",
13: "thirteen",
14: "fourteen",
15: "fifteen",
16: "sixteen",
17: "seventeen",
18: "eighteen",
19: "nineteen"
}
tens = {
2: "twenty",
3: "thirty",
4: "forty",
5: "fifty",
6: "sixty",
7: "seventy",
8: "eighty",
9: "ninety"
}
scale_words = [
"",
"thousand",
"million",
"billion"
]
def deal_with_group(number):
elements = []
number_elements = [int(n) for n in str(number)]
if number < 10:
elements.append(digits[number])
elif number >= 10 and number < 20:
elements.append(tenthies[number])
elif number >= 20 and number < 100:
elements.append(tens[number_elements[0]] + (("-" + digits[number_elements[1]]) if number_elements[1] else ''))
else:
elements.append(digits[number_elements[0]] + " hundred" + ((" and " + deal_with_group(int(''.join([str(n) for n in number_elements[1:]])))) if number_elements[1] or number_elements[2] else ''))
return ' '.join(elements)
def say(number):
if number < 0 or number > 10e11-1:
raise ValueError("The given number is incorrect.")
if number == 0:
return "zero"
number_string = str(int(number))
number_length = len(number_string)
number_groups = [int(number_string[::-1][i:i+3][::-1]) for i in range(0, number_length, 3)]
answer_elements = []
for i, group in enumerate(number_groups):
if group == 0:
continue
answer_elements.append(scale_words[i])
answer_elements.append(deal_with_group(group))
if i == 0 and len(number_groups) > 1 and not number_groups[i+1]:
answer_elements.append('and')
return ' '.join(answer_elements[::-1]).strip()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment