Created
February 12, 2020 12:28
-
-
Save tadas-subonis/6e23811db350a440cd47e2e5dd40e2cb to your computer and use it in GitHub Desktop.
Python LT skaičių konvertavimas į lietuviškus
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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