作者beatitude (...)
站内Python
标题[闲聊] 数字翻译成英文
时间Fri Apr 13 20:45:29 2012
前阵子看到一个公司的面试考题:
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