| Uutiset | Koodikirjasto | Wiki | Keskustelut | FAQ | Info |
int2txt_fi.pychiman 24.01.05 17:42 Kokonaisluvut tekstiksi (esim. 213 -> kaksisataakolmetoista)
# -*- coding: latin1 -*- # # Converts integers to Finnish text # Author: Chiman 1/2005 groups = [['yksi', ''], ['tuhat', 'tuhatta'], ['miljoona', 'miljoonaa'], ['miljardi', 'miljardia']] ones = { 0: '', 1: 'yksi', 2: 'kaksi', 3: 'kolme', 4: 'neljä', 5: 'viisi', 6: 'kuusi', 7: 'seitsemän', 8: 'kahdeksan', 9: 'yhdeksän', 10: 'kymmenen' } def _tens_to_txt(a): if a < 11: return ones[a] if a < 20: return ones[a % 10] + 'toista' return ones[a / 10] + 'kymmentä' + ones[a % 10] def _hundreds_to_txt(a): if 99 < a < 200: return 'sata' if a > 199: return ones[a / 100] + 'sataa' return '' def _group_to_txt(a, i): if a < 1 or a > 999: return '' if a == 1: return groups[i][0] return _hundreds_to_txt(a) + _tens_to_txt(a % 100) + groups[i][1] def int2txt_fi(a): """Return integer as Finnish text""" # Handle negative numbers a, sign = [(a, ''), (-a, 'miinus ')][a < 0] # Return an empty string if the number is too big for us if a > 1000 ** len(groups) - 1: return '' # Convert each three-number group to text separately g = [_group_to_txt(a / (1000**i) % 1000, i) for i in range(len(groups))] g.reverse() return sign + ' '.join([w for w in g if w]) or 'nolla' if __name__ == '__main__': samples = [0, 25, 100, 1043, -108642, 1402000138] lgth = max([len(str(a)) for a in samples]) for s in samples: print '%*d - %s' % (lgth, s, int2txt_fi(s)) # Sample output: # 0 - nolla # 25 - kaksikymmentäviisi # 100 - sata # 1043 - tuhat neljäkymmentäkolme # -108642 - miinus satakahdeksantuhatta kuusisataaneljäkymmentäkaksi # 1402000138 - miljardi neljäsataakaksimiljoonaa satakolmekymmentäkahdeksan chiman 17:49 24.1.05 Värikoodattu versio on nähtävissä täällä. Toivottavasti Kuhaan tulee jossain vaiheessa värikoodaus Python-pätkillekin. editoitu: 19:58 24.1.05 pllk 19:52 24.1.05 Tässä tulee vastaava temppu toiseen suuntaan. Luvun muodon tarkistus tosin puuttuu. def suomestaluvuksi(teksti): numerot = ['', 'yksi', 'kaks', 'kolm', 'nelj', 'viis', 'kuus', 'seit', 'kahd', 'yhde'] kertoimet = ['', 'tuhat', 'miljo', 'milja', 'biljo', 'bilja'] luku = ryhma = numero = 0 for i in range(0, len(teksti)): lyhyt, pitka = teksti[i:i+4], teksti[i:i+5] if lyhyt in numerot: numero = numerot.index(lyhyt) if lyhyt == 'tois': ryhma += numero + 10 numero = 0 if lyhyt == 'kymm': ryhma += numero * 10 + (numero == 0) * 10 numero = 0 if lyhyt == 'sata': ryhma += numero * 100 + (numero == 0) * 100 numero = 0 if pitka in kertoimet: luku += (ryhma + numero) * 1000 ** kertoimet.index(pitka) ryhma = numero = 0 return luku + ryhma + numero print suomestaluvuksi('sataviisitoista') Ztane 12:57 28.1.05 mikä ihme biljardi? |
![]() Haku
|