Skip to content

Instantly share code, notes, and snippets.

@tadas-subonis
Created February 12, 2020 12:28
Show Gist options
  • Save tadas-subonis/6e23811db350a440cd47e2e5dd40e2cb to your computer and use it in GitHub Desktop.
Save tadas-subonis/6e23811db350a440cd47e2e5dd40e2cb to your computer and use it in GitHub Desktop.
Python LT skaičių konvertavimas į lietuviškus
import unittest
# pagal https://gist.github.com/evaqas/63fa204e3a1f0019bce2
def skaicius_zodziais(skaicius):
skaicius = int(skaicius)
# neskaiciuosim neigiamu ir itin dideliu skaiciu (iki milijardu)
if skaicius < 0 or skaicius >= 10 ** 9: return
skaicius = str(skaicius)
if skaicius == 0: return 'nulis'
vienetai = ['', 'vienas', 'du', 'trys', 'keturi', 'penki', 'šeši', 'septyni', 'aštuoni', 'devyni']
niolikai = ['', 'vienuolika', 'dvylika', 'trylika', 'keturiolika', 'penkiolika', 'šešiolika', 'septyniolika',
'aštuoniolika', 'devyniolika']
desimtys = ['', 'dešimt', 'dvidešimt', 'trisdešimt', 'keturiasdešimt', 'penkiasdešimt', 'šešiasdešimt',
'septyniasdešimt', 'aštuoniasdešimt', 'devyniasdešimt']
pavadinimai = [
['milijonas', 'milijonai', 'milijonų'],
['tūkstantis', 'tūkstančiai', 'tūkstančių'],
]
skaicius = '%09d' % int(skaicius) # iki milijardu 10^9 (milijardu neskaiciuosim)
skaicius = [skaicius[i:i + 3] for i in range(0, len(skaicius), 3)]
zodziais = []
for i, tripletas in enumerate(skaicius):
# resetinam linksni
linksnis = 0
simtai = int(tripletas) // 100
# pridedam simtu pavadinima, jei pirmas tripleto skaitmuo > 0
if simtai > 0:
if simtai > 1:
zodziais += [vienetai[simtai]]
zodziais += ['šimtai' if (simtai > 1) else 'šimtas']
# du paskutiniai tripleto skaiciai
du = int(tripletas) % 100
des = du // 10
vie = du % 10
# pacekinam nioliktus skaicius
if 10 < du < 20:
zodziais += [niolikai[vie]]
linksnis = 2
else:
# pacekinam desimtis
if des > 0:
zodziais += [desimtys[des]]
# pridedam vienetus
if vie > 0:
zodziais += [vienetai[vie]]
linksnis = 1 if (vie > 1) else 0
else:
linksnis = 2
# pridedam pavadinima isskyrus paskutiniam ir nuliniams tripletams
if i < len(pavadinimai) and tripletas != '000':
pavadinimas_2 = pavadinimai[i][linksnis]
zodziais += [pavadinimas_2]
number = " ".join(zodziais).strip()
number = number.replace(" ", " ")
return number
class TestNumberConversion(unittest.TestCase):
def test_10(self):
self.assertEqual('dešimt', skaicius_zodziais(10))
def test_55(self):
self.assertEqual('penkiasdešimt penki', skaicius_zodziais(55))
def test_20(self):
self.assertEqual('dvidešimt', skaicius_zodziais(20))
def test_11(self):
self.assertEqual('vienuolika', skaicius_zodziais(11))
def test_121(self):
self.assertEqual('šimtas dvidešimt vienas', skaicius_zodziais(121))
def test_2515(self):
self.assertEqual('du tūkstančiai penki šimtai penkiolika', skaicius_zodziais(2515))
def test_45000(self):
self.assertEqual('keturiasdešimt penki tūkstančiai', skaicius_zodziais(45000))
def test_450000(self):
self.assertEqual('keturi šimtai penkiasdešimt tūkstančių', skaicius_zodziais(450000))
if __name__ == '__main__':
unittest.main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment