[閒聊] 數字翻譯成英文
前陣子看到一個公司的面試考題: 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
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 3 篇):
Python 近期熱門文章
PTT數位生活區 即時熱門文章