[閒聊] 數字翻譯成英文

看板Python作者 (...)時間13年前 (2012/04/13 20:45), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/3 (看更多)
前陣子看到一個公司的面試考題: http://i.imgur.com/ETTIS.png
覺得有趣就做了一下 看到比較抽象的函數建構在比較基礎的函數之上, 最終得到可以翻譯任意長度數字的能力, 還滿震驚的... 讓我想到 Paul Graham 談論 Lisp 時的論點 base1 = { '0': '', '1': 'one', '2': 'two', '3': 'three', '4': 'four', '5': 'five', '6': 'six', '7': 'seven', '8': 'eight', '9': 'nine', } __base2__ = (10, 11, 12, 13, 15, 18) base2 = { '10': 'ten', '11': 'eleven', '12': 'twelve', '13': 'thirteen', '15': 'fifteen', '18': 'eighteen' } __base3__ = (20, 30, 50, 80) base3 = { '20': 'twenty', '30': 'thirty', '50': 'fifty', '80': 'eighty' } def fn1(n): return base1[str(n)] def fn10(n): n1, n10 = n%10, n/10 s1 = fn1(n1) if n10 == 0: s = s1 elif n10 == 1: if n in __base2__: s = base2[str(n)] else: s = s1 + 'teen' else: if n10*10 in __base3__: s = base3[str(n10*10)] + ' ' + s1 else: s = fn1(n10) + 'ty' + ' ' + s1 return s.strip() def fn100(n): n10, n100 = n%100, n/100 s10 = fn10(n10) if n100 == 0: s = s10 else: s = fn1(n100) + ' ' + 'hundred,' + ' ' + s10 return s def fn1000(n): n100, n1000 = n%1000, n/1000 s100 = fn100(n100) if n1000 == 0: s = s100 else: s = fn1000(n1000) + ' ' + 'thousand,' + ' ' + s100 return s convert = fn1000 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.251.153.93
文章代碼(AID): #1FY1_iHI (Python)
文章代碼(AID): #1FY1_iHI (Python)