Skip to content

Instantly share code, notes, and snippets.

@rnazali
Forked from sugiana/terbilang.py
Last active July 26, 2024 09:34
Show Gist options
  • Save rnazali/37ac232d3a442ef40f09bb81f293c6d1 to your computer and use it in GitHub Desktop.
Save rnazali/37ac232d3a442ef40f09bb81f293c6d1 to your computer and use it in GitHub Desktop.
Update to classmethod
# tested on python 3.11, but should work on 3.8+
class SaidIndonesian:
unit = ['', 'satu', 'dua', 'tiga', 'empat', 'lima', 'enam', 'tujuh', 'delapan', 'sembilan', 'sepuluh', 'sebelas']
@classmethod
def from_integer(cls, number: int) -> str:
if number is None:
return ''
if number == 0:
return 'nol'
word_list = cls._terbilang(number)
cleaned_word_list = [e for e in word_list if e != '']
return ' '.join(cleaned_word_list)
@classmethod
def _terbilang(cls, number: int) -> List[str]:
if 0 <= number <= 11:
return [cls.unit[number]]
elif 12 <= number <= 19:
return cls._terbilang(number % 10) + ['belas']
elif 20 <= number <= 99:
return cls._terbilang(int(number / 10)) + ['puluh'] + cls._terbilang(number % 10)
elif 100 <= number <= 199:
return ['seratus'] + cls._terbilang(number - 100)
elif 200 <= number <= 999:
return cls._terbilang(int(number / 100)) + ['ratus'] + cls._terbilang(number % 100)
elif 1_000 <= number <= 1_999:
return ['seribu'] + cls._terbilang(number - 1_000)
elif 2_000 <= number <= 999_999:
return cls._terbilang(int(number / 1_000)) + ['ribu'] + cls._terbilang(number % 1_000)
elif 1_000_000 <= number <= 999_999_999:
return cls._terbilang(int(number / 1_000_000)) + ['juta'] + cls._terbilang(number % 1_000_000)
elif 1_000_000_000 <= number <= 999_999_999_999:
return cls._terbilang(int(number / 1_000_000_000)) + ['milyar'] + cls._terbilang(number % 1_000_000_000)
elif 1_000_000_000_000 <= number <= 999_999_999_999_999:
return cls._terbilang(int(number / 1_000_000_000_000)) + ['triliun'] + cls._terbilang(number % 1_000_000_000_000)
else:
raise ValueError('Too much number')
if __name__ == '__main__':
print(SaidIndonesian.from_integer(999_999_999_999))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment