Skip to content

Instantly share code, notes, and snippets.

@EkremDincel
Created June 1, 2020 16:51
Show Gist options
  • Save EkremDincel/395afb9efbd99a9509bc3a11178482d8 to your computer and use it in GitHub Desktop.
Save EkremDincel/395afb9efbd99a9509bc3a11178482d8 to your computer and use it in GitHub Desktop.
Python'da Türkçe tam sayıların okunuşunu hesaplayan fonksiyon örneği
digit = ['sıfır', 'bir', 'iki', 'üç', 'dört', 'beş', 'altı', 'yedi', 'sekiz', 'dokuz']
digit2 = ['', 'on', 'yirmi', 'otuz', 'kırk', 'elli', 'altmış', 'yetmiş', 'seksen', 'doksan']
digit3 = ['milyon', 'milyar', 'trilyon', 'katrilyon', 'kentilyon', 'sekstilyon', 'septilyon', 'oktilyon', 'nonilyon', 'desilyon', 'andesilyon', 'dodesilyon', 'tredesilyon', 'katordesilyon', 'kendesilyon', 'seksdesilyon', 'septendesilyon', 'oktodesilyon', 'novemdesilyon', 'vicintilyon', 'anvicintilyon', 'dovicintilyon', 'trevicintilyon', 'katorvicintilyon', 'kenkavicintilyon', 'sesvicintilyon', 'septemvicintilyon', 'oktovicintilyon', 'novemvicintilyon', 'tricintilyon', 'antricintilyon']
onluk = lambda i: (digit[i] if i<10 else digit2[i // 10] + " " + digit[i % 10]) if i%10 else digit2[i // 10]
yüzlük = lambda i: onluk(i) if i < 100 else ("yüz " + onluk(i - 100) if i-100 else "yüz") if i < 200 else digit[i // 100] + " yüz " + onluk(i % 100) if i%100 else digit[i // 100] + " yüz"
binlik = lambda i: ("bin" if i == 1 else yüzlük(i) + " bin") if i else ""
def number_to_turkish(number):
if not isinstance(number, int): raise TypeError("'number' must be an instance of <class 'int'>, not {}.".format(type(number)))
if number < 0: return "eksi " + number_to_turkish(-number)
if not number: return "sıfır"
number = str(number)
l = []
i = len(number)
while i > 0:
l.append(int(number[max(i-3, 0):i]))
i -= 3
if temp := yüzlük(l[0]): k = [temp]
else: k = []
if len(l) == 1: return k[0]
if temp := binlik(l[1]): k.insert(0, temp)
if len(l) == 2: return " ".join(k)
for i, j in enumerate(l[2:]):
if j: k.insert(0, yüzlük(j) + " " + digit3[i])
return " ".join(k)
def test():
assert number_to_turkish(0) == "sıfır"
assert number_to_turkish(1) == "bir"
assert number_to_turkish(-1) == "eksi bir"
assert number_to_turkish(123000456) == "yüz yirmi üç milyon dört yüz elli altı"
if __name__ == "__main__":
test()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment