仓酷云 发表于 2015-1-14 21:05:02

来一发Python将阿拉伯数字转化为中文年夜写

小知识:CentOS是企业Linux发行版领头羊RedHatEnterpriseLinux(以下称之为RHEL)的源代码再编译版本。
应用Python将阿拉伯数字转化为中文年夜写,其实最费事的处所就是中央空多个0的成绩,这类情形下,采取拆分轨则,将一个年夜数字,先拆分红整数部门和小数部门,再对整数部门依照仟、万、亿、兆分位拆分为四个字符串构成的List,每一个字符串最多4个字符,然后对每一个分位的字符串用年夜写函数转换成年夜写,最初归并,如许等于缩减了成绩,处置就绝对简略了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#!/usr/bin/envpython
#-*-coding:utf-8-*-

#算法解释:请求字符串输出,现将字符串差费为整数部门和小数部门生成list[整数部门,小数部门]
#将整数部门拆分为:[亿,万,仟]三组字符串构成的List:(依据现实输出生成阶梯List)
#例如:600190000010.70整数部门拆分为:
#然后对list中每一个字符串分组停止年夜写化再归并
#最初处置小数部门的年夜写化

classcnumber:
cdict={}
gdict={}
xdict={}
def__init__(self):
self.cdict={1:u,2:u拾,3:u佰,4:u仟}
self.xdict={1:u元,2:u万,3:u亿,4:u兆}#数字标识符
self.gdict={0:u零,1:u壹,2:u贰,3:u叁,4:u肆,5:u伍,6:u陆,7:u柒,8:u捌,9:u玖}
defcsplit(self,cdata):#拆分函数,将整数字符串拆分红[亿,万,仟]的list
g=len(cdata)%4
csdata=[]
lx=len(cdata)-1
ifg>0:
csdata.append(cdata)
k=g
whilek<=lx:
csdata.append(cdata)
k+=4
returncsdata

defcschange(self,cki):#对[亿,万,仟]的list中每一个字符串分组停止年夜写化再归并
lenki=len(cki)
i=0
lk=lenki
chk=u
foriinrange(lenki):
ifint(cki)==0:
ifi<lenki-1:
ifint(cki)!=0:
chk=chk+self.gdict)]
else:
chk=chk+self.gdict)]+self.cdict
lk-=1
returnchk

defcwchange(self,data):
cdata=str(data).split(.)
cki=cdata
iflen(cdata)==1:
i=0
chk=u
cski=self.csplit(cki)#分化字符数组[亿,万,仟]三组List:
ikl=len(cski)#获得拆分后的List长度
#年夜写归并
foriinrange(ikl):
ifself.cschange(cski)==:#有能够一个字符串满是0的情形
chk=chk+self.cschange(cski)#此时不须要将数字标识符引入
else:
chk=chk+self.cschange(cski)+self.xdict#归并:前字符串年夜写+以后字符串年夜写+标识符
chk=chk+u整
else:
i=0
chk=u
cski=self.csplit(cki)#分化字符数组[亿,万,仟]三组List:
ikl=len(cski)#获得拆分后的List长度
#年夜写归并
foriinrange(ikl):
ifself.cschange(cski)==:#有能够一个字符串满是0的情形
chk=chk+self.cschange(cski)#此时不须要将数字标识符引入
else:
chk=chk+self.cschange(cski)+self.xdict#归并:前字符串年夜写+以后字符串年夜写+标识符
#处置小数部门
ckj=cdata
lenkj=len(ckj)
iflenkj==1:#若小数只要1位
ifint(ckj)==0:
chk=chk+u整
else:
chk=chk+self.gdict)]+u角整
else:#若小数有两位的四种情形
ifint(ckj)==0andint(ckj)!=0:
chk=chk+u零+self.gdict)]+u分
elifint(ckj)==0andint(ckj)==0:
chk=chk+u整
elifint(ckj)!=0andint(ckj)!=0:
chk=chk+self.gdict)]+u角+self.gdict)]+u分
else:
chk=chk+self.gdict)]+u角整
returnchk
if__name__==__main__:
pt=cnumber()
printpt.cwchange(123410505632.09).encode(utf-8)



本文参照网上的一些写法做了一些修改,应用起来加倍严谨。
小知识:CentOS在服务器提供商、中小型公司中装机量几乎是最大的Linux发行版。

仓酷云 发表于 2015-1-16 23:45:34

来一发Python将阿拉伯数字转化为中文年夜写

下面看看一个让人无法回答的问题:“救命各位高手,向你们请教一些问题:如何在Linux下配制HTTP、FTP、Samba、DNS、DHCP、Sendmail服务器,谢谢”这样的问题。

简单生活 发表于 2015-1-24 12:07:20

有疑问前,知识学习前,先用搜索。

愤怒的大鸟 发表于 2015-2-1 14:26:07

其中不乏很多IT精英的心血。我们学透以后更可以做成自己的OS!?

透明 发表于 2015-2-22 00:52:19

一些显而易见的小错误还是用vi改正比较方便。以后的大一点的程序就得在Linux下调试了,因为有的头文件在VC里面说找不到。?

精灵巫婆 发表于 2015-3-14 07:39:47

Linux高手更具有鼓励新手的文化精神。如何在Linux社区获得帮助,需要说明的是你要有周全的思考,准备好你的问题,不要草率的发问。

第二个灵魂 发表于 2015-3-21 03:07:12

眼看这个学期的Linux课程已经告一段落了,我觉得有必要写一遍心得体会来总结一下这学期对着门课程的学习。
页: [1]
查看完整版本: 来一发Python将阿拉伯数字转化为中文年夜写