0到20之间的词头,以及30、40、...、90的词头分别保存到列表中。
0和1000用字典单独处理。对其他情况,分别提取出每一位数字以及最末两位数字,然后根据百位数是否存在,十位数是否大于20,个位数是否存在依次判断使用的词头词尾以及是否需要连词和连字符。
最终代码有四行。
代码长度:382字节 vs. 全站第一:199字节。
import sys
w='- one two three four five six seven eight nine ten eleven twelve thir four fif six seven eigh nine'.split()
v='twen thir for fif six seven eigh nine'.split()
for a in sys.argv[1:]:u,x,y,z=map(int,a.zfill(4));c=y*10+z;print({0:'zero',1000:'one thousand'}.get(int(a),(w[x]+' hundred'+' and '*(c>0))*(x>0)+[w[c%20]+'teen'*(c>12),v[y-2]+'ty'+('-'+w[z])*(z>0)][y>1]*(c>0)))
|